【问题标题】:Reuse a uint8_t buffer to store UART responses重用 uint8_t 缓冲区来存储 UART 响应
【发布时间】:2021-04-01 05:39:11
【问题描述】:

我有一个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 时,在这种情况下它也会打印以前的响应。

【问题讨论】:

标签: arrays c buffer uint8t uint8array


【解决方案1】:

你是如何打印到控制台的?

如果您调用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");

改为

【讨论】:

    猜你喜欢
    • 2022-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-16
    • 2013-07-26
    • 1970-01-01
    • 2014-12-28
    • 2019-12-03
    相关资源
    最近更新 更多