原创文章,禁止转载
很久没有更新文章了,来两篇硬核点的自定义协议,不接受转载,仅做笔记备忘~
在数据传输过程中,数据的安全传输是非常非常重要的,比如TIP/IP七层模型,每一层模型中都需要遵守对应的协议,它有着严格的标准,无规矩不成方圆。只有所有的设备厂商,软件开发者,和上层应用都遵守同一套标准协议,数据才能完整、安全地传输。
举个例子,在发起一次HTTP请求时,需要TCP经过三次/四次握手的阶段,注意:三次挥手与四次握手是在TCP中进行的!而不是HTTP!
如图:
TCP三次握手的目的,是为了解决UDP传输不可靠缺点,因为它能保证数据准确到达客户端设备,这里不介绍TCP三次握手的具体步骤,而是通过这个例子来说明,数据传输过程中,安全性是最重要的。而如何确保数据的安全传输,就需要有特定的协议来规范数据。
前些时间,遇到了一个产品上报的数据时不时就会出错的情况,经过仔细排查之后发现,是串口收发的数据存在丢包的情况,但是在测试时却很难复现,猜测可能是在实际环境中存在干扰所致,所以问题也就很简单:给串口传输加一层协议。也就是本篇文章的重点,自定义串口协议的实现。
多数情况下,工业应用中串口设备传输的数据,都是以16进制字节流的形式,而不会传输string
字符串,当然string
在ASIIC码中也是以字节表示。但是如果你直接使用string
对数据进行描述的话,产品被人抄袭或破解的可能性就会大大增加,所以这也是有安全性考虑的。
遵循商业保密的原则,下图所示的串口协议均为本人自行定义,网上类似文章很多,不参与深入讨论。且文中所有代码均只做示范参考,点到为止。写本篇文章的目的也仅仅作为自己的技术笔记,本人对此文拥有绝对解释权利,禁止一切形式转载与盗用,必要情况下会对此文章进行加密。
如上图,一帧串口数据可以分为起始位,包长,报文类型,数据长度,数据域,校验和还有结束位
。
在 C 实现中,可以将一帧数据包定义为一个结构体;
我们知道,串口数据是要通过串口中断进行接收的,但是在中断中是不能运行占时间的处理程序的,所以,数据处理函数千万不要放在串口中断中,一定要等到串口接收完成之后,再跳转到数据接收函数
,也就是说:在串口中断中,先将所有数据收进串口FIFO,同时标志位置位,再另开线程通过判断标志位的方法,去处理接收进来的数据,此时的数据是完整收进来了的。
串口接收进程示例:
这个程序的核心在于,串口接收进程的处理上,按字节处理,通过数组进行偏移,同时需要特别注意的是:串口接收Buff(FIFO)数组,与协议解析Buff数组 不要混用同一个!
这是很多新手容易忽视的一个细节,因为串口中断接收与协议解析,几乎是同时正在进行的两个任务,如果通用一个Buff数组,这会导致数组出错!同理,协议解析与数据处理函数也不要公用一个Buff。
最好在传入数组之后,做一个判断,判断前后两个数组是否已经完全拷贝成功,确保数据传入成功了再对前一个数组进行清零,释放内存。
接收函数就是这样,比较简单但也容易出错,下一篇更新:
自定义通信协议—基于串口的C实现(发送篇)
感谢您的阅读与支持~
The End~
版权属于:编码书生
本文链接:https://codess.cc/archives/405.html
所有原创文章采用知识共享署名-非商业性使用 4.0 国际许可协议进行许可。
除特别注明,您可以自由的转载和修改,但请务必注明文章来源且不可用于商业目的。
125 条评论
学习
学习一下
学习一下
想开屏蔽的内容
学习
学习学习
学习学习
学习
学习一下
看看
好的
学习学习
大神我想研究研究
学习一下
学习一下
学习学习
谢谢
学习下
加油
给力
给力赞OωO
学习
didi,stduy
给力
学习,学习
不错
内容给力
大佬,最近在搞自定义串口协议,学习一下!
内容给力
学习学习
看看
感谢分享文章
博主加油 谢谢OωO
博主加油 谢谢风险
学习学习!
来学习学习
不错的学习内容,大赞OωO
学习一下
给力赞
学习一下
学习
学习一下
看看
进来学习
看看
nice
非常好
博主加油!
6666
很不错
学习
发送的没看到。写的很好。谢谢
不错
博主给力OωO
非常详尽
11
学习学习
文章写得很好
感谢支持~
学习学习
看看
前段时间刚做了类似的协议,支持!
感谢!学习了
给力
非常给力,谢谢分享OωO
谢谢楼主分享
给力
很好!谢谢!
不错
学习一下
hi
感谢
1
学习,感谢
你好
你好
你好
你好
感谢感谢
学习学习
学习一下
OωO
学习一下
学习一下
感谢
学习一下
谢谢楼主分享
6
666
666666
666666
看看学习,非常感谢!
感恩
1
1
ff
1
手动阀
厉害
给力,赞
参考一下
看看
牛逼
啦啦
真的很不错,讲的很清楚
谢谢博主分享!
OωO
感谢分享OωO
博主威武
谢谢楼主分享
康康
康康
很不错
popopopopopopo
给力
|´・ω・)ノ
看看
看看
博主大方
博主给力OωO
博主加油
nice
OωO
OωO
给力赞OωO