999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

Android平臺下虛擬多串口并發通信的研究

2019-07-08 03:44:41冉德綱孫斌楊建申興發周紅春
計算機時代 2019年5期

冉德綱 孫斌 楊建 申興發 周紅春

摘? 要: 目前Android系統只提供單串口通信,在多串口并發通信方面缺乏基礎功能。文章提出虛擬串口方案以解決多串口并發通信問題,將原有唯一串口通過軟件接口方式虛擬出多個串口為應用程序提供服務。系統主要由Android源碼框架層串口數據流分發軟件和STM32微處理器單串口物理擴展外部電路兩部分組成。實驗結果表明,在多串口并發通信時,該系統能夠提供高效、穩定、可靠的串口數據傳輸。

關鍵詞: Android系統; 串口; 并發; STM32; 事件驅動模型

中圖分類號:TP368.2? ? ? ? ? 文獻標志碼:A? ? ?文章編號:1006-8228(2019)05-37-04

Abstract: 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, and 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 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 model

0 引言

隨著物聯網技術和Android系統的不斷發展,越來越多的智能設備所運行的操作系統被Android系統取代。智能設備功能不斷增加,對通訊接口的需求也越來越多,其中包含以太網、CAN總線、串口、SPI、I2C等,因串行接口協議簡單、兼容工業儀表和設備多、成本低、占用系統資源較少等特點在實際中被廣泛應用。

現有的Android系統沒有串口通信相關的接口,有關串口通信的實現大都是基于Google公司提供的串口開放源碼來實現的,或者使用JNI技術封裝的底層接口庫實現。這些方案雖然能夠滿足串口端到端的通信,但無法滿足當多個智能設備同時通過串口與Android系統控制器通信的場景。目前多采用專用串口擴展芯片[1]或多串口卡[2]來解決多串口并發通信問題。

一般專用串口擴展芯片都需要在系統層實現專用的驅動程序,在Android系統中添加芯片的驅動程序比較復雜,并且芯片驅動調試需要占用大量的時間。多串口卡一般由微控制器和串口擴展芯片組成,價格貴。綜上,為解決Android平臺多串口通訊問題,本文提出虛擬串口軟件方案來滿足一對多串口通信場景的需求。該方案主要由串口數據流分發軟件和STM32微處理器簡單串口擴展電路兩部分組成。

1 系統結構

系統采用模塊化設計,保證各模塊之間邏輯相對獨立方便后續的改進,主要由Android系統端和STM32微處理器端兩大部分組成。系統框架如圖1所示。

Android系統端主要由虛擬多串口數據流分發軟件和JNI接口抽象封裝兩部分組成。虛擬多串口數據流分發軟件主要功能為:監聽Android系統ttyHSL1串口與應用層軟件是否有數據發送和完成數據的封包、解包和轉發。JNI接口[3]抽象封裝主要是通過JNI技術產生與Java接口對應的C/C++本地接口,這樣不同應用程序可通過Java封裝的API來使用虛擬串口提供的服務。

STM32微處理器端的主要功能為串口數據采集與轉發。應用層軟件可通過API配置各個串口的工作參數,如波特率、奇偶校驗位、數據位和停止位等,使其與外接串口設備工作參數一致。

2 Android端系統軟件

為滿足多串口并發數據傳輸實時性要求,系統采用多線程Reactor事件處理模型[4-5]來組織虛擬多串口數據流分發軟件。系統啟動時創建固定數目的線程,避免系統運行過程中頻繁的創建與銷毀線程,從而減少進程調度所消耗的資源,提高系統的處理能力。

2.1 數據流分發軟件框架

基于Reactor事件處理模型[6]搭建虛擬串口服務框架實現高效的數據分發。為降低軟件端數據流分發處理邏輯的復雜度,系統采用命名管道[7]進程間通信方式作為數據流轉發的通道,由于管道是半雙工通訊方式,數據只能從一端到達另一端,因此為實現全雙工通信,需要創建兩個管道,分別命名為讀管道與寫管道。如圖2所示,系統中外接有4個串口再加上配置管道,因此總共需要創建10個管道來實現數據的轉發。

圖2所示,系統啟動時創建兩個線程,其中一個線程監聽系統ttyHSL1串口句柄上的事件,另一個線程監聽已創建5個讀管道句柄上的事件。

2.2 先來先服務調度算法

虛擬多串口數據流分發軟件采用先來先服務FCFS調度算法[9]完成多串口數據的轉發任務。算法主要思想是依照作業到達的先后次序組成一個就緒隊列,調度器首先選擇隊頭的任務并為其分配處理機,直到任務運行結束或發生中斷被阻塞,處理器會重新調度其他任務。調度算法如表1所示。

2.3 數據封裝協議

為保證數據傳輸的可靠性,我們定義了數據封包解包私有協議。協議由包起始標記、功能碼、包體長度、包體、CRC校驗碼和包結束標記組成。

其中包起始和結束標記為固定值,分別為48484A4A和4A4A4848,應用程序通過查找起始和結束標記來確定整個數據包。功能碼(FN)表示數據包功能,如FN為1表示APP設置串口配置參數;FN為2表示APP獲取串口配置信息;FN為3表示APP向設備發送數據;FN為4表示設備向APP發送數據。CRC校驗碼是使用CRC校驗算法[8]計算的數據包CRC值,以此保證每個數據的正確性與完整性。

3 STM32微處理器端

系統采用基于ARM Cortex?-M3內核的STM32F101RC這款芯片實現串口物理擴展,將原有的1個串口擴展為4個串口,使Android系統應用程序能夠同時與4個串口設備并發通信。

STM32F101RC該型號微處理器屬于STM32增強型系列,具有外設豐富、價格低廉、性價比高等優點。在串口外設資源方面可提供5路串口,其中3個為通用同步/異步接收器發送器,另外2個為通用異步接收器發送器。

3.1 雙緩沖區設計

系統采用雙緩沖區設計思想[9]存儲串口接收到的數據,具體工作流程為:首先將接收到的數據先放入第一個緩沖區中直到緩沖區滿或者處理器要發送此串口中的數據,然后切換緩沖區,將接收到的數據放入第二個緩沖區,此時處理器可以處理第一個緩沖區中的數據。當第二個緩沖區存滿數據或下次調度到來時,調整緩沖區指針,將接收到的數據放入第一個緩沖區,此時處理器處理第二緩沖區中的數據。重復使用兩個緩沖區來接收數據和處理數據,具體緩沖區配置情況如圖3所示。

3.2 最小剩余空間優先MRSF調度算法

在STM32微處理器端,我們提出最小剩余空間優先MRSF(Minimum Remaining Space First)調度算法來調度4個外接串口。

最小剩余空間優先MRSF調度算法主要思想是根據每個串口緩沖區剩余空間大小和等待發送時間來確定該串口的優先級,緩沖區剩余空間越小,等待時間就越長,其被分配的優先級越高,反之優先級越低。處理器在調度前,先計算每個串口的優先級,優先調度是為優先級最高的串口分配處理器,該任務一旦得到處理器,就一直運行直到任務結束。每個串口整體優先級計算公式如下:

其中,Ps代表根據緩沖區剩余空間因素計算得到的優先級,Pt代表根據時間因素計算得到的優先級,而Pl代表最終的優先級,它是兩種優先級的數值求和。算法偽代碼如表2所示。

4 實驗測試

為測試本文提出的多串口并發通信方案的正確性、高效性和穩定性,我們開發了一個Android串口應用APP,用于數據的接收和轉發。筆記本電腦(Lenovo Y470)充當傳感器設備通過串口與APP進行串口通信,數據收發采用回環測試方案,即APP收到數據后原樣返回。

電腦端打開多個串口調試軟件來模擬多臺串口設備,串口配置參數為波特率115200、無校驗、數據位8位、停止位1位,每次發送固定大小32字節的數據,實驗環境如圖4所示。實驗結果顯示,在3個串口分別以200、300、400毫秒周期速率并發傳輸場景下,該系統同樣能穩定的傳輸數據。

5 結束語

本文主要介紹了一種在Android平臺下實現多串口并發通信的方案,通過在Android源碼框架端添加虛擬串口數據流分發軟件結合STM32微處理器簡單多串口物理擴展電路實現多串口并發通信。實驗結果表明該系統在穩定性、傳輸效率、誤碼率等方面都有很好的表現。在智能售獲機、自助取件柜等產品中具有很好的應用前景。

現階段微處理器端采用前后臺系統(超循環系統)模式來組織應用程序,系統整體不夠健壯。未來將通過移植uC/OS-II實時操作系統[10]來管理和調度各個任務,以此來提高系統的實時性和整體穩定性。

參考文獻(References):

[1] 張達,郭銀博,趙廣宇,胥勛偉.基于WK2168的氣象采集站多串口采集方案的設計與實現[J].電腦知識與技術,2018.14(19):284-286

[2] 周敏.多串口卡在民航通信系統的綜合應用[J].科技與創新,2014.20:143-143

[3] 羅尹奇,劉力銀.基于JNI的Java串口通信系統的設計與實現—以Windows平臺為例[J].電腦知識與技術,2017.13(34):51-56

[4] Schmidt D C. Reactor: an object behavioral pattern for?concurrent event demultiplexing and event handler dispatching[M] Pattern languages of program design. ACM Press Addison-Wesley Publishing Co.,1995

[5] 陳碩.Linux多線程服務端編程:使用muduo C++網絡庫[M].電子工業出版社,2013.

[6] 游雙.Linux高性能服務器編程[M].機械工業出版社,2013.

[7] 喬靜,劉寶旨,屈志強等.Linux中命名管道通信淺析[J].中國科技信息,2009.20:97-98

[8] 常曉明,王建東.CRC校驗及其軟件實現[J].電子技術應用,1995.6:14-14

[9] 湯子瀛,哲鳳屏,湯小丹.計算機操作系統[M].西安電子科技大學出版社,2001.

[10] 沙德鵬,彭剛.基于uC/OS的一種嵌入式系統的構建[J].自動化與儀表,2018.33(4):91-94

主站蜘蛛池模板: 日韩精品亚洲一区中文字幕| 在线免费亚洲无码视频| 香蕉久久永久视频| 91久久偷偷做嫩草影院精品| 伊在人亚洲香蕉精品播放| 日韩国产一区二区三区无码| 国产亚洲欧美日韩在线一区| 欧美精品v欧洲精品| 在线免费看片a| 玖玖免费视频在线观看| 免费观看精品视频999| 99re视频在线| 亚洲第一黄色网址| 日日拍夜夜嗷嗷叫国产| 亚洲综合色婷婷| 国产成人三级在线观看视频| 亚洲一级毛片在线播放| 真实国产精品vr专区| 国产电话自拍伊人| 午夜一区二区三区| 欧亚日韩Av| 88av在线| 国产高清色视频免费看的网址| 亚洲男人的天堂久久香蕉网| 久久中文无码精品| 中文字幕久久亚洲一区| 国产欧美专区在线观看| 亚洲第一极品精品无码| 欧美色99| 亚洲性日韩精品一区二区| 中文字幕丝袜一区二区| 精品国产黑色丝袜高跟鞋| 日韩大片免费观看视频播放| 亚洲av无码久久无遮挡| 青青青视频91在线 | a毛片在线| 欧美a在线| 91福利免费| 国产精品视频公开费视频| 一级黄色欧美| 亚洲国产高清精品线久久| 婷婷亚洲最大| 日韩精品高清自在线| 国产福利大秀91| 99re在线免费视频| 欧美午夜理伦三级在线观看| 黄色片中文字幕| 一区二区三区成人| 欧美成人影院亚洲综合图| 国产高清在线观看| 九九热精品免费视频| 亚洲IV视频免费在线光看| 午夜限制老子影院888| 在线精品亚洲国产| 五月丁香在线视频| 天天综合天天综合| 麻豆精品久久久久久久99蜜桃| 尤物精品视频一区二区三区 | 亚洲 欧美 中文 AⅤ在线视频| 午夜综合网| 国产成人AV综合久久| 国产精品欧美日本韩免费一区二区三区不卡 | 手机精品视频在线观看免费| 国产噜噜噜视频在线观看| 中文字幕 91| 亚洲中文字幕97久久精品少妇| 在线毛片免费| 毛片网站观看| 国产极品美女在线播放| 国产99久久亚洲综合精品西瓜tv| 在线日韩一区二区| 亚洲色图欧美| 日本www在线视频| 在线欧美日韩| 中文字幕一区二区人妻电影| 国产成人禁片在线观看| 一本久道热中字伊人| 成人噜噜噜视频在线观看| 国产美女自慰在线观看| 国产精品亚洲va在线观看| 国产原创第一页在线观看| 精品久久蜜桃|