gpt4 book ai didi

c++ - 进入 AVR 单片机只读取两个字符

转载 作者:太空宇宙 更新时间:2023-11-04 08:34:47 26 4
gpt4 key购买 nike

我正在做一个涉及 GSM 模块和 ATMEGA328P 之间通信的项目。在实际尝试使用 AVR 检查我的程序是否正常工作之前,我尝试通过终端模拟 GSM 模块,但是每当我输入一个由“gets”函数读取的字符串时,该字符串都没有被正确捕获。我通过在阅读后尝试用“printf”显示它来进行检查,它只显示前两个字符。知道为什么会这样吗?我尝试在键入字符串后清空缓冲区:“while ((ch = getchar()) != '\n'); 以避免出现问题,因为我必须读取多个值并且每当我键入时我都会附加 CR+LF正如 GSM 模块所做的那样回答。

部分代码如下:

writeSerial("AT+CMGF=1");
clear();
readSerial(status);
writeSerial(status);

上面列出的函数声明如下:

void clear(void){
char ch;
while ((ch = getchar()) != '\n');
}

void readSerial(char *arr){
gets(arr,sizeof(arr));
}

void writeSerial(char *arr){
printf("%s\r\n", arr); //CR+LF
}

最佳答案

考虑将您的 readSerial 函数重写为:

void readSerial(char *arr, size_t array_size ){
gets(arr, array_size);
}

函数应该这样调用:

char a[20] = {0};
readSerial( a, sizeof(a) );

在您的情况下,运算符的大小返回指向 char ( char * ) 的指针的大小,而不是数组的大小。

关于c++ - 进入 AVR 单片机只读取两个字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26709928/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com