打印

串口数据收发问题

[复制链接]
1097|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的挂起。

使用特权

评论回复
5
yybj| | 2013-12-27 20:10 | 只看该作者
你这样就是一个循环队列了,溢出后会自动覆盖开始的几个字节,简单一点就是收到24个字节后不接收,直到发送完毕后再开始接收。复杂一点就做一个200ms定时器,在收到数据后打开定时器,超时后自动发送。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

196

主题

2726

帖子

0

粉丝