1.串口接收带帧隔间的(大于3倍的一字节接收时间),利用定时器就可以溢出分析处理整包
2.串口不要命的连续给单片机发数据的,利用0x10 0x02 =STX 0x10 0x03=ETX IDLE=10 就可以解决
或者这种:地址拆分0x0X 长度拆分0x2X 命令数据和CRC拆成0x3x 结束符固定0xFF (效率换正确率)
中断状态机分析写入一个二维MAX FIFO组,完了告诉任务就可以处理了
3.楼主这种没头没尾的,连状态机都难搞 LL里面可能带0A吧,XX里面也可能带0B吧 一旦串口中断接收buffer溢出返回头部 或者分析不及时,XX里的OB当成了命令OB,再加还没有CRC的话 那麻烦了 
如果不存在3的问题 命令和长度和数据都是唯一区分的.那按二维MAX FIFO组 将数据填充进去再单整包分析的话 也是非常实时,浪费些内存,效率还是很高的
思路如下 写一个结构体, 包含状态、命令,长度 和一个MAX buf, 再定义一个二维数据,最大处理几个包,每个包里的极限数据量长度是多少。
串口收到数据,中断里面就判断2个类型,查空位组,对其只管不断拼独立包 独立一个一个的在二维数据里面排列好了 。
然后后台检测这个二维数组是否有新的包被登记了,结构体指向,利用switch 去处理结构实体里面的 cmd 和 data就是了,处理掉就释放出空位
|