我想從STM32VLDiscovery(STM32F100X4)的USART1中獲取字符串,並從USART1收到的字符串中寫入AT命令解析器。如何在C中創建AT命令解析器以從USART1獲取傳入的字符串?
以下是我開發的概念,但我不確定它是否正確。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "dosomethinga.h"
void dosomethingB();
void GET_AT_COMMAND(char*);
void takecommand(char *, char *);
int quit;
int main()
{ char buff[15];
char command = '\0';
quit = 0;
while(!quit)
{
printf("Enter your command: ");
scanf("%s", &buff);
if (buff[0] == 'A' && buff[1] == 'T' && buff[2] == '+')
{
GET_AT_COMMAND(buff);
}
}
}
void dosomethingB()
{
printf("dosomethingB called \n");
}
void GET_AT_COMMAND(char *text)
{
int command;
char temp[10] = "";
/*if(text[3] == 'A')
command = 1;
else if(text[3] == 'B')
command = 2;
else if(text[3] == 'Z')
command = 3;
*/
takecommand(text,temp);
if (strcmp(temp, "CALLA") == 0)
command = 1;
if (strcmp(temp, "CALLB") == 0)
command = 2;
if (strcmp(temp, "Z") == 0)
command = 3;
switch(command)
{
case 1:
dosomethingA();
break;
case 2:
printf("herehere.... \n");
dosomethingB();
break;
case 3:
printf("Exiting program.... \n");
quit = 1;
break;
default:
printf("Nothing to do here \n");
}
}
void takecommand(char *mycmd, char *hold)
{
int i;
for(i = 0; i < 10 ; i++)
{
hold[i] = mycmd[i+3];
}
}
任何人都可以解釋我應該做的步驟嗎?謝謝。
我不知道AT命令什麼,但我敢打賭,你可以刮掉一些代碼行將'switch'語句的'case'塊移動到指定的函數,並在'if-else'塊中調用它們。 'if(strcmp(temp,「CALLA」)== 0)dosomenthingA(); else if(...)dosomethingB(); ...'。 –
也許更好的代碼審查?你有一個錯誤:'scanf(「%s」,&buff)'buff是一個數組,可以直接使用,你應該關心輸入長度:'scanf(「%。14s」,buff)'。 'takecommand'包含一個* magic *'10';如果你必須改變命令的大小,你將不得不在很多地方修復它。而strncpy或memcpy已經做好了。 (只有第一視線分析...) –