gpt4 book ai didi

c - 如何在字符串开头和结尾的 MC60 的每个响应中识别 CR 和 LF?

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

一年多没接触过C,现在不得不做这个项目。我正在编写通过 AVR 微 Controller 发送 MC60 AT 命令的代码,但是我刚刚制作了 Uart 的基本功能,用于向 MC60 发送测试命令和读取命令,现在只是在 Proteus 的虚拟终端上测试如何接收命令.在每个命令的末尾,我直接通过 UART 使用十六进制代码发送 CR 和 LF,直到这里都很好,但是当我必须收到 MC60 的响应时,它们的开头和结尾也有 CR 和 LF,而我的代码无法从中提取实际的响应数据,不包括命令。我只想将我的实际响应数据存储在一个可以从函数返回的字符串中。下面是我获取响应的代码示例:

unsigned char uart_RX()
{
while(!UCSRA & (1<<RXC));
return UDR;
}

void response(char *rec) //function to fetch the response in string format
{
char x;
do
{
x = uart_RX();
*rec = x;
rec++;
}
while(x!=NULL);
return;
//_delay_ms(10);
}

void main()
{
char buf[200];
char resp[200];
char cr, lf;
uart_init(12);
_delay_ms(1000);
send_readcmd(READNAVINFO); //function that sends "<CR><LF>AT+QGNSSRD?<CR><LF>" command through my own defined library of AT commands
while(1)
{
cr = uart_RX();
if (cr==0x0D)
{
lf = uart_RX();
if (lf==0x0A)
{
response(buf);
snprintf(resp, sizeof(buf), buf); //I feel resp will store the buf data without CR and LF

}
}
}
}

在使用 send_readcmd() 发送读取命令后,我希望来自 MC60 的实际响应数据存储在 resp 字符数组中。目前它正在识别我感觉到的命令,但响应一团糟,我无法正确解析该响应。请有人帮助我并指导我如何获取响应并将实际响应数据与 CR 和 LF 两侧分开并将实际数据存储在数组中。

最佳答案

建议改为在没有事先输入的情况下收到 '\r''\n' and 以悄悄地丢弃该数据并寻找更多。

当收到带有先前输入的'\r' '\n' 时,将其标识为命令结束.

// I'd also expect some timeout criteria, yet that is TBD code
void response(char *rec, size_t size) {
char ch;
while ((ch = uart_RX()) == '\r' || ch == '\n') {
;
}
do {
if (size > 1) {
size--;
*rec++ = ch;
}
ch = uart_RX();
} while (ch != '\r' && ch != '\n');
if (size > 0) {
*rec = '\0';
}
}

用法

while (1) {   
response(buf, sizeof buf);
printf("%s", buf);
}

关于c - 如何在字符串开头和结尾的 MC60 的每个响应中识别 CR 和 LF?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54027455/

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