串口数据收发问题

[复制链接]
1520|4
 楼主| pkat 发表于 2013-12-27 18:10 | 显示全部楼层 |阅读模式
如果串口发送的数据比收的数据多,比如我收到一个‘a’,收到‘a’后,把‘a’转成AT%IPSEND="61",就是收到的数据都转成对应格式的16进制ascii,并且用AT%IPSEND="",放进那个双引号发送出去,这样的话,发的慢收的块,发这边还没发完,收那边又中断开始收了,就会造成数据丢失。
不知道是我没想到方法还是这样就没法实现?
dfsa 发表于 2013-12-27 18:48 | 显示全部楼层
单位时间内收发流量匹配才行。
hsbjb 发表于 2013-12-27 18:58 | 显示全部楼层
方案 1: 接收端增加流控制,但需要更多信号线。
方案 2: 如果收发使用不同的端口,可以采用不同的波特率,即发送端使用更高的波特率。例如接收端 9600,发送端 115200。
如果接收端没有空闲时间供转发,或者接收空闲不确定,那缓存也是没有用的。
baidudz 发表于 2013-12-27 19:50 | 显示全部楼层
这事因为你字符串最后一个字节需要补0,如果不补0,那后续对字符串的处理就会造成指针的跑飞,从而引起CPU的挂起。
yybj 发表于 2013-12-27 20:10 | 显示全部楼层
你这样就是一个循环队列了,溢出后会自动覆盖开始的几个字节,简单一点就是收到24个字节后不接收,直到发送完毕后再开始接收。复杂一点就做一个200ms定时器,在收到数据后打开定时器,超时后自动发送。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

196

主题

2726

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部