数据包发送程序较为简单,只需要按顺序将各个字段进行填充并通过RS-485
总线发送出去即可。而接收数据包时,由于数据包可能发生错误而出现丢失字节
的现象,这时不应该等待需要的固定字节数,而应该出现超过1.5个字符空隙时
识别出这是坏包,并丢弃该不完整的数据包,以防止下个数据包的损坏。由于中
断程序过长时会阻塞其它中断的发生,这样影响实时性,因此中断程序宜采用短
小精简的函数。所以在通信协议实现时单独分配一个任务用于处理接收数据包,
并分配一个消息邮箱用于串口的中断程序和数据包接收任务间进行通信,在串口
的接收中断函数中只读取接收寄存器中的字符,并将该字符发送给该邮箱,这样
可以保证中断函数精简,不至于阻塞其它中断发生。而数据包接收任务平时处于
等待该邮箱的状态,一旦邮箱不为空,则开始解析包字断,如果不是包头,则继
续等待;如果中间发生超时,则认为是坏包,也丢弃该包,并重新等待;同理,
CRC校验失败时也丢弃,其实现流程图如图4.7所示。
|