基于ARM7的串口服務器的實現
接收主線除初始化以太網外, 需調用鏈路層初始化函數(3) , ( 3)中調用( 4)初始化RTL8019。
收到的數據先經過函數(8) , 然后通過信號量傳送到函數(6) , 由( 6)調用( 7)得到數據個數, 最后由(5)根據以太網幀頭攜帶的上層協議類型判斷是交給IP協議還是ARP協議處理。
移植完畢, 進行數據收發實驗驗證。使用TCP傳輸協議, 由網口虛擬串口軟件VSPM通過串口調試工具收發數據, 圖4是以10 ms的發送速度在自發自收程序中收發數據的截圖。

圖4 TCP協議數據傳輸界面
由于COM1和COM2被PC機占用, 故由網口虛擬出來的串口是COM3, 由圖4可看出在面向連接的TCP協議下, 高速收發數據不會丟包。
2.2 實時多任務方案的設計
16個串口分別與網絡端口組成16 個雙向通道。為使代碼靈活、透明, 程序不使用LW IP提供的SOCKET AP I。應用程序把每個雙向通道分為發送, 接收, 串口3個任務, 加上LW IP本身需占用一個任務, 共需建立49個任務。μC /OS - Ⅱ最多能建立64 個任務, 其中8 個操作系統本身占用,剩56個能滿足要求。由VSPM軟件把網口模擬成16個串口, 串口服務器偵聽的16 個端口分別是1 000~1 015, 如圖5所示。

圖5 網口虛擬擴展16個串口界面
網絡端和串口端的數據接收會觸發相應的中斷。每個雙向通道的3個任務各司其職, 網口端接收數據中斷后在傳輸層協議判斷信源的端口號,交給相應的接收任務, 處理完后交給串口任務把數據從相應串口發送; 串口接收數據后在中斷程序中判斷信源的通道號, 把數據交給串口任務,處理完后由發送任務通過網口把數據發送出去。
服務器支持TCP /UDP兩種傳輸協議, 下面給出一個通道的TCP傳輸流程圖, UDP部分代碼只需在相應任務中調用LW IP給的UDP函數。TCP模式下串口服務器工作在Server模式, PC機工作在Client模式, 流程圖, 如圖6所示。

圖6串口服務器單通道程序流程圖
3.結論
文中本服務器是以性能不及ARM9且不能使用L inux的ARM7為主控芯片, 但兩種開源代碼μC /OS - Ⅱ實時操作系統和LW IP協議棧的有效結合避免了高額的軟件費用, 而且能滿足通信要求。實驗證明, 基于LW IP和μC /OS - Ⅱ的串口服務器不僅能實現雙向通信,而且傳輸數據實時、準確, 符合工業應用的要求。
評論