串口传输链路层协议的妙用

1 背景

在调试项目时发现, 发现仅仅串口传输, 就会遇到多种问题, 层出不穷,故整理如下
1.1 串口中断问题 单字节中断, DMA 空闲中断, 发送不连续.处理不及时
1.2 丢包, 断包, 粘包问题
1.3 驱动与应用耦合太大, 无法愉快的移植
1.4 十六进制与ASCII 码 , 部分开发者傻傻分不清.

初步想法和方案

为了协调上位机与下位机的通信, 想到使用空闲DMA 中断, 可以做到多字节后, 再触发中断, 节省cpu 资源, 然后再和上位机那边规定了通信协议 , 帧头+数据+校验的方式, 就极有可能遇到, 一个数据包分为两段甚至更多段发送, 还要考虑重发机制.

这时候可以写上由帧头+定长, 来实现帧处理的逻辑, 处理不好, 可能会遇到长包漏处理的现象, 这些逻辑性的代码, 实际开发中, 可能会到各种问题, 定好协议后, 调试也会浪费很长很长的时间.

为此, 我试图找一个统一的解决办法. 要么找一个开源方案, 要么自己实现一个

开源方案

网上找到的资料很多, 有很多长篇大论的纯理论上的知识, 过于冗长, 并不适用, 类似于