我正在从CAN接口接收消息到我的mBed设备中。然后,mBed设备解析信息以将串行发送到另一个设备。信息以下列格式发送。
“< msg> xxxxxxxxxxxxxxxxxxx< / msg>”其中x =十六进制数。
接收此消息的其他设备将收到分成两半的信息(我已在代码中对此进行了说明)。我遇到的问题是,消息将落入格式.....但有时格式丢失,例如:
[1]xxxx< /msg>< msg>xxxxx
[2]xxxxxxxx< msg>xxxxxxx
[3]< /msg>< msg>xxxxxxxxx
[4]xxx< /msg>< msg>xxxxxx
**Please ignore the space in the msg tag, it was necessary to show on StackOverflow'**
mBed上的波特率设置为38400bps。我没有使用任何奇偶校验,停止位,启动位等,因为我不太熟悉它们的工作方式。任何人都可以帮助我如何解决这种格式损失,或者我将不得不在接收设备中包含代码来处理这个问题?
非常感谢提前!
答案 0 :(得分:2)
这是完全正常的,串行端口不够智能,无法识别XML。您必须自己编写代码。基本算法是状态机。声明一个足以存储完整消息的缓冲区。然后:
<msg>
,如果您没有<msg/>
,如果您没有这可确保您在打开端口时正确地与总线同步,并且您不关心在一次read()调用中收到多少字节。