Android平臺下虛擬多串口并發(fā)通信的研究_第1頁
Android平臺下虛擬多串口并發(fā)通信的研究_第2頁
Android平臺下虛擬多串口并發(fā)通信的研究_第3頁
Android平臺下虛擬多串口并發(fā)通信的研究_第4頁
Android平臺下虛擬多串口并發(fā)通信的研究_第5頁
已閱讀5頁,還剩4頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、 Android平臺下虛擬多串口并發(fā)通信的研究 冉德綱 孫斌 楊建 申興發(fā) 周紅春摘 要: 目前Android系統(tǒng)只提供單串口通信,在多串口并發(fā)通信方面缺乏基礎(chǔ)功能。文章提出虛擬串口方案以解決多串口并發(fā)通信問題,將原有唯一串口通過軟件接口方式虛擬出多個串口為應(yīng)用程序提供服務(wù)。系統(tǒng)主要由Android源碼框架層串口數(shù)據(jù)流分發(fā)軟件和STM32微處理器單串口物理擴展外部電路兩部分組成。實驗結(jié)果表明,在多串口并發(fā)通信時,該系統(tǒng)能夠提供高效、穩(wěn)定、可靠的串口數(shù)據(jù)傳輸。Key: Android系統(tǒng); 串口; 并發(fā); STM32; 事件驅(qū)動模型:TP368.2 文獻標志碼:A :1006-8228(2019

2、)05-37-04Abstract: At present, the Android system only provides a single serial port communication, and lacks basic functions in multiple serial port concurrent communication. This paper proposes a virtual serial port solution to solve the problem of multiple serial port concurrent communication, an

3、d the original unique serial port is virtualized as multiple serial ports by the software interface method to provide services for the application. The system is mainly composed of the serial data stream distribution software in Android source code framework layer and the physical expansion external

4、 circuit for STM32 microprocessor single serial port. The experiment results show that the system can provide efficient, stable and reliable serial port data transmission in multiple serial port communication.Key words: Android system; serial port; concurrent; STM32; event driven model0 引言隨著物聯(lián)網(wǎng)技術(shù)和An

5、droid系統(tǒng)的不斷發(fā)展,越來越多的智能設(shè)備所運行的操作系統(tǒng)被Android系統(tǒng)取代。智能設(shè)備功能不斷增加,對通訊接口的需求也越來越多,其中包含以太網(wǎng)、CAN總線、串口、SPI、I2C等,因串行接口協(xié)議簡單、兼容工業(yè)儀表和設(shè)備多、成本低、占用系統(tǒng)資源較少等特點在實際中被廣泛應(yīng)用。現(xiàn)有的Android系統(tǒng)沒有串口通信相關(guān)的接口,有關(guān)串口通信的實現(xiàn)大都是基于Google公司提供的串口開放源碼來實現(xiàn)的,或者使用JNI技術(shù)封裝的底層接口庫實現(xiàn)。這些方案雖然能夠滿足串口端到端的通信,但無法滿足當(dāng)多個智能設(shè)備同時通過串口與Android系統(tǒng)控制器通信的場景。目前多采用專用串口擴展芯片1或多串口卡2來解決多

6、串口并發(fā)通信問題。一般專用串口擴展芯片都需要在系統(tǒng)層實現(xiàn)專用的驅(qū)動程序,在Android系統(tǒng)中添加芯片的驅(qū)動程序比較復(fù)雜,并且芯片驅(qū)動調(diào)試需要占用大量的時間。多串口卡一般由微控制器和串口擴展芯片組成,價格貴。綜上,為解決Android平臺多串口通訊問題,本文提出虛擬串口軟件方案來滿足一對多串口通信場景的需求。該方案主要由串口數(shù)據(jù)流分發(fā)軟件和STM32微處理器簡單串口擴展電路兩部分組成。1 系統(tǒng)結(jié)構(gòu)系統(tǒng)采用模塊化設(shè)計,保證各模塊之間邏輯相對獨立方便后續(xù)的改進,主要由Android系統(tǒng)端和STM32微處理器端兩大部分組成。系統(tǒng)框架如圖1所示。Android系統(tǒng)端主要由虛擬多串口數(shù)據(jù)流分發(fā)軟件和JN

7、I接口抽象封裝兩部分組成。虛擬多串口數(shù)據(jù)流分發(fā)軟件主要功能為:監(jiān)聽Android系統(tǒng)ttyHSL1串口與應(yīng)用層軟件是否有數(shù)據(jù)發(fā)送和完成數(shù)據(jù)的封包、解包和轉(zhuǎn)發(fā)。JNI接口3抽象封裝主要是通過JNI技術(shù)產(chǎn)生與Java接口對應(yīng)的C/C+本地接口,這樣不同應(yīng)用程序可通過Java封裝的API來使用虛擬串口提供的服務(wù)。STM32微處理器端的主要功能為串口數(shù)據(jù)采集與轉(zhuǎn)發(fā)。應(yīng)用層軟件可通過API配置各個串口的工作參數(shù),如波特率、奇偶校驗位、數(shù)據(jù)位和停止位等,使其與外接串口設(shè)備工作參數(shù)一致。2 Android端系統(tǒng)軟件為滿足多串口并發(fā)數(shù)據(jù)傳輸實時性要求,系統(tǒng)采用多線程Reactor事件處理模型4-5來組織虛擬多

8、串口數(shù)據(jù)流分發(fā)軟件。系統(tǒng)啟動時創(chuàng)建固定數(shù)目的線程,避免系統(tǒng)運行過程中頻繁的創(chuàng)建與銷毀線程,從而減少進程調(diào)度所消耗的資源,提高系統(tǒng)的處理能力。2.1 數(shù)據(jù)流分發(fā)軟件框架基于Reactor事件處理模型6搭建虛擬串口服務(wù)框架實現(xiàn)高效的數(shù)據(jù)分發(fā)。為降低軟件端數(shù)據(jù)流分發(fā)處理邏輯的復(fù)雜度,系統(tǒng)采用命名管道7進程間通信方式作為數(shù)據(jù)流轉(zhuǎn)發(fā)的通道,由于管道是半雙工通訊方式,數(shù)據(jù)只能從一端到達另一端,因此為實現(xiàn)全雙工通信,需要創(chuàng)建兩個管道,分別命名為讀管道與寫管道。如圖2所示,系統(tǒng)中外接有4個串口再加上配置管道,因此總共需要創(chuàng)建10個管道來實現(xiàn)數(shù)據(jù)的轉(zhuǎn)發(fā)。圖2所示,系統(tǒng)啟動時創(chuàng)建兩個線程,其中一個線程監(jiān)聽系統(tǒng)tt

9、yHSL1串口句柄上的事件,另一個線程監(jiān)聽已創(chuàng)建5個讀管道句柄上的事件。2.2 先來先服務(wù)調(diào)度算法虛擬多串口數(shù)據(jù)流分發(fā)軟件采用先來先服務(wù)FCFS調(diào)度算法9完成多串口數(shù)據(jù)的轉(zhuǎn)發(fā)任務(wù)。算法主要思想是依照作業(yè)到達的先后次序組成一個就緒隊列,調(diào)度器首先選擇隊頭的任務(wù)并為其分配處理機,直到任務(wù)運行結(jié)束或發(fā)生中斷被阻塞,處理器會重新調(diào)度其他任務(wù)。調(diào)度算法如表1所示。2.3 數(shù)據(jù)封裝協(xié)議為保證數(shù)據(jù)傳輸?shù)目煽啃裕覀兌x了數(shù)據(jù)封包解包私有協(xié)議。協(xié)議由包起始標記、功能碼、包體長度、包體、CRC校驗碼和包結(jié)束標記組成。其中包起始和結(jié)束標記為固定值,分別為48484A4A和4A4A4848,應(yīng)用程序通過查找起始和結(jié)

10、束標記來確定整個數(shù)據(jù)包。功能碼(FN)表示數(shù)據(jù)包功能,如FN為1表示APP設(shè)置串口配置參數(shù);FN為2表示APP獲取串口配置信息;FN為3表示APP向設(shè)備發(fā)送數(shù)據(jù);FN為4表示設(shè)備向APP發(fā)送數(shù)據(jù)。CRC校驗碼是使用CRC校驗算法8計算的數(shù)據(jù)包CRC值,以此保證每個數(shù)據(jù)的正確性與完整性。3 STM32微處理器端系統(tǒng)采用基于ARM Cortex?-M3內(nèi)核的STM32F101RC這款芯片實現(xiàn)串口物理擴展,將原有的1個串口擴展為4個串口,使Android系統(tǒng)應(yīng)用程序能夠同時與4個串口設(shè)備并發(fā)通信。STM32F101RC該型號微處理器屬于STM32增強型系列,具有外設(shè)豐富、價格低廉、性價比高等優(yōu)點。在

11、串口外設(shè)資源方面可提供5路串口,其中3個為通用同步/異步接收器發(fā)送器,另外2個為通用異步接收器發(fā)送器。3.1 雙緩沖區(qū)設(shè)計系統(tǒng)采用雙緩沖區(qū)設(shè)計思想9存儲串口接收到的數(shù)據(jù),具體工作流程為:首先將接收到的數(shù)據(jù)先放入第一個緩沖區(qū)中直到緩沖區(qū)滿或者處理器要發(fā)送此串口中的數(shù)據(jù),然后切換緩沖區(qū),將接收到的數(shù)據(jù)放入第二個緩沖區(qū),此時處理器可以處理第一個緩沖區(qū)中的數(shù)據(jù)。當(dāng)?shù)诙€緩沖區(qū)存滿數(shù)據(jù)或下次調(diào)度到來時,調(diào)整緩沖區(qū)指針,將接收到的數(shù)據(jù)放入第一個緩沖區(qū),此時處理器處理第二緩沖區(qū)中的數(shù)據(jù)。重復(fù)使用兩個緩沖區(qū)來接收數(shù)據(jù)和處理數(shù)據(jù),具體緩沖區(qū)配置情況如圖3所示。3.2 最小剩余空間優(yōu)先MRSF調(diào)度算法在STM32

12、微處理器端,我們提出最小剩余空間優(yōu)先MRSF(Minimum Remaining Space First)調(diào)度算法來調(diào)度4個外接串口。最小剩余空間優(yōu)先MRSF調(diào)度算法主要思想是根據(jù)每個串口緩沖區(qū)剩余空間大小和等待發(fā)送時間來確定該串口的優(yōu)先級,緩沖區(qū)剩余空間越小,等待時間就越長,其被分配的優(yōu)先級越高,反之優(yōu)先級越低。處理器在調(diào)度前,先計算每個串口的優(yōu)先級,優(yōu)先調(diào)度是為優(yōu)先級最高的串口分配處理器,該任務(wù)一旦得到處理器,就一直運行直到任務(wù)結(jié)束。每個串口整體優(yōu)先級計算公式如下:其中,Ps代表根據(jù)緩沖區(qū)剩余空間因素計算得到的優(yōu)先級,Pt代表根據(jù)時間因素計算得到的優(yōu)先級,而Pl代表最終的優(yōu)先級,它是兩種優(yōu)

13、先級的數(shù)值求和。算法偽代碼如表2所示。4 實驗測試為測試本文提出的多串口并發(fā)通信方案的正確性、高效性和穩(wěn)定性,我們開發(fā)了一個Android串口應(yīng)用APP,用于數(shù)據(jù)的接收和轉(zhuǎn)發(fā)。筆記本電腦(Lenovo Y470)充當(dāng)傳感器設(shè)備通過串口與APP進行串口通信,數(shù)據(jù)收發(fā)采用回環(huán)測試方案,即APP收到數(shù)據(jù)后原樣返回。電腦端打開多個串口調(diào)試軟件來模擬多臺串口設(shè)備,串口配置參數(shù)為波特率115200、無校驗、數(shù)據(jù)位8位、停止位1位,每次發(fā)送固定大小32字節(jié)的數(shù)據(jù),實驗環(huán)境如圖4所示。實驗結(jié)果顯示,在3個串口分別以200、300、400毫秒周期速率并發(fā)傳輸場景下,該系統(tǒng)同樣能穩(wěn)定的傳輸數(shù)據(jù)。5 結(jié)束語本文主要

14、介紹了一種在Android平臺下實現(xiàn)多串口并發(fā)通信的方案,通過在Android源碼框架端添加虛擬串口數(shù)據(jù)流分發(fā)軟件結(jié)合STM32微處理器簡單多串口物理擴展電路實現(xiàn)多串口并發(fā)通信。實驗結(jié)果表明該系統(tǒng)在穩(wěn)定性、傳輸效率、誤碼率等方面都有很好的表現(xiàn)。在智能售獲機、自助取件柜等產(chǎn)品中具有很好的應(yīng)用前景?,F(xiàn)階段微處理器端采用前后臺系統(tǒng)(超循環(huán)系統(tǒng))模式來組織應(yīng)用程序,系統(tǒng)整體不夠健壯。未來將通過移植uC/OS-II實時操作系統(tǒng)10來管理和調(diào)度各個任務(wù),以此來提高系統(tǒng)的實時性和整體穩(wěn)定性。Reference(References):1 張達,郭銀博,趙廣宇,胥勛偉.基于WK2168的氣象采集站多串口采集方

15、案的設(shè)計與實現(xiàn)J.電腦知識與技術(shù),2018.14(19):284-2862 周敏.多串口卡在民航通信系統(tǒng)的綜合應(yīng)用J.科技與創(chuàng)新,2014.20:143-1433 羅尹奇,劉力銀.基于JNI的Java串口通信系統(tǒng)的設(shè)計與實現(xiàn)以Windows平臺為例J.電腦知識與技術(shù),2017.13(34):51-564 Schmidt D C. Reactor: an object behavioral pattern forconcurrent event demultiplexing and event handler dispatchingM Pattern languages of program design. ACM Press Addison-Wesley Publishing Co.,19955 陳碩.Linux多線程服務(wù)端編程:使用muduo C+網(wǎng)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論