问题描述
我正在修改微控制器的固件。 我有两个 RxBuffers,我打算添加第三个,所以我打算使用相同的例程来解析它们。问题是其中一个与其他的偏移量不同。 示例:
RxBuffer1="#DATA,1,5,8"
RxBuffer2="DATA,8" //<-Different offset
RxBuffer3="#DATA,8"
void ParseData(char *xBuffer)
{
//Parse data starting at xBuffer +1
}
创建 ParseData
例程是为了解析 RxBuffer1
格式而不是 RxBuffer2
格式的数据。
在此级别未以任何方式使用 #
。
我应该如何传递地址以使ParseData
正确获取RxBuffer2
的地址?
我认为应该是RxBuffer2-1
。也许ParseData(RxBuffer2-1)
?
解决方法
传递 RxBuffer2 - 1
是未定义的行为。相反,您应该创建一个需要 RxBuffer2
格式的函数,并且可能重构旧函数以使用这个新函数:
void ParseActualData(char *xBuffer)
{
// expects `DATA`
}
void ParseData(char *xBuffer)
{
// expects `#DATA`
ParseActualData(xBuffer + 1);
}
或者,如果解析逻辑允许,您可以让 ParseData
接受两种变体并根据第一个字符确定要执行的操作(例如,如果第一个字符是 #
,则跳过它)。>