我正在尝试实现UART协议以在两个板之间进行通信。数据是ascii编码的,消息长度是变量。我选择实现一个数据包以“封装”信息。 包:{STX,DATA,ETX}。
STX是ASCII表中的“文本开头”。它的十六进制代码是0x02,ETX是“文本结束”。它的Hex代码0x03。在数据字段的每个字节可以从任意值0x00至0x7F除外0x02和0x03。
问题1:数据长度
如何通过uart发送可变数据长度?
示例:{STX,Hello 0,RTX}和{STX,这是一个长文本 0,RTX}
我一直在互联网上挖掘,我发现最好的方法是使用FIFO循环缓冲区。问题是BUFFER_SIZE在这种情况下如何解决?假设我已经完成了一些数学运算,并且我发现通过UART传输的最长信息是90字节,最短的是4字节。我#define BUFFER_SIZE 90或我需要更大的缓冲区吗?
在这两种情况下,FIFO在这些情况下如何工作:
情况1:数据长度
示例:{STX,ABCD,ETX}和BUFFER_SIZE = 90字节。
情况2:缓冲区已满,但数据仍然存在。
示例:BUFFER_SIZE = 13
包:{STX,READ_X,ETX} {STX,REMOVE_Y,ETX}。
在HEX中,这些消息是
0x02 0x52 0x45 0x41 0x44 0x5f 0x58 0x00 0x03 0X02 0x52 0x45 0x4d 0x4f 0x56 0x45 0x5f 0x59 0x00 0x03
当我们到达时0x4d(斜体),缓冲区已满。它是如何处理这种情况的?