-1

我有一个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[] = "AT\r\n";
uint8_t atSetSTA[] = "AT+CWMODE=1\r\n";

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 时,没有任何内容打印到控制台。当我不使用 memset 时,在这种情况下它也会打印以前的响应。

4

1 回答 1

0

你如何打印到控制台?

如果您正在调用printf(rxBuffer)printf将不打印任何内容,因为缓冲区的第一个值是0

我认为这是因为编译器将其解释rxBufferchar*空终止的(又名 c 字符串)。这意味着 printf 将打印从 addressrxBuffer开始的值,直到0达到值。

您可能想用类似的东西打印出缓冲区的值

printf("Buffer = [");
for (int i = 0; i < sizeof(rxBuffer); i++) {
   printf("%d", rxBuffer[i]);
}
printf("]\n");

反而

于 2020-12-24T01:57:06.163 回答