0

我正在将来自 CAN 接口的消息接收到我的 mBed 设备中。然后,mBed 设备解析信息以串行方式发送到另一台设备。信息按以下格式发送。

"< msg>xxxxxxxxxxxxxxxxxxxxx< /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。我没有使用任何奇偶校验、停止位、开始位等,因为我不太熟悉它们的工作方式。谁能帮助我如何解决这种格式损失,或者我是否必须在接收设备中包含代码来处理这个问题?

提前谢谢了!

4

1 回答 1

2

这是完全正常的,串口不够智能,无法识别 XML。您必须自己编写代码。基本算法是状态机。声明一个足够大的缓冲区来存储完整的消息。然后:

  1. 扔掉你收到的所有东西,直到你得到'<'
  2. 将收到的字节存储在缓冲区中,直到获得“>”
  3. 检查你有没有<msg>,如果你没有回到状态1
  4. 将收到的字节存储在缓冲区中,直到获得“>”
  5. 检查你有没有<msg/>,如果你没有回到状态1
  6. 处理消息,返回状态 1

这可确保您在打开端口时与总线正确同步,并且您不在乎在一次 read() 调用中收到多少字节。

于 2013-07-22T12:33:40.147 回答