我使用strstr来搜索括号的开头和结尾,这样我就可以从我实际想要/需要的信息中过滤掉在UART上发送的不正确条目.
我有我的中断存储字符到一个数组和递增计数器. 下面是我的main函数中的代码:
volatile char UART_RX_Buffer[128]; // updated in UART
volatile uint16_t UART_Byte_Counter = 0; // updated in UART
while (1)
{
if(strstr(&UART_RX_Buffer[0], "{") != NULL)
{
if(strstr(&UART_RX_Buffer[0], "}") != NULL)
{
char *ret;
int startindex;
ret = strstr(&UART_RX_Buffer[0], "{");
startindex = (ret - UART_RX_Buffer);
// Clear out UART array and counter
char Empty_Buffer[128] = {0};
memcpy (UART_RX_Buffer, Empty_Buffer, sizeof(UART_RX_Buffer));
UART_Byte_Counter = 0;
}
}
}
因此,如果我发送它,比如说012{345,678},它会将startindex设置为3(这就是我想要的).它成功地进入循环,设置了startindex,并正确地清除了UART_RX_BUFFER和计数器.
奇怪的是,它只在第一次通过时才起作用.如果我第二次发送它,我可以看到缓冲区保存的数据与第一次相同...但它没有进入第一个循环,识别"{"字符.如果我没有正确地处理UART中断,并且缓冲区没有被正确填充,我会看到一个问题...但情况似乎并非如此.我真的不明白为什么我会得到与看起来相同的数据不同的结果(特别是如果我在try 运行该行时可以确认数据在UART缓冲区中).
Clearly I'm missing something. Any ideas what might be causing this? If it helps, it's an STM32L4R5ZI chip (though I would assume this is a C issue and not device specific). I'll include screenshots from the debugger all the same in case it helps. Thanks in advance!