at命令的應用場合很多,也是應用最為通用的命令。而at命令並不像通訊協議特定的資料幀格式,解析at命令需要匹配每個字元。at命令一般有三種狀態:查詢、執行、設定,根據這三種狀態,本文將使用一種簡易的方法解析at命令。
巨集定義at命令的三種狀態:
#define query_cmd 0x01 /* 查詢命令 */
#define execute_cmd 0x02 /* 執行命令 */
#define set_cmd 0x03 /* 設定命令 */
定義命令結構體,列出需要的at命令,以及處理的指標函式。
tyepdef struct at_cmd_t;
int deal_uart_func(int argc, char *ar**);
at_cmd_t at_table = ,
};#define at_table_size (sizeof(at_table) / sizeof(at_cmd_t))
對於at命令中的多個引數進行字串引數拆分處理,比如at+uart=9600,0,8,1 ,最後拆分為9600、0、8、1字串存入ar**中。
/*
* @brief 字串拆分解析處理
* @return 檢測歸類的引數個數
**/int string_split(char *strp, uint32_t strsize, char ch, char *ar**, uint32_t argcm )
#endif
splitflag = 1;
} else if (splitflag == 1) else }
return argc_index;
}
將接收到at命令跟列表中的at指令進行匹對解析,歸類劃分為查詢型別、執行型別、設定型別。
查詢型別:命令字尾為『?』+『\r』+』\n』,例如:at+uart?\r\n.
執行型別:命令字尾只為』\r』+』\n』,例如:at+uart\r\n.
設定型別:命令『=』後有多個引數,並以』\r』+』\n』結尾,例如:at+uart=9600,0,8,1\r\n
#define respond_error() printf("error\r\n")
#define respond_ok() printf("ok\r\n");
int at_cmd_parse(uint8_t *pdata, uint16_t size)
; if (strstr((const char *)pdata, "at") == null) goto at_end;
for (index = 0; index < at_table_size; index++)
} if (index >= at_table_size) goto at_end;
/* 解析查詢命令 */
if ((ptr[0] == '?') && (ptr[1] == '\r') && (ptr[2] == '\n'))
} else if ((ptr[0] == '\r') && (ptr[1] == '\n'))
} else if (ptr[0] == '=')
} else
at_end:
if (-1 == ret) respond_error();
else respond_ok();
return ret;
}
在應用層定義乙個接收at命令的緩衝區,接收處理每乙個位元組資料,當出現』\r』+』\n』,則為一條at命令,並設定超時處理,設定時間內沒接收到下乙個位元組則超時重新接收。
#define at_rx_timeout 200 /* ms */
#define at_rx_buf_size 512 /* bytes */
static uint8_t cmdbuf[at_rx_buf_size];
int at_cmd_recv(uint8_t data)
tick = hal_gettick();
cmdbuf[index++] = data;
if ((data == '\n') && flag) else if (data == '\r') else
return ret;
}void at_task(void)
}
簡易csv解析
遊戲開發中少不了配置資料,csv格式既方便匯出又方便使用,下面是簡單csv解析 字段資料中不能含有分隔符 以後會繼續完善,嘿嘿。ccsvparse.hpp cppalgorithm created by xujw on 16 2 26.ifndef ccsvparse h define ccsvpa...
簡易Linux命令
ctrl shift v 複製 跨平台 grep 查詢檔案 grep options pattern file pattern 是查詢條件 可以是普通字串 可以是正規表示式,通常用單引號將re括起來。file 是要查詢的檔案,可以是用空格間隔的多個檔案,也可是使用shell的萬用字元在多個檔案中查詢...
Git簡易命令歸納
a 意為 所有的變更都add 另外還有 表示add新增 變更 u 表示僅add刪除log指變更內容,須寫 不然提交失敗add是為把它加到緩衝區,ci是為提交到本分支。ps 必須站在本分支上操作 一旦遠端主機的版本庫有了更新,需要將這些更新取回本地case 1 期間若出現conflict,解決之,再g...