c++串列埠上位機協議包封裝
阿新 • • 發佈:2019-02-14
上一篇說到串列埠協議的封包與拆包,主要要是應用於微控制器與微控制器通訊,或者與上位機程式通訊,這裡我是與上位機程式通訊。
思路:
因為此功能是用c語言寫的,所有在微控制器上可以使用,在pc機上也是可以使用的。
這是微控制器主函式程式碼:
int main(void) { delay_init(); //延時函式初始化 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);// 設定中斷優先順序分組2 uart_init(115200); //串列埠初始化為9600 LED_Init(); //初始化與LED連線的硬體介面 wifi_buff_init(); printf("ok ing...\r\n"); while(1) { analyze_queue(); //處理資料 set_tx_data("hello",5); //傳送hello過去,這裡面是對此資料封過包的 delay_ms(100); } }
這裡是上位機程式程式碼邏輯,程式碼涉及過多,都是以前寫過的類,這裡就不重複貼了。
首先呼叫初始化函式wifi_buff_init();
用一個執行緒去讀取串列埠資料,呼叫add_message_queue(ch);函式把資料加入佇列。
//接收資料 DWORD WINAPI Thread_fun1(LPVOID pM) { char ch; while(1) { COM.Read_Byte(ch); //從串列埠讀取資料,此功能是以前封裝的 TRAN.add_message_queue(ch); //把資料加入到佇列,只是把wifi_data_tran.c檔案改成wifi_data_tran.cpp } }
另一個執行緒負責解析資料,呼叫analyze_queue();解析資料
//處理資料
DWORD WINAPI Thread_fun2(LPVOID pM)
{
while(1)
{
TRAN.analyze_queue();
}
}
因為時間問題,上位機就沒有做成MFC了,這裡用控制檯代替
看看資料解析效果
recv:0:48 45 53 5a 4a 7 0 0 5 0 0 0 68 65 6c 6c 6f
這一段資料就是解析出來的包,包有任何錯誤不都會解析出來的,從程式列印來看,驗證了4個包頭,長度,資料長度,校驗。