linux下串口收发的问题,下面一段代码,select返回的始终是0,程序处于阻塞状态,无法读到数据,在线等

linux下串口收发的问题,下面一段代码,select返回的始终是0,程序处于阻塞状态,无法读到数据,在线等,第1张

1. 确认是否成功打开的串口设备?

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下串口文档,百度上很多的……


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/7572948.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-07
下一篇 2023-04-07

发表评论

登录后才能评论

评论列表(0条)

保存