-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

これは、コンパイラがnull で終了する (別名 c 文字列)rxBufferとして解釈しているためだと思います。char*これは、printf が address から始まりrxBuffer、値に達するまで値を出力することを意味します0

次のようなものでバッファの値を出力したいかもしれません

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

代わりは

于 2020-12-24T01:57:06.163 に答える