打印

不好意思顶了老帖子,我对UART超时的用法。

[复制链接]
2551|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
罗菜鸟|  楼主 | 2010-9-7 13:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我在CC2430上实现了MODBUS,在CC1110上实现了UART透传。
UART应用程序中超时,串口中断的时候数据往环形队列里面放,队列就是一个组数,有两个标记表示头和尾,这个方法我也是模仿一些国外开发系统中集成的程序。
主程序中用getch函数,读队列,我开了一个1ms的定时,1ms内一直用getch读队列,直到把队列读空为止。等时间到了,继续设置下一个1ms,继续读。如果某次超时,队列被读空了,就算一包打包完成。下一个1ms收到读到新的数据,就算新包
沙发
yybj| | 2010-9-7 17:25 | 只看该作者
不用不好意思,写的很好:lol

使用特权

评论回复
板凳
fqingy2003| | 2010-9-9 17:15 | 只看该作者
其实标准的串口规约中都有包间隔延时规定,只不过很少有人重视过?一个是四个字符间隔时间左右,但很多人也没有遵循这个时间间隔,发数一包接一包,毫无间隔!不好设计呀!

使用特权

评论回复
地板
ploto| | 2010-9-15 16:22 | 只看该作者
一般象串口这种流式设备,接收时都采用状态机,从流数据中恢复帧结构,不要依赖于延时认为帧结束。字符间超时结束是为了防止数据丢失导致后续数据处理不正确而设计的。在串口一般规定超时尤其是从发送到接收到的延时,都是为485考虑的。
我们一般要求串口或是其它外设的数据发送都是采用发送环形队列实现的,主要是考虑到多任务操作系统的话,防止外设冲突。

使用特权

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

本版积分规则

132

主题

522

帖子

8

粉丝