使用roslaunch调用串口程序时需要的异常退出问题

来源:互联网 发布:数据分析建模方法 编辑:程序博客网 时间:2024/06/07 17:37

写了个程序,使用串口收发数据:

使用rosrun 执行此程序时,拔掉usb转串口模块,程序正常,不会出现异常。

但在利用roslaunch调用此节点时,拔掉usb转串口模块,程序死掉,异常。

发现时打开串口的方式造成的。

在打开方式改为:“O_RDWR | O_NOCTTY | O_NDELAY”即可。

查询资料显示:

标志O_NOCTTY可以告诉UNIX这个程序不会成为这个端口上的“控制终端”。如果不这样做的话,所有的输入,比如键盘上过来的Ctrl+C中止信号等等,会影响到你的进程。而有些程序比如getty(1M/8)则会在打开登录进程的时候使用这个特性,但是通常情况下,用户程序不会使用这个行为。

O_NDELAY标志则是告诉UNIX,这个程序并不关心DCD信号线的状态——也就是不关心端口另一端是否已经连接。如果不指定这个标志的话,除非DCD信号线上有space电压否则这个程序会一直睡眠。


感谢http://blog.chinaunix.net/uid-27041925-id-3998634.html提供的信息

1 0