我的串口程序可以说是上位机给下位机发送命令用的。 发送与接收都是用中断模式。 1,上位机发送一个12字节的命令帧,其中前8个字节是指令/数据,后4个字节是CRC-32校验码。 2,下位机通过一个volatile声明的计数变量从中断中循环接收12个字符。 3,下位机校验收到的前8个指令/数据字的CRC并与后4个字节CRC码比较。 4,如果相等则存入命令栈中等待执行,并发送0xFF(11111111B)表示接收正确,如果不相等或者命令栈满了则发送0x00(00000000B)要求重发。 5,(这一步我都觉得太夸张了)上位机接收到下位机返回的那个字节,并逐位分析,如果1的数量≥4个则判定下位机接收成功,如果1的数量<4个则判定下位机接收失败要重发,这样的话关键的返回值受干扰翻转了也没事,总不能在一个字节内给我连错4个吧- - =================================================================== 上位机和下位机都用的ARM7核,运算速度应该够,大家怎么看呢? |