linux串口发送指令(write),一条指令的字节之间不连续,如何
imx6与工控机232通讯;arm 向工控机发送一条指令类似如下:
伪代码:
cmd = {01,02,03,04,05,06,07,08,09,10,11,12,13,14,15};
ret = write(uart_fd,cmd,15);
函数执行完,ret 为15,证明write发送成功;
但是工控机接收的这条指令不连续,用串口监控工具捕获显示:01~14 连续接收,经过几毫米之后才接收到15;
(波特率为115200,字节之间的间隔应该不会超过1ms)
怀疑是不是arm发送的不连续,write先一次发送了14个字节,然后又发送最后一个字节数据15,造成工控接收不连续;
是不是串口缓冲区大小为14个字节,多了需要分多次发送?
缓冲区大小可以设置吗?
网上找的一篇 写的不是太详细http://blog.csdn.net/sno_guo/article/details/17799739
刚脆一个字节一个字节发? 应该是linux的问题,发送进程可能被其它进程中断,另外写数据只是写给了驱动层,驱动层如何往外发,你并不知道。 曾经vmware虚拟机用原生串口也看到包被拆开得事。 Linux,应用把数据传递给驱动,驱动由内核控制发送。分包很常见。极端时有单个字节发送情况 控制板应该要有 接收超时机制,超过多少MS后才认为上位机发送超时,清空数据,重新接收数据包
windows linux都很正常啊,操作系统的就这样,自定通信协议就行 通信协议要处理好,不能完全依赖时间和连续性 可不可以把调度器锁上,发完在打开呢
页:
[1]