李松濤 陶斌
摘 要:在環(huán)境監(jiān)測(cè)中,相對(duì)于傳統(tǒng)的設(shè)計(jì)方法,使用嵌入式實(shí)時(shí)操作系統(tǒng)(RTOS)可以更有效地實(shí)現(xiàn)模塊和通信管理。通過消息郵箱,數(shù)據(jù)實(shí)時(shí)采集與處理系統(tǒng)實(shí)現(xiàn)了傳感器數(shù)據(jù)在不同任務(wù)之間的廣播發(fā)送,對(duì)接收任務(wù)設(shè)置不同的優(yōu)先級(jí),可以調(diào)整其接收數(shù)據(jù)的順序。在實(shí)際開發(fā)中,使用基于ARM核的STM32F103VE微控制器實(shí)現(xiàn)了溫濕度數(shù)據(jù)的實(shí)時(shí)采集和廣播發(fā)送,測(cè)試結(jié)果表明,任務(wù)的切換順序取決于優(yōu)先級(jí),不同接收任務(wù)之間的時(shí)間延遲在10ms之內(nèi),滿足了數(shù)據(jù)處理系統(tǒng)的實(shí)時(shí)性和可靠性的要求。
關(guān)鍵詞:RTOS;消息郵箱;數(shù)據(jù)采集;監(jiān)測(cè)系統(tǒng)
中圖分類號(hào):TP368.1 文獻(xiàn)標(biāo)識(shí)碼: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)
在環(huán)境監(jiān)測(cè)的數(shù)據(jù)處理系統(tǒng)中,對(duì)來自傳感器的數(shù)據(jù)需要進(jìn)行不同的處理,例如要對(duì)這些數(shù)據(jù)進(jìn)行顯示、存儲(chǔ)、檢測(cè)是否超過設(shè)定值,同時(shí),系統(tǒng)還要通過通信接口與上位機(jī)通信。在通常的嵌入式數(shù)據(jù)采集系統(tǒng)中,一般是通過查詢方式或中斷方式獲取來自傳感器的數(shù)據(jù),然后再調(diào)用不同的功能函數(shù)對(duì)數(shù)據(jù)進(jìn)行處理。查詢方式需要消耗時(shí)間查詢傳感器狀態(tài),所有數(shù)據(jù)處理過程串行執(zhí)行,而數(shù)據(jù)的存儲(chǔ)和通信過程比較耗時(shí),有時(shí)會(huì)因?yàn)橛布惓6袛喑绦虻膱?zhí)行,程序的執(zhí)行時(shí)間無(wú)法保證。中斷方式雖然可以滿足系統(tǒng)實(shí)時(shí)性的要求,但是在復(fù)雜系統(tǒng)中,由于需要處理的實(shí)時(shí)事件較多,有限的中斷無(wú)法滿足系統(tǒng)的要求;大量的使用中斷進(jìn)程,也不利于程序的模塊化設(shè)計(jì),程序的可讀性和易維護(hù)性下降。在嵌入式系統(tǒng)設(shè)計(jì)中采用實(shí)時(shí)操作系統(tǒng)(RTOS)可以將系統(tǒng)功能分解成多個(gè)不同的任務(wù),各個(gè)任務(wù)獨(dú)立運(yùn)行,實(shí)現(xiàn)了系統(tǒng)的模塊化設(shè)計(jì)[1,2]。任務(wù)的調(diào)度由RTOS負(fù)責(zé),同時(shí)也滿足了系統(tǒng)可靠性和實(shí)時(shí)性的要求[3]。
本文使用消息郵箱將傳感器采集到數(shù)據(jù)以廣播的方式向數(shù)據(jù)處理任務(wù)發(fā)送,數(shù)據(jù)處理任務(wù)作為接收者可以并發(fā)接收來自傳感器的數(shù)據(jù),在保證實(shí)時(shí)性的同時(shí),也實(shí)現(xiàn)了任務(wù)模塊之間的松耦合。
2 環(huán)境監(jiān)測(cè)系統(tǒng)任務(wù)劃分(Task division of
environmental monitoring system)
在基于μC/OS-II的嵌入式系統(tǒng)中,將環(huán)境監(jiān)測(cè)系統(tǒng)中環(huán)境因子的數(shù)據(jù)采集和處理功能分配在不同的任務(wù)中,任務(wù)之間由RTOS進(jìn)行調(diào)度,各個(gè)任務(wù)有不同的優(yōu)先級(jí),任務(wù)按照優(yōu)先級(jí)的高低分時(shí)使用CPU。在μC/OS-II中,可以將任務(wù)分成64個(gè)不同的優(yōu)先級(jí)[4],且任務(wù)優(yōu)先級(jí)各不相同。其中空閑任務(wù)和統(tǒng)計(jì)任務(wù)是系統(tǒng)保留的優(yōu)先級(jí),用戶不可用。其他的優(yōu)先級(jí)根據(jù)實(shí)現(xiàn)的功能進(jìn)行設(shè)置。環(huán)境監(jiān)測(cè)系統(tǒng)中任務(wù)及優(yōu)先級(jí)分配如表1所示。
數(shù)據(jù)采集任務(wù)使用單通道ADC采集傳感器數(shù)據(jù),數(shù)據(jù)以DMA方式保存在存儲(chǔ)器中,采集數(shù)據(jù)的周期在任務(wù)中設(shè)置。雖然系統(tǒng)對(duì)實(shí)時(shí)性的要求不是很高,但是考慮到采集任務(wù)需要向其他任務(wù)提供數(shù)據(jù)源,因此將該任務(wù)設(shè)置為最高優(yōu)先級(jí)。監(jiān)測(cè)及報(bào)警任務(wù)負(fù)責(zé)對(duì)數(shù)據(jù)上下限范圍的監(jiān)測(cè),對(duì)敏感數(shù)據(jù)的聲光報(bào)警,因此將其優(yōu)先級(jí)設(shè)置為僅次于數(shù)據(jù)采集任務(wù)。對(duì)于串口通信任務(wù)和LCD顯示任務(wù),相對(duì)于前兩個(gè)任務(wù),實(shí)時(shí)性和重要性不高,可以將它們?cè)O(shè)置為較低的優(yōu)先級(jí)。任務(wù)模式根據(jù)各個(gè)任務(wù)在數(shù)據(jù)處理中的不同作用,分為數(shù)據(jù)廣播者和數(shù)據(jù)接收者。數(shù)據(jù)采集任務(wù)是數(shù)據(jù)廣播者,其他任務(wù)是數(shù)據(jù)接收者。
3 廣播模式及實(shí)現(xiàn)(Broadcast mode and
implementation)
3.1 任務(wù)間數(shù)據(jù)廣播
μC/OS-II中實(shí)現(xiàn)數(shù)據(jù)的廣播通信有兩種方法,一種是利用信號(hào)量來實(shí)現(xiàn)。由于信號(hào)量只能標(biāo)識(shí)事件的發(fā)生,所以在使用信號(hào)量實(shí)現(xiàn)時(shí),需要使用兩種不同類型的信號(hào)量方式:計(jì)數(shù)信號(hào)量表示事件的發(fā)生;互斥信號(hào)量用來保護(hù)臨界資源。在大型系統(tǒng)中,需要設(shè)置多個(gè)信號(hào)量,程序流程復(fù)雜。另外一種是使用消息郵箱方式[5]。μC/OS-II提供的通用消息處理函數(shù)只能一次發(fā)送一個(gè)消息,數(shù)據(jù)讀取后自動(dòng)清空消息郵箱,無(wú)法實(shí)現(xiàn)消息的廣播。通過對(duì)消息郵箱函數(shù)的擴(kuò)展,實(shí)現(xiàn)了數(shù)據(jù)采集任務(wù)向多個(gè)接收任務(wù)廣播數(shù)據(jù)?;谙⑧]箱的廣播方式具有編程簡(jiǎn)單,結(jié)構(gòu)清晰的特點(diǎn)。
基于消息郵箱的廣播模式實(shí)現(xiàn)過程如圖1所示。數(shù)據(jù)采集任務(wù)的采樣周期設(shè)置為5s,數(shù)據(jù)采集任務(wù)SensorTask獲取數(shù)據(jù)后,向其他三個(gè)任務(wù)LCDTask、COMTask和ALARMTask通過消息郵箱廣播發(fā)送數(shù)據(jù),這時(shí)需要實(shí)現(xiàn)多個(gè)任務(wù)之間的同步。當(dāng)SensorTask獲得來自ADC的數(shù)據(jù)后,要將此數(shù)據(jù)以消息的方式通知所有數(shù)據(jù)接收任務(wù),SensorTask以O(shè)SMboxPostOpt()廣播數(shù)據(jù)。其他任務(wù)在同步點(diǎn)調(diào)用OSMboxPend()等待來自SensorTask的消息,獲取數(shù)據(jù)后,LCDTask、COMTask和ALARMTask中處于就緒狀態(tài)的任務(wù)就可以根據(jù)優(yōu)先級(jí)的高低切換上下文獲取系統(tǒng)資源,執(zhí)行相應(yīng)的操作。
3.2 任務(wù)內(nèi)部的狀態(tài)轉(zhuǎn)換
μC/OS-II以任務(wù)的形式管理程序的執(zhí)行,內(nèi)核為創(chuàng)建的任務(wù)分配棧空間,并根據(jù)任務(wù)的優(yōu)先級(jí)進(jìn)行任務(wù)的調(diào)度,將就緒任務(wù)列表中優(yōu)先級(jí)最高的任務(wù)置為運(yùn)行態(tài)。數(shù)據(jù)采集任務(wù)和數(shù)據(jù)接收任務(wù)的狀態(tài)轉(zhuǎn)換如圖2(a)和圖2(b)所示,分別是數(shù)據(jù)采集任務(wù)SensorTask和數(shù)據(jù)接收任務(wù)(以LCDTask為例)的狀態(tài)轉(zhuǎn)換圖。數(shù)據(jù)采集任務(wù)SensorTask有最高的優(yōu)先級(jí),最先獲得CPU的使用權(quán),啟動(dòng)ADC轉(zhuǎn)換模塊采集數(shù)據(jù)并將采集到的數(shù)據(jù)通過廣播的形式發(fā)送,然后調(diào)用延時(shí)函數(shù)進(jìn)入等待狀態(tài),讓出CPU的使用權(quán),其他低優(yōu)先級(jí)任務(wù)獲得運(yùn)行機(jī)會(huì)。延時(shí)時(shí)間到后,通過時(shí)鐘中斷進(jìn)入就緒態(tài),由于SensorTask在所有處于就緒態(tài)的任務(wù)中具有最高的優(yōu)先級(jí),一旦就緒就可以通過上下文切換立即進(jìn)入到運(yùn)行態(tài),開始進(jìn)行下一個(gè)周期的數(shù)據(jù)采集和發(fā)送。數(shù)據(jù)接收任務(wù)LCDTask創(chuàng)建后進(jìn)入就緒態(tài),其中優(yōu)先級(jí)最高的任務(wù)在數(shù)據(jù)采集任務(wù)延時(shí)期間可以進(jìn)入運(yùn)行態(tài),時(shí)間延時(shí)或等待消息事件都會(huì)使數(shù)據(jù)接收任務(wù)進(jìn)入等待狀態(tài)。當(dāng)獲得廣播消息后,數(shù)據(jù)接收任務(wù)就可以進(jìn)入就緒態(tài),優(yōu)先級(jí)最高的任務(wù)首先獲得CPU的使用權(quán),進(jìn)入到執(zhí)行狀態(tài),任務(wù)執(zhí)行結(jié)束后延時(shí)開始下一個(gè)周期的循環(huán)。
4 系統(tǒng)性能分析(System performance analysis)
4.1 系統(tǒng)硬件實(shí)現(xiàn)
系統(tǒng)采用的控制芯片為STM32F103VE,其上運(yùn)行經(jīng)過移植的μC/OS-II 2.86 RTOS。STM32F103VE采用32位的Cortex-M3 ARM內(nèi)核,工作頻率72MHz, 具有低成本、低功耗等特點(diǎn)[6,7]。溫濕度傳感器采用DHT11[8],通過PD12端口與控制器相連,如圖3所示。
4.2 系統(tǒng)性能測(cè)試分析
(1)系統(tǒng)任務(wù)之間的切換
不同任務(wù)之間切換如圖4所示。大部分時(shí)間里,CPU運(yùn)行具有最低優(yōu)先級(jí)的空閑任務(wù)IdleTask,在每一次數(shù)據(jù)采集點(diǎn),SensorTask獲取CPU資源,開始執(zhí)行任務(wù),由于該任務(wù)具有最高優(yōu)先級(jí),可以無(wú)中斷的運(yùn)行結(jié)束。其他任務(wù)根據(jù)優(yōu)先級(jí)的不同相續(xù)獲取CPU資源,執(zhí)行各自的功能。由于一個(gè)數(shù)據(jù)采集周期遠(yuǎn)遠(yuǎn)大于各個(gè)任務(wù)的執(zhí)行時(shí)間,因此在系統(tǒng)中不存在任務(wù)的中斷。
(2)任務(wù)廣播延遲
理論上來講,在廣播方式下,各個(gè)接收任務(wù)應(yīng)該同時(shí)接收到消息,但由于接收任務(wù)有不同的優(yōu)先級(jí),優(yōu)先級(jí)高的任務(wù)首先進(jìn)入運(yùn)行態(tài)。數(shù)據(jù)采集任務(wù)發(fā)送數(shù)據(jù)與接收任務(wù)接收數(shù)據(jù)的延時(shí)時(shí)間主要有兩部分組成:當(dāng)前處于運(yùn)行態(tài)的任務(wù)執(zhí)行任務(wù)的時(shí)間和任務(wù)切換時(shí)間。不同任務(wù)的數(shù)據(jù)延遲時(shí)間統(tǒng)計(jì)如圖5所示。
5 結(jié)論(Conclusion)
基于廣播模式的數(shù)據(jù)實(shí)時(shí)采集與處理系統(tǒng),將功能分解到任務(wù),使軟件結(jié)構(gòu)清晰,實(shí)現(xiàn)了各個(gè)功能模塊的松耦合,提高了系統(tǒng)實(shí)時(shí)性和靈活性,實(shí)際測(cè)試結(jié)果表明,不同任務(wù)之間的時(shí)間延遲在10ms之內(nèi),滿足了數(shù)據(jù)處理系統(tǒng)實(shí)時(shí)性的要求。
參考文獻(xiàn)(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.嵌入式實(shí)時(shí)操作系統(tǒng)μC/OS-II[M].北京:北京航空航天大學(xué)出版社,2003.
[5] 劉林真.消息郵箱機(jī)制在煙花倉(cāng)庫(kù)溫濕度監(jiān)控系統(tǒng)中的應(yīng)用[J].福州大學(xué)學(xué)報(bào):自然科學(xué)版,2015(5):622-626.
[6] 賈鵬輝,等.基于STM32F103VCT6的振弦式傳感器數(shù)據(jù)采集系統(tǒng)[J].儀表技術(shù)與傳感器,2015(2):67-70.
[7] 王晨輝,吳悅,楊凱.基于STM32的多通道數(shù)據(jù)采集系統(tǒng)設(shè)計(jì)[J].電子技術(shù)應(yīng)用,2016,42(1):51-53.
[8] 麥軍,鄧巧茵,萬(wàn)智萍.基于CC2530的ZigBee無(wú)線組網(wǎng)溫度監(jiān)測(cè)系統(tǒng)的設(shè)計(jì)[J].電子設(shè)計(jì)工程,2015,23(22):117-121.
作者簡(jiǎn)介:
李松濤(1971-),男,碩士,講師.研究領(lǐng)域:嵌入式系統(tǒng).
陶 斌(1979-),男,碩士,講師.研究領(lǐng)域:計(jì)算機(jī)網(wǎng)絡(luò).