本帖最后由 科技猎人 于 2016-6-19 19:47 编辑
大概思路:
1.要构建一个结构体用于记录串口接收需要用到的数据
2.初始化硬件,中断接收,初始化上面那个结构体,给串口接收动态分配一个缓存区
3.每次串口接收中断将收到的数据放入缓存区,并对计时清零
4.用定时器中断检查是否超时,超时则认为一包数据已接收完成,发送消息以便中断返回后处理,再为串口接收申请另一块缓存空间,这样就可以马上继续接收下一包数据了
。。。
这样做的好处时:
1.对数据包的格式(固定包头,包尾。长度等)没有任何限制,只要求数据包之间的时间间隔大于数据包内每个字节间的间隔(这是自然的传输情况)
2.不像其他一些缓存式的接收方式需要缓存间的二次拷贝
3.所有处理都是在中断中进行的,没有延时,CPU效率很高,处理及时,能有效避免数据包丢失
。。。
具体程序读者可以根据思路自己编写,也可以参考本人已实现的源码。具体程序在另一篇帖子的附件“MsgOS-51”里有源码
地址:https://bbs.21ic.com/icview-673162-1-1.html
补加感触:
此贴其实只是“MsgOS-51”里很微不足道的一点技术,却比整个系统的访问量多的多,也是醉了。现在更加完善的面向cortex-m的MsgOS系统也已近发布了,不知道最后能不能比这个帖子火。
|