C/S模型在WinCE串口編程中的應用
引言
與傳統的Windows串口編程技術相比較,WinCE串口編程中不具備串口復用的功能,這給在WinCE系統中實現對串口的復雜操作增加了技術難度。本文介紹一種使用在信息平臺軟件中常用的C/S模型技術,模擬串口復用的動作來實現WinCE操作系統串口復用的問題。
本方法實現所使用的函數大部分都是嵌入式開發中最常使用的C/C++函數,所有的函數都具有一定的通用性,稍加改動即可應用到其他嵌入式操作系統中;并且該方法實現的思路對于解決其他嵌入式編程中資源復用的難題具有一定參考價值。
1 軟件結構及工作原理
1.1 軟件結構及特點
為了使WincE操作系統的串口操作支持復用,在本方法中,采用了一種類式信息平臺開發經常使用的C/S結構,利用此結構來模擬實現類似于Windows串口的復用功能,即在數據與串口硬件實際控制之間增加了一個C/S結構的中間層。系統整個結構主要包括控制協議、客戶端程序和服務器端程序三部分。客戶端和服務器端的程序復雜程度與串口操作的復雜程度成正比,在直觀上也與控制協議的復雜程度成正比。軟件結構圖如圖1所示。
1.2 控制協議
控制協議的實現屬于基礎部分,復雜程度與串口的操作復雜程度有關,本文中提到的編程方法只是解決串口的復用部分,即同時對串口發生讀寫時在編程上的實現。因此在本方法中,實現串口復用的控制協議只需要兩部分——串口+數據。串口指的是發生讀寫動作的串口(co m1,com2,…,comn),數據指的是需要用串口通信的數據。
1.3 服務器端程序流程及工作原理
服務器端程序流程圖如圖2所示。
從圖2中可以看出,整個服務器端程序是由兩個線程組成。一個線程用來處理由客戶端發起的發送數據請求,符合控制協議的數據先存入預先定義好的發送緩沖區,同時判斷對應串口的使用情況。當該串口被占用(串口正在處理上一個發送數據請求或者是正在接收數據)時,此次請求將被掛起一直到串口恢復到空閑狀態;串口恢復到空閑狀態后該線程將處理最先掛起的請求,將最先存入發送緩沖區的數據通過串口發走。
同時,服務器端程序還要用一個線程來實時監視該串口,將由該串口接收到的符合控制協議的數據存入預先定義好的接收緩沖區,同時通知數據處理線程。
評論