嵌入式系統(tǒng)與移動設(shè)備間探討

時間:2022-10-20 09:43:03

導(dǎo)語:嵌入式系統(tǒng)與移動設(shè)備間探討一文來源于網(wǎng)友上傳,不代表本站觀點,若需要原創(chuàng)文章可咨詢客服老師,歡迎參考。

嵌入式系統(tǒng)與移動設(shè)備間探討

1基于Socket的嵌入式廣播服務(wù)系統(tǒng)軟件體系

本廣播服務(wù)系統(tǒng)軟件體系分為嵌入式服務(wù)器端與移動客戶端。其中,嵌入式服務(wù)器端與通用計算機(jī)軟件體系類似,分為硬件層、驅(qū)動層、操作系統(tǒng)層、中間層及應(yīng)用層。硬件層匯集了網(wǎng)卡芯片,一般情況下自適應(yīng)10/100M網(wǎng)絡(luò),并含有網(wǎng)絡(luò)接口連接頭;驅(qū)動層為操作系統(tǒng)層和應(yīng)用層提供硬件驅(qū)動或底層核心支持,對于網(wǎng)絡(luò)通信來說需要加載與網(wǎng)卡芯片相適應(yīng)的網(wǎng)絡(luò)驅(qū)動;操作系統(tǒng)層負(fù)責(zé)嵌入式系統(tǒng)的全部軟硬件資源的分配、調(diào)度工作控制、協(xié)調(diào)并發(fā)活動,使得編寫應(yīng)用程序更加快速、高效、穩(wěn)定;中間層用于支持應(yīng)用軟件開發(fā)的軟件,如與網(wǎng)絡(luò)有關(guān)的測試軟件等。本系統(tǒng)開發(fā)的Socket服務(wù)器程序處于特定應(yīng)用領(lǐng)域的應(yīng)用層,此層的產(chǎn)品要求功耗低、專用高效。移動客戶端軟件主要由App構(gòu)成,它可通過TCP方式下的Socket與嵌入式服務(wù)器端進(jìn)行通信。

2嵌入式系統(tǒng)Socket服務(wù)器廣播功能核心技術(shù)

2.1TCPC/S方式下Socket通信基本流程流式

Socket提供可靠的、面向連接的通信流,它使用TCP協(xié)議,保證了數(shù)據(jù)傳輸?shù)恼_性和順序性。從Socket程序執(zhí)行的流程上看,服務(wù)器先行啟動,通過調(diào)用socket()建立一個Socket,然后調(diào)用bind()綁定本地網(wǎng)絡(luò)地址與端口,再調(diào)用listen()創(chuàng)建Socket監(jiān)聽隊列并開始監(jiān)聽,之后調(diào)用accept()來接收客戶端的連接請求,此時服務(wù)器程序會阻塞等待在這里,直到TCP客戶端主動調(diào)用connect()進(jìn)行三次握手建立連接。客戶端通過socket()建立Socket后,調(diào)用connect()與服務(wù)器建立連接。連接后客戶端的write()函數(shù)向服務(wù)器發(fā)送數(shù)據(jù),服務(wù)器端通過read()來讀取數(shù)據(jù),服務(wù)器向客戶端發(fā)送數(shù)據(jù)仍然遵循這樣的方式。最后服務(wù)器與客戶端均可通過close()主動關(guān)閉彼此間的連接。圖2展示了TCPC/S方式下的Socket程序設(shè)計流程。

2.2Socket通信信息結(jié)構(gòu)

Socket服務(wù)器程序在網(wǎng)絡(luò)中是通過IP地址和端口號來標(biāo)識自身的唯一性的,IP地址指明了Socket服務(wù)器程序所在的網(wǎng)絡(luò)主機(jī),端口號指明了網(wǎng)絡(luò)主機(jī)上的服務(wù)程序,需要兩個結(jié)構(gòu)體類型(sockaddr_in和sockaddr)用來保存Socket信息[3]。

2.3Socket服務(wù)器轉(zhuǎn)發(fā)信息實現(xiàn)廣播服務(wù)的核心問題解決

由于每個移動客戶端均要與Socket服務(wù)器建立連接并做互不干擾的通信,Socket服務(wù)器程序有必要將與客戶端的連接功能和通信功能分開,保證服務(wù)器程序與某一客戶端程序通信時,其他客戶端也能與服務(wù)器程序建立連接,反之亦然。因而,程序在連接與通信這兩種任務(wù)之間來回切換,并發(fā)執(zhí)行,這就需要采用多線程技術(shù)。多線程對數(shù)據(jù)是共享的,也就是每個線程都能夠從同一個共享數(shù)據(jù)池獲取數(shù)據(jù)[5],這也是本程序沒有采用多進(jìn)程技術(shù)的原因,在多進(jìn)程設(shè)計中,數(shù)據(jù)共享復(fù)雜,需要使用IPC;對于多線程設(shè)計,數(shù)據(jù)共享簡單[6]。2.4Socket服務(wù)器程序的編譯與運行服務(wù)器端Socket程序是在Xubuntu系統(tǒng)下Code::Blocks開發(fā)環(huán)境完成的,它需要綁定armlinuxgcc交叉編譯器,采用LinuxC++語言編寫,編譯后的程序可通過串口通信方式移植到嵌入式開發(fā)板(如Friendlymini2440)上運行。在Xubuntu上的控制終端書寫指令程序,運行狀況如圖3所示。

3移動設(shè)備TCP客戶端程序的實現(xiàn)

Android或蘋果系統(tǒng)手機(jī)及平板電腦可以作為Socket客戶端的移動設(shè)備,由于嵌入式服務(wù)系統(tǒng)中使用了C語言構(gòu)建Socket服務(wù)程序,客戶端程序使用XE10(C++Build-er)中的FireMonkey框架開發(fā)跨平臺的應(yīng)用程序[7]適應(yīng)性較強(qiáng),更關(guān)鍵的是其提供的TIdTCPClient組件完全支持Socket阻塞式工作模式,可以簡單快速地實現(xiàn)Socket客戶端網(wǎng)絡(luò)通信功能。

3.1TIdTCPClient組件常用屬性與方法

XE10開發(fā)軟件多以組件為基礎(chǔ),為開發(fā)人員提供了高效開發(fā)的快捷元素。移動客戶端程序涉及的Socket通信組件TIdTCPClient常用屬性與方法如表1所列。

3.2移動客戶端向服務(wù)器發(fā)送數(shù)據(jù)

客戶端程序可視化界面由文本框Edit1、多行文本框Memo1以及按鈕Button1、Button2組成。Edit1用于書寫向服務(wù)器發(fā)送的信息;Memo1主要用于顯示服務(wù)器轉(zhuǎn)發(fā)給客戶端的信息,此外也顯示客戶端的異常信息;Button1用于啟動發(fā)送信息功能,Button2用于發(fā)送關(guān)閉連接功能。

3.3運用多線程技術(shù)接收服務(wù)器數(shù)據(jù)

當(dāng)移動客戶端向嵌入式系統(tǒng)服務(wù)器發(fā)送信息后,服務(wù)器會將信息轉(zhuǎn)發(fā)給已經(jīng)與該服務(wù)器建立連接的各個移動客戶端,客戶端在接收信息后需實時顯示到Memo1多行文本框中,而且還要保障發(fā)送按鈕Button1能夠正常發(fā)送數(shù)據(jù),所以接收數(shù)據(jù)需要多線程技術(shù)的支撐,也就是將接收數(shù)據(jù)的功能從發(fā)送數(shù)據(jù)的主線程中獨立出來。C++BuilderXE10在開發(fā)移動程序時啟用了嶄新的多線程技術(shù),TThread類中的靜態(tài)方法CreateAnonymousThread可用于創(chuàng)建匿名線程對象[7]。其參數(shù)是線程中被執(zhí)行的方法,該方法同屬于主窗體類,無需建立額外的線程類實現(xiàn)其功能。

4結(jié)語

隨著硬件系統(tǒng)的不斷發(fā)展以及物聯(lián)網(wǎng)技術(shù)的不斷成熟,嵌入式軟件得到了廣泛的應(yīng)用[8]。本文闡述了嵌入式系統(tǒng)下Socket廣播服務(wù)的原理結(jié)構(gòu)、核心技術(shù)及實現(xiàn)方法,采用一個移動客戶端對應(yīng)服務(wù)器程序開辟的一個通信子線程的方式,解決了多個移動客戶端與Socket服務(wù)器程序連接與通信相互干擾的問題,成功進(jìn)行了廣播服務(wù)通信,并且極大地簡化了網(wǎng)絡(luò)通信程序的開發(fā)過程。

作者:王雙立 王楷鑫 王雁鵬 魏強(qiáng) 單位:北華大學(xué)山西傳媒學(xué)院