gpt4 book ai didi

c - 在C中读写AT命令到串口

转载 作者:太空宇宙 更新时间:2023-11-04 02:49:49 25 4
gpt4 key购买 nike

我正在尝试将调制解调器切换到命令模式,编写 AT 命令并解析响应,但我对 C 不太好,我不明白哪里出了问题。我调用的代码是:

void switch_to_command_mode(int uart)
{
current_command_type = BTCommandTypeSwitchToATMode;
char switchCmd[] = "\x2F\x2F\x2F";
char emptySymbol[] = " ";
char checkAT[] = "AT\r";
ssize_t len = 0;
write(uart, emptySymbol, strlen(emptySymbol));
sleep(1);
write(uart, switchCmd, strlen(switchCmd));
sleep(1);
write(uart, checkAT, strlen(checkAT));

char buffer[255]; /* Input buffer */
char *bufptr; /* Current char in buffer */
int nbytes;

bufptr = buffer;

while (ioctl(uart, FIONREAD, (unsigned long)&len) == 0 && len < 2) {
warnx("waiting");
usleep(1000);
}

while ((nbytes = read(uart, bufptr, buffer + sizeof(buffer) - bufptr - 1)) > 0)
{
bufptr += nbytes;
warnx("buffer %s", buffer);
if (bufptr[-1] == '\n' || bufptr[-1] == '\r')
break;
}

warnx("Final buffer: %s", buffer);
if (strncmp(buffer, "OK", 2) == 0) {
warnx("Great success!");
}
}

我得到的控制台输出是:

waiting
waiting
buffer AT
O p �0
buffer AT
OK
�0
Final buffer: AT
OK
�0

根据 BT 模块的文档,响应的格式应为 <CR><LF>OK<CR><LF> .

任何关于为什么会发生这种情况以及我能用它做什么的指导将不胜感激。

附言我也已经通过了Serial programming for POSIX OS .

最佳答案

在 C 中,“字符串”需要以 0 结尾。

如果它们在被处理(打印在这里)之前没有被处理,程序就会遇到未定义的行为。这也可能导致打印“垃圾”。

要解决此问题,请在使用之前轻松地将用于所有 0 的缓冲区初始化,方法是:

char buffer[255] = "";

此外,read() 返回 ssize_t 而不是 int。所以你最好这样做:

ssize_t nbytes;

关于c - 在C中读写AT命令到串口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23266342/

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