太阳能项目
- 串口通信
在解析串口数据时,采用事件触发函数,来一个字节触发一次函数。每次从接收缓冲区取大于或等于一帧长度数据。- 异常1:数据头之后的长度不够,跳出保存
- 异常2:校验码错误,丢弃整包数据,跳出
- 异常3:整包数据都未找到头,无剩余数据保存
- 正常数据:
- 一包数据刚够
- 剩余多余数据:跳出保存
总结:写完程序调试总会出现各种bug,因为自己的逻辑不严谨,要注意每一个if 后的else 是否完整,遇到if一定要看多个else是否情况包含完整(if else类似二叉树形状,生活中大部分分类都是根据树状图来分类的)
//更新20200729
串口接收程序将接收和处理分成两线程处理
//注意:该串口接收事件函数一直在监听接收缓冲区,每接收一个字节,触发一次。
/// <summary>
///
/// 思路:1.定义一个接收缓冲区list集合,将接收的数据存入,若缓冲区满,采用队列形式移除头部信息。
/// 2.另开一个处理数据线程,根据帧尾从接收缓冲区集合不断取出每一帧数据进行处理。
/// 3.接收线程和处理线程共享接收缓冲区结合资源,使用同步锁保证线程安全。
/// 将接收和处理分成两线程好处是加快数据接收处理效率,不会出现发送端频率很快且数据多时,上位机处理不过来,导致数据浪费。