李松濤 陶斌
摘 要:在環境監測中,相對于傳統的設計方法,使用嵌入式實時操作系統(RTOS)可以更有效地實現模塊和通信管理。通過消息郵箱,數據實時采集與處理系統實現了傳感器數據在不同任務之間的廣播發送,對接收任務設置不同的優先級,可以調整其接收數據的順序。在實際開發中,使用基于ARM核的STM32F103VE微控制器實現了溫濕度數據的實時采集和廣播發送,測試結果表明,任務的切換順序取決于優先級,不同接收任務之間的時間延遲在10ms之內,滿足了數據處理系統的實時性和可靠性的要求。
關鍵詞:RTOS;消息郵箱;數據采集;監測系統
中圖分類號:TP368.1 文獻標識碼:A
Abstract:Compared with traditional design methods, the embedded real-time operating system (RTOS) can more effectively achieve the module management and the communication management in environment monitoring.With the message mailbox and real-time data acquisition and processing system,the sensor data can be broadcasted and transmitted among different tasks.By setting different priorities to the receiving task,the order of data reception can be adjusted.In practical development,the STM32F103VE microcontroller based on ARM core is used to implement the acquisition and the broadcast transmission of the humidity data.The test results show that task switching sequence is determined by the priority and time delay among different receiving tasks is within 10ms,which meets the requirements of the data processing system with real-time and reliability.
Keywords:RTOS;the message mailbox;data acquisition;the monitoring system
1 引言(Introduction)
在環境監測的數據處理系統中,對來自傳感器的數據需要進行不同的處理,例如要對這些數據進行顯示、存儲、檢測是否超過設定值,同時,系統還要通過通信接口與上位機通信。在通常的嵌入式數據采集系統中,一般是通過查詢方式或中斷方式獲取來自傳感器的數據,然后再調用不同的功能函數對數據進行處理。查詢方式需要消耗時間查詢傳感器狀態,所有數據處理過程串行執行,而數據的存儲和通信過程比較耗時,有時會因為硬件異常而中斷程序的執行,程序的執行時間無法保證。中斷方式雖然可以滿足系統實時性的要求,但是在復雜系統中,由于需要處理的實時事件較多,有限的中斷無法滿足系統的要求;大量的使用中斷進程,也不利于程序的模塊化設計,程序的可讀性和易維護性下降。在嵌入式系統設計中采用實時操作系統(RTOS)可以將系統功能分解成多個不同的任務,各個任務獨立運行,實現了系統的模塊化設計[1,2]。任務的調度由RTOS負責,同時也滿足了系統可靠性和實時性的要求[3]。
本文使用消息郵箱將傳感器采集到數據以廣播的方式向數據處理任務發送,數據處理任務作為接收者可以并發接收來自傳感器的數據,在保證實時性的同時,也實現了任務模塊之間的松耦合。
2 環境監測系統任務劃分(Task division of
environmental monitoring system)
在基于μC/OS-II的嵌入式系統中,將環境監測系統中環境因子的數據采集和處理功能分配在不同的任務中,任務之間由RTOS進行調度,各個任務有不同的優先級,任務按照優先級的高低分時使用CPU。在μC/OS-II中,可以將任務分成64個不同的優先級[4],且任務優先級各不相同。其中空閑任務和統計任務是系統保留的優先級,用戶不可用。其他的優先級根據實現的功能進行設置。環境監測系統中任務及優先級分配如表1所示。
數據采集任務使用單通道ADC采集傳感器數據,數據以DMA方式保存在存儲器中,采集數據的周期在任務中設置。雖然系統對實時性的要求不是很高,但是考慮到采集任務需要向其他任務提供數據源,因此將該任務設置為最高優先級。監測及報警任務負責對數據上下限范圍的監測,對敏感數據的聲光報警,因此將其優先級設置為僅次于數據采集任務。對于串口通信任務和LCD顯示任務,相對于前兩個任務,實時性和重要性不高,可以將它們設置為較低的優先級。任務模式根據各個任務在數據處理中的不同作用,分為數據廣播者和數據接收者。數據采集任務是數據廣播者,其他任務是數據接收者。
3 廣播模式及實現(Broadcast mode and
implementation)
3.1 任務間數據廣播
μC/OS-II中實現數據的廣播通信有兩種方法,一種是利用信號量來實現。由于信號量只能標識事件的發生,所以在使用信號量實現時,需要使用兩種不同類型的信號量方式:計數信號量表示事件的發生;互斥信號量用來保護臨界資源。在大型系統中,需要設置多個信號量,程序流程復雜。另外一種是使用消息郵箱方式[5]。μC/OS-II提供的通用消息處理函數只能一次發送一個消息,數據讀取后自動清空消息郵箱,無法實現消息的廣播。通過對消息郵箱函數的擴展,實現了數據采集任務向多個接收任務廣播數據。基于消息郵箱的廣播方式具有編程簡單,結構清晰的特點。
基于消息郵箱的廣播模式實現過程如圖1所示。數據采集任務的采樣周期設置為5s,數據采集任務SensorTask獲取數據后,向其他三個任務LCDTask、COMTask和ALARMTask通過消息郵箱廣播發送數據,這時需要實現多個任務之間的同步。當SensorTask獲得來自ADC的數據后,要將此數據以消息的方式通知所有數據接收任務,SensorTask以OSMboxPostOpt()廣播數據。其他任務在同步點調用OSMboxPend()等待來自SensorTask的消息,獲取數據后,LCDTask、COMTask和ALARMTask中處于就緒狀態的任務就可以根據優先級的高低切換上下文獲取系統資源,執行相應的操作。
3.2 任務內部的狀態轉換
μC/OS-II以任務的形式管理程序的執行,內核為創建的任務分配棧空間,并根據任務的優先級進行任務的調度,將就緒任務列表中優先級最高的任務置為運行態。數據采集任務和數據接收任務的狀態轉換如圖2(a)和圖2(b)所示,分別是數據采集任務SensorTask和數據接收任務(以LCDTask為例)的狀態轉換圖。數據采集任務SensorTask有最高的優先級,最先獲得CPU的使用權,啟動ADC轉換模塊采集數據并將采集到的數據通過廣播的形式發送,然后調用延時函數進入等待狀態,讓出CPU的使用權,其他低優先級任務獲得運行機會。延時時間到后,通過時鐘中斷進入就緒態,由于SensorTask在所有處于就緒態的任務中具有最高的優先級,一旦就緒就可以通過上下文切換立即進入到運行態,開始進行下一個周期的數據采集和發送。數據接收任務LCDTask創建后進入就緒態,其中優先級最高的任務在數據采集任務延時期間可以進入運行態,時間延時或等待消息事件都會使數據接收任務進入等待狀態。當獲得廣播消息后,數據接收任務就可以進入就緒態,優先級最高的任務首先獲得CPU的使用權,進入到執行狀態,任務執行結束后延時開始下一個周期的循環。
4 系統性能分析(System performance analysis)
4.1 系統硬件實現
系統采用的控制芯片為STM32F103VE,其上運行經過移植的μC/OS-II 2.86 RTOS。STM32F103VE采用32位的Cortex-M3 ARM內核,工作頻率72MHz, 具有低成本、低功耗等特點[6,7]。溫濕度傳感器采用DHT11[8],通過PD12端口與控制器相連,如圖3所示。
4.2 系統性能測試分析
(1)系統任務之間的切換
不同任務之間切換如圖4所示。大部分時間里,CPU運行具有最低優先級的空閑任務IdleTask,在每一次數據采集點,SensorTask獲取CPU資源,開始執行任務,由于該任務具有最高優先級,可以無中斷的運行結束。其他任務根據優先級的不同相續獲取CPU資源,執行各自的功能。由于一個數據采集周期遠遠大于各個任務的執行時間,因此在系統中不存在任務的中斷。
(2)任務廣播延遲
理論上來講,在廣播方式下,各個接收任務應該同時接收到消息,但由于接收任務有不同的優先級,優先級高的任務首先進入運行態。數據采集任務發送數據與接收任務接收數據的延時時間主要有兩部分組成:當前處于運行態的任務執行任務的時間和任務切換時間。不同任務的數據延遲時間統計如圖5所示。
5 結論(Conclusion)
基于廣播模式的數據實時采集與處理系統,將功能分解到任務,使軟件結構清晰,實現了各個功能模塊的松耦合,提高了系統實時性和靈活性,實際測試結果表明,不同任務之間的時間延遲在10ms之內,滿足了數據處理系統實時性的要求。
參考文獻(References)
[1] E Barakat,N Sinno,C Keyrouz.A Remote Monitoring System for Voltage, Current,Power and Temperature Measurements[J].Physics Procedia, 2014,55:421-428.
[2] M Rockwood,et al.Using a Real-time Operating System for Multitasking in Remote Patient Monitoring[J].IEEE International Symposium on Medical Measurements & Applications,2014:1-5.
[3] J M Fontana,M Farooq,E Sazonov.Automatic Ingestion Monitor:A Novel Wearable Device for Monitoring of Ingestive Behavior[J].IEEE Transactions on Biomedical Engineering,2014,61(6):1772-1779.
[4] Jean J.Labrosse.嵌入式實時操作系統μC/OS-II[M].北京:北京航空航天大學出版社,2003.
[5] 劉林真.消息郵箱機制在煙花倉庫溫濕度監控系統中的應用[J].福州大學學報:自然科學版,2015(5):622-626.
[6] 賈鵬輝,等.基于STM32F103VCT6的振弦式傳感器數據采集系統[J].儀表技術與傳感器,2015(2):67-70.
[7] 王晨輝,吳悅,楊凱.基于STM32的多通道數據采集系統設計[J].電子技術應用,2016,42(1):51-53.
[8] 麥軍,鄧巧茵,萬智萍.基于CC2530的ZigBee無線組網溫度監測系統的設計[J].電子設計工程,2015,23(22):117-121.
作者簡介:
李松濤(1971-),男,碩士,講師.研究領域:嵌入式系統.
陶 斌(1979-),男,碩士,講師.研究領域:計算機網絡.