我有一个uint8_t rxBuffer[200] = {0};
数组。
缓冲器接收来自UART的消息USART1.Receive(rxBuffer, sizeof(rxBuffer));
我想在这个rxBuffer中接收UART响应,解析它们,然后重用这个数组来解析进一步的响应。如何清除此缓冲区并重新使用它?
我尝试使用memset(rxBuffer, 0, sizeof rxBuffer);
,但当我尝试打印出缓冲区内容时,调试控制台上没有打印任何内容
我在这里做错了什么?
我将提供一个sudo代码,我正在尝试做什么:
uint8_t rxBuffer[200] = {0};
uint8_t at[] = "ATrn";
uint8_t atSetSTA[] = "AT+CWMODE=1rn";
DEMO_USART1.Send(at, sizeof(at) - 1);
delay(1000);
DEMO_USART1.Receive(rxBuffer, sizeof(rxBuffer));
print(rxBuffer);
memset(rxBuffer, 0, sizeof rxBuffer)
DEMO_USART1.Send(atSetSTA, sizeof(atSetSTA) - 1);
delay(1000);
DEMO_USART1.Receive(rxBuffer, sizeof(rxBuffer));
print(rxBuffer);
memset(rxBuffer, 0, sizeof rxBuffer)
当我使用memset时,Nothing会打印到控制台。当我不使用memset时,在这种情况下,它也会打印以前的响应。
如何打印到控制台?
如果调用printf(rxBuffer)
,printf
将不打印任何内容,因为缓冲区的第一个值是0
。
我认为这是因为编译器将rxBuffer
解释为以null结尾的char*
(也称为c字符串(。这意味着printf将从地址rxBuffer
开始打印值,直到达到0
的值。
你可能想用之类的东西打印出缓冲区的值
printf("Buffer = [");
for (int i = 0; i < sizeof(rxBuffer); i++) {
printf("%d", rxBuffer[i]);
}
printf("]n");
而是