2. 确认打开串口后, 是否设置了波特率等一系列的参数?
3. 确认是否可成功写入?
4. 尝试使用poll 来代替select. 对于系统设备, 有时select不能正常工作而poll是可以的。
open(dev, O_NONBLOCK|O_RDWR)..... 非阻塞------解决方案--------------------
C/C++ codefd = open( Dev, O_RDWR | O_NOCTTY)
options.c_cc[VTIME] = 0/* 等待100ms* 该值等待时间就返回 */
options.c_cc[VMIN] = 1/* 接收到该值数量字节就返回 */
/* 上面两个条件为非零时才有效,两个都为非零时任意一个条件达到都返回,如果两个条件都为零,则马上返回 */
tcflush(fd,TCIFLUSH) /* Update the options and do it NOW */
if (tcsetattr(fd,TCSANOW,&options) != 0){
return ERRCOM_SETATTR
}
return ERRCOM_OK
------解决方案--------------------
两个都为非零时任意一个条件达到都返回
如果两个条件都为零,则马上返回
如果一个为非零,则仅仅关注该非零条件
首先你确定你那串口是否有东西可读? 就是你上面说的“一个文件不停的写数据到串口”!你可以先不这样读取,你可以在终端上用cat试试是否有数据可读:cat /dev/ttyS0如果有的话,那你就检查串口设置是否正确,如波特率,数据位,停止位,校验位等!
最后就是你读取的函数了,看看先不要用printf打印字符串了,先看看十六进制是否有,然后再看字符等!
就是以上一些,你还可以参考Linux下串口文档,百度上很多的……
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)