嵌入式系統與移動設備間探討
時間:2022-10-20 09:43:03
導語:嵌入式系統與移動設備間探討一文來源于網友上傳,不代表本站觀點,若需要原創文章可咨詢客服老師,歡迎參考。
1基于Socket的嵌入式廣播服務系統軟件體系
本廣播服務系統軟件體系分為嵌入式服務器端與移動客戶端。其中,嵌入式服務器端與通用計算機軟件體系類似,分為硬件層、驅動層、操作系統層、中間層及應用層。硬件層匯集了網卡芯片,一般情況下自適應10/100M網絡,并含有網絡接口連接頭;驅動層為操作系統層和應用層提供硬件驅動或底層核心支持,對于網絡通信來說需要加載與網卡芯片相適應的網絡驅動;操作系統層負責嵌入式系統的全部軟硬件資源的分配、調度工作控制、協調并發活動,使得編寫應用程序更加快速、高效、穩定;中間層用于支持應用軟件開發的軟件,如與網絡有關的測試軟件等。本系統開發的Socket服務器程序處于特定應用領域的應用層,此層的產品要求功耗低、專用高效。移動客戶端軟件主要由App構成,它可通過TCP方式下的Socket與嵌入式服務器端進行通信。
2嵌入式系統Socket服務器廣播功能核心技術
2.1TCPC/S方式下Socket通信基本流程流式
Socket提供可靠的、面向連接的通信流,它使用TCP協議,保證了數據傳輸的正確性和順序性。從Socket程序執行的流程上看,服務器先行啟動,通過調用socket()建立一個Socket,然后調用bind()綁定本地網絡地址與端口,再調用listen()創建Socket監聽隊列并開始監聽,之后調用accept()來接收客戶端的連接請求,此時服務器程序會阻塞等待在這里,直到TCP客戶端主動調用connect()進行三次握手建立連接。客戶端通過socket()建立Socket后,調用connect()與服務器建立連接。連接后客戶端的write()函數向服務器發送數據,服務器端通過read()來讀取數據,服務器向客戶端發送數據仍然遵循這樣的方式。最后服務器與客戶端均可通過close()主動關閉彼此間的連接。圖2展示了TCPC/S方式下的Socket程序設計流程。
2.2Socket通信信息結構
Socket服務器程序在網絡中是通過IP地址和端口號來標識自身的唯一性的,IP地址指明了Socket服務器程序所在的網絡主機,端口號指明了網絡主機上的服務程序,需要兩個結構體類型(sockaddr_in和sockaddr)用來保存Socket信息[3]。
2.3Socket服務器轉發信息實現廣播服務的核心問題解決
由于每個移動客戶端均要與Socket服務器建立連接并做互不干擾的通信,Socket服務器程序有必要將與客戶端的連接功能和通信功能分開,保證服務器程序與某一客戶端程序通信時,其他客戶端也能與服務器程序建立連接,反之亦然。因而,程序在連接與通信這兩種任務之間來回切換,并發執行,這就需要采用多線程技術。多線程對數據是共享的,也就是每個線程都能夠從同一個共享數據池獲取數據[5],這也是本程序沒有采用多進程技術的原因,在多進程設計中,數據共享復雜,需要使用IPC;對于多線程設計,數據共享簡單[6]。2.4Socket服務器程序的編譯與運行服務器端Socket程序是在Xubuntu系統下Code::Blocks開發環境完成的,它需要綁定armlinuxgcc交叉編譯器,采用LinuxC++語言編寫,編譯后的程序可通過串口通信方式移植到嵌入式開發板(如Friendlymini2440)上運行。在Xubuntu上的控制終端書寫指令程序,運行狀況如圖3所示。
3移動設備TCP客戶端程序的實現
Android或蘋果系統手機及平板電腦可以作為Socket客戶端的移動設備,由于嵌入式服務系統中使用了C語言構建Socket服務程序,客戶端程序使用XE10(C++Build-er)中的FireMonkey框架開發跨平臺的應用程序[7]適應性較強,更關鍵的是其提供的TIdTCPClient組件完全支持Socket阻塞式工作模式,可以簡單快速地實現Socket客戶端網絡通信功能。
3.1TIdTCPClient組件常用屬性與方法
XE10開發軟件多以組件為基礎,為開發人員提供了高效開發的快捷元素。移動客戶端程序涉及的Socket通信組件TIdTCPClient常用屬性與方法如表1所列。
3.2移動客戶端向服務器發送數據
客戶端程序可視化界面由文本框Edit1、多行文本框Memo1以及按鈕Button1、Button2組成。Edit1用于書寫向服務器發送的信息;Memo1主要用于顯示服務器轉發給客戶端的信息,此外也顯示客戶端的異常信息;Button1用于啟動發送信息功能,Button2用于發送關閉連接功能。
3.3運用多線程技術接收服務器數據
當移動客戶端向嵌入式系統服務器發送信息后,服務器會將信息轉發給已經與該服務器建立連接的各個移動客戶端,客戶端在接收信息后需實時顯示到Memo1多行文本框中,而且還要保障發送按鈕Button1能夠正常發送數據,所以接收數據需要多線程技術的支撐,也就是將接收數據的功能從發送數據的主線程中獨立出來。C++BuilderXE10在開發移動程序時啟用了嶄新的多線程技術,TThread類中的靜態方法CreateAnonymousThread可用于創建匿名線程對象[7]。其參數是線程中被執行的方法,該方法同屬于主窗體類,無需建立額外的線程類實現其功能。
4結語
隨著硬件系統的不斷發展以及物聯網技術的不斷成熟,嵌入式軟件得到了廣泛的應用[8]。本文闡述了嵌入式系統下Socket廣播服務的原理結構、核心技術及實現方法,采用一個移動客戶端對應服務器程序開辟的一個通信子線程的方式,解決了多個移動客戶端與Socket服務器程序連接與通信相互干擾的問題,成功進行了廣播服務通信,并且極大地簡化了網絡通信程序的開發過程。
作者:王雙立 王楷鑫 王雁鵬 魏強 單位:北華大學山西傳媒學院
- 上一篇:嵌入式系統多級冗余機制設計研究
- 下一篇:嵌入式系統BootLoader設計分析