cathy 在 提交
![cathy的头像 cathy的头像](https://cdn.eetrend.com/files/styles/picture200/public/letter-avatars/u-593.png?itok=XTs2kpZ8)
通信设计中考虑协议的灵活性,经常把协议设计成“不定长度”。
一个实例如下图:锐米LoRa终端的通信协议帧。
![“最适合单片机的通信协议,如何设计?"](http://mcu.eetrend.com/files/2022-04/博客/100559239-248755-1.jpg)
如果一个系统接收上述“不定长度”的协议帧,将会有一个挑战--如何高效接收与解析。
为简化系统设计,我们强烈建议您采用“状态机”来解析UART数据帧,并且把解析工作放在ISR(中断服务程序)完成,仅当接收到最后一个字节(0x0D)时,再将整个数据帧提交给进程处理。
该解析状态机的原理如下图所示:
![“最适合单片机的通信协议,如何设计?"](http://mcu.eetrend.com/files/2022-04/博客/100559239-248756-2.jpg)
那么ISR处理这个状态机来得及吗?答案是:so easy!因为它只有3个动作,运算量十分小:
比较接收数据 -> 更新状态变量 -> 存储接收数据,C语言仅3条语句,翻译成机器指令也不超过10条。
代码清单如下:
![“最适合单片机的通信协议,如何设计?"](http://mcu.eetrend.com/files/2022-04/博客/100559239-248757-3.png)
今天的文章就到这里了,文章不长,设计思路很重要,希望对您有所帮助。
原文地址:https://blog.csdn.net/jiangjunjie_2005/article/details/50619884
来源:小麦大叔
免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。