wq_601840968 发表于 2016-9-30 13:58:42

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



rom 发表于 2016-9-30 14:39:38

刚脆一个字节一个字节发?

MiniCat 发表于 2016-9-30 14:46:24

应该是linux的问题,发送进程可能被其它进程中断,另外写数据只是写给了驱动层,驱动层如何往外发,你并不知道。

NJ8888 发表于 2016-9-30 15:02:26

曾经vmware虚拟机用原生串口也看到包被拆开得事。

fchen2 发表于 2016-9-30 15:47:01

Linux,应用把数据传递给驱动,驱动由内核控制发送。分包很常见。极端时有单个字节发送情况

duxingkei 发表于 2016-9-30 15:51:38

控制板应该要有 接收超时机制,超过多少MS后才认为上位机发送超时,清空数据,重新接收数据包

gongxd 发表于 2016-9-30 17:41:40

windows linux都很正常啊,操作系统的就这样,自定通信协议就行

vows 发表于 2016-10-2 06:21:32

通信协议要处理好,不能完全依赖时间和连续性

wq_601840968 发表于 2016-10-8 12:59:31

可不可以把调度器锁上,发完在打开呢
页: [1]
查看完整版本: linux串口发送指令(write),一条指令的字节之间不连续,如何