写了个程序,使用串口收发数据:
使用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提供的信息