|
上位机的代码做的不完善,我遇到过这样的问题。导致这样的问题原因比较多:
1.软件代码本身的容错性差
2.通信双方,有一方重启后,可能会无法控制的发出数据。例如ARM7的串口,在硬件复位时,无法控制的会在串口上发送一堆无规律的数据,而另一方如果把这些数据当做是有效的,自然会影响到后面的解析。
3.其他的原因没有深究。
但这些原因虽然很多很复杂,但现象是一样的:数据错乱,一般校验和是通不过的,所以针对这些方面,方法却是统一的,就是检查到校验和通不过就丢弃并刷新串口。校验和的检查,发送方可以用最后一个字节来存储前面所有字节的和(需要支持翻转),接受方把前面的全加起来(需要支持翻转),看是不是等于最后一个字节的数据,当然无法保证绝100%的正确率,不过一般通信达到一定的准确率就可以了。校验和也可以采用自己定义的方式来做,不要受我给出的例子的局限。
建议你要在上位机和下位机中做数据校验,甚至是状态机(状态机我也不是很清楚,但至少校验是不难做的,也是很有意义和效果的)。
我的情况是:
上位机是ARM9,下位机是ARM7,其实和你这个是一样的问题,ARM7重启后,ARM9会出现问题,另外即使是不重启也有时会出现数据错乱的问题,最先想到是使用串口API中的刷新函数,但却发现没有任何效果,可能是这个开发平台有问题,然后想到了最绝最有效的方法,就是close串口后再open串口,这样就有刷新的作用。 |
|