AT指令概述
AT指令是應用於終端設備與PC應用之間的連接與通信的指令。AT 即Attention。每個AT命令行中只能包含一條AT指令;對於AT指令的發送,除AT兩個字符外,最多可以接收1056個字符的長度。
AT指令的格式
命令格式如下所示:
AT[+CMD][=KEY]
CMD:命令;
KEY:參數的值,如果是?表示請求該參數的值,此處可有多個參數組成;
用到的API函數簡介
char *strtok(char s[], const char *delim);
分解字符串為一組字符串。s為要分解的字符,delim為分隔符字符(如果傳入字符串,則傳入的字符串中每個字符均為分割符)。首次調用時,s指向要分解的字符串,之后再次調用要把s設成NULL。
int atoi(const char *nptr);
atoi (表示 ascii to integer)是把字符串轉換成整型數的一個函數,應用在計算機程序和辦公軟件中。int atoi(const char *nptr) 函數會掃描參數 nptr字符串,跳過前面的空白字符(例如空格,tab縮進)等,可以通過isspace( )函數來檢測),直到遇上數字或正負符號才開始做轉換,而在遇到非數字或字符串結束符('\0')才結束轉換,並將結果返回。如果 nptr不能轉換成 int 或者 nptr為空字符串,那么將返回 0。特別注意,該函數要求被轉換的字符串是按十進制數理解的。
AT指令框架設計思路
好的代碼應該具有良好的封裝和可讀性,AT指令解釋器的設計主要通過二級鏈表針對AT指令的特征對指令進行分類,提高指令索引效率,通過回調函數實現代碼的良好封裝。其中一級數據結構如下所示:
typedef struct MemShell_t {//指令成員
char *Map;//指令保存區域
uint16_t MapLength;//Map的長度
uint8_t begin;//指令的首地址
uint8_t end;//指令的結束地址
void(*CallBack)(char *,uint16_t);//回調函數
struct MemShell_t *Next;//下一個節點
}MemShell_t, *MemShell_pt;