Больше года я не касался C, и теперь я должен сделать этот проект.
Я пишу код для отправки команд MC60 AT через микроконтроллер AVR, однако я только что сделал базовую функцию Uart для отправки тестовых команд и чтения команд на MC60 и теперь просто тестирую на Виртуальном терминале в Proteus, как то, как команды принимаются , В конце каждой команды я посылаю CR и LF, используя их шестнадцатеричные коды, напрямую через UART, пока здесь все нормально, но когда мне приходится получать ответы от 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
}
}
}
}
Я ожидаю, что фактические данные ответа от MC60 после отправки команды чтения с помощью send_readcmd () будут сохранены в массиве символов соответственно. В настоящее время он распознает команды, которые я чувствую, но ответ беспорядок, я не могу разобрать этот ответ должным образом.
Пожалуйста, кто-нибудь поможет мне и подскажет, как получить ответ и отделить фактические данные ответа от CR и LF с обеих сторон и сохранить фактические данные в массиве, соответственно