摘要:本文介紹了使用TI公司的超低功耗MSP430單片機與uC/OS相結合設計數(shù)據(jù)采集系統(tǒng)的方法,采用了uC/OS的多任務的軟件設計方式代替了傳統(tǒng)的前后臺式的嵌入式軟件設計方法,使得軟件系統(tǒng)模塊化,并且克服了前后臺式軟件設計的弊端,增前了系統(tǒng)的實時性。 關鍵詞:嵌入式操作系統(tǒng);郵箱;多任務;uC/OS;MSP430 1前言 近年來隨著IC設備功耗和體積的不斷減小,手持設備的應用領域變的越來越廣泛。但是另一方面,傳統(tǒng)的前后臺式的軟件設計方法卻限制了硬件系統(tǒng)功能的充分發(fā)揮,影響了系統(tǒng)的實時性與穩(wěn)定性。本文介紹了一種基于嵌入式操作系統(tǒng)uC/OS上設計系統(tǒng)軟件的方法,即克服了原有前后臺式軟件設計的一些弊端,又充分發(fā)揮了硬件特性,增強了系統(tǒng)穩(wěn)定性,很好的解決了手持數(shù)據(jù)采集設備多任務軟件系統(tǒng)實時性不強的問題。 2 uC/OS簡介 uC/OS是由EAN J.LABROSSE個人開發(fā)的嵌入式操作系統(tǒng)。該系統(tǒng)是一個源代碼完全公開的實時內(nèi)核,設計人員在應用過程中可以按照自己的需求對內(nèi)核進行裁減和擴展,以滿足不同工程對應用軟件設計的要求。uC/OS是完全占先式的實時內(nèi)核,支持多任務操作,并且每個任務都有自己單獨的棧,這樣就清晰了任務之間的界限,增強了系統(tǒng)的穩(wěn)定性。uC/OS還提供了很多的系統(tǒng)服務,例如郵箱、消息隊列、信號量、塊大小固定的內(nèi)存的申請和釋放、時間函數(shù)等,并且還支持多達255層的中斷嵌套。利用這些系統(tǒng)服務就能輕而易舉的完成復雜邏輯的要求,從而縮短系統(tǒng)開發(fā)的周期,降低開發(fā)的成本。同時uC/OS良好的可擴展性和可移植性,使其能夠廣泛的應用到各種架構的微處理器上。 3硬件系統(tǒng)設計 3.1 硬件系統(tǒng)設計要求 手持數(shù)據(jù)設備的硬件設計具有一些特殊的要求,首先手持系統(tǒng)一般都是采用自身攜帶的電池供電,對硬件設備功耗的要求十分嚴格,另外手持設備還需要具有一個良好的人機交互的功能,一方面要能顯示各種數(shù)據(jù)的變化,令一方面也要能響應外部的人為命令。考慮到這些因素,系統(tǒng)選取了TI公司的MSP430單片機作為硬件設計的核心平臺。 3.2 MSP430硬件簡介 MSP430是TI公司近幾年推出的16位系列單片機,采用了TI公司最新的低功耗技術,使其在眾多的單片機中獨樹一幟。MSP430工作在1.8~3.6V電壓下,有正常工作模式(AM)和4種低功耗工作模式(LPM1、LPM2、LPM3、LPM4),在電源電壓為3V時,各種模式的工作電流分別為: AM:340uA LPM1:70uA LPM2:17uA LPM3:2uA LPM4:0.1uA 單片機可以方便的在各種工作模式之間切換。MSP430也具有非常高的集成度,單片集成了多通道12bit的A/D轉(zhuǎn)換、片內(nèi)精密比較器、多個具有PWM功能的定時器、斜邊A/D轉(zhuǎn)換、片內(nèi)USART、看門狗定時器、片內(nèi)數(shù)控振蕩器(DCO)、大量的I/O端口以及大容量的片內(nèi)存儲器,單片可以滿足絕大多數(shù)的應用需要,節(jié)省了大量的板上空間。此次設計中選擇了MSP430F149作為硬件設計平臺,其多種功耗模式完全適合設計低功耗的要求,豐富的片上資源又能夠滿足交互界面的開發(fā)。更重要的是其多達60KB的閃速存儲器和2KB的RAM為uC/OS的移植與穩(wěn)定運行提供了充分的空間。 3.3 手持數(shù)據(jù)采集系統(tǒng)硬件結構 對于本次設計,一個完整的手持數(shù)據(jù)采集系統(tǒng)還需要具有以下硬件模塊: 1)A/D轉(zhuǎn)換模塊,板上內(nèi)置傳感器,預留模擬信號輸入接口。 2)DS1302外部實時時鐘。 3)兩個RS232串口,用來和上位機和其他設備通信。 整體的硬件示意圖如下所示:
4 軟件系統(tǒng)設計 4.1 前后臺軟件設計方法的弊端 一般的嵌入式軟件系統(tǒng)的設計都是采用前后臺式的設計方法,前臺程序是一個無限循環(huán),循環(huán)依次調(diào)用相應的函數(shù)來完成對應的操作,后臺是中斷服務程序,負責處理異步事件。這種設計方法在實際應用中存在三個缺陷: 一是中斷不能得到及時響應,處理時間過長,無法保證系統(tǒng)的實時要求。 二是當系統(tǒng)任務多時,要實現(xiàn)多個任務實時操作的常規(guī)方法是采用多級嵌套來實現(xiàn)多個任務并行處理,這就增加了軟件編寫的難度,同時降低了軟件系統(tǒng)的可靠性。 三是各任務之間信息交換困難。多任務在運行時,任務之間不可避免的有同步和互斥的情況發(fā)生。前后臺設計方法一般采用全局變量的方法來解決通訊問題,但任務多情況復雜時容易出錯,如果調(diào)用不當就會發(fā)生死鎖。 工程中設計的數(shù)據(jù)采集系統(tǒng)是一個典型的多任務系統(tǒng),并且要能夠響應多個外部信號,傳統(tǒng)的前后臺式的軟件設計方法已經(jīng)不能滿足工程的需要,因此設計中引入了uC/OS,采用了多任務式的軟件設計方法。 4.2 基于uC/OS的軟件設計 使用uC/OS設計軟件系統(tǒng)首先要實現(xiàn)uC/OS在硬件應用平臺上的移植,主要就是完成對OS_CPU_C.C,OS_CPU_A.ASM等幾個與處理器相關文件的改寫,使其能夠適應硬件和編譯環(huán)境的要求,選取的編譯器一定要能夠支持函數(shù)的重載,此次設計選取了IAR公司的IAR for MSP430 1.26A。另外在本次設計中,筆者將空閑任務修改為如下形式。 void OSTaskIdleHook (void) { LPM3;/* Enter low power mode } 這樣當系統(tǒng)進入空閑狀態(tài)時就會進入低功耗模式LPM3,從而充分發(fā)揮硬件低功耗的特性,這也體現(xiàn)了uC/OS應用的靈活性。 完成移植后就要根據(jù)工程要求合理劃分系統(tǒng)任務,確定任務間的通信機制以及各個中斷信號。設計中,我們將整個系統(tǒng)劃分為如下幾個部分: 任務1 數(shù)據(jù)采集及顯示 任務2 串口通訊 任務3 DS1302實時時鐘設定 外部中斷:多個外部鍵盤觸發(fā)中斷,用來喚醒不同的系統(tǒng)任務。 Timer中斷:一個timerA中斷,用來顯示系統(tǒng)時間。

圖2系統(tǒng)軟件流程圖 任務1的功能是采集外部的模擬輸入信號,將采集到的數(shù)據(jù)通過一定的濾波算法和轉(zhuǎn)換處理后顯示在LCD上面,并將數(shù)據(jù)保存到一個數(shù)組里面。該任務是系統(tǒng)的最高優(yōu)先級任務,用郵箱CltMbox1和CltMbox2來控制,當任務開始的時候要等待郵箱CltMbox1或CltMbox2,如果沒有郵箱的釋放,系統(tǒng)將轉(zhuǎn)到任務2執(zhí)行。如果有數(shù)據(jù)采集的外部鍵盤觸發(fā)信號產(chǎn)生,當按鍵時間超過1s時釋放郵箱CltMbox2,則系統(tǒng)開始循環(huán)執(zhí)行任務1,直到有外部停止中斷信號掛起CltMbox2才中止。如果按鍵時間小于1s則釋放郵箱CltMbox1,任務1循環(huán)執(zhí)行10次后釋放郵箱CltMbox1,然后進入等待狀態(tài),直到再次有外部信號的觸發(fā)才開始執(zhí)行。任務1每次執(zhí)行后都要將自己掛起1s,這一方面為其他任務的執(zhí)行提供了時間,另一方面也是考慮到人眼的實際分辨能力,太快的LCD的刷新頻率是沒有意義的。 任務2實現(xiàn)的是串口通訊功能,主要是用來完成手持設備與上位機的數(shù)據(jù)交流,其執(zhí)行也是通過外部鍵盤的觸發(fā)信號來控制。當發(fā)送按鍵觸發(fā)后將會釋放一個郵箱SMbox,任務2在得到這個郵箱后將會把采集到的數(shù)據(jù)發(fā)送給上位機,如果需要修改軟件的濾波算法或轉(zhuǎn)換公式的參數(shù)的話就要觸發(fā)鍵盤的接收鍵,任務2在得到相應的郵箱RMbox后將接收上位機的數(shù)據(jù),改變對應的參數(shù)。 任務3是外部實時時鐘的設定任務,它是3個系統(tǒng)任務中優(yōu)先級最低的。在傳統(tǒng)的前后臺軟件設計方法中,如果將這個任務放到前臺系統(tǒng)中,其大量的耗時將降低系統(tǒng)的實時性,使得其它中斷任務得不到及時的響應,如果將其放到后臺處理,在中斷中調(diào)用過大的程序又會降低系統(tǒng)的穩(wěn)定性,但在uC/OS多任務的體系結構中卻很好的解決了這個問題。作為系統(tǒng)的最低優(yōu)先級的任務,任何處于就緒態(tài)的高優(yōu)先級的任務都能打斷外部實時時鐘的設定,當在其他更高優(yōu)先級任務完成后,設定過程會在原先中斷的地方繼續(xù)執(zhí)行。在外部實時時鐘設定的過程中如果有數(shù)據(jù)采集觸發(fā)信號產(chǎn)生,任務1將進入就緒態(tài),但是由于數(shù)據(jù)采集的過程非常的快,當任務1掛起1s的時候任務3將會再次得到系統(tǒng)的控制權,給我們的感覺就像在設定外部時鐘的同時又完成了系統(tǒng)的數(shù)據(jù)采集和顯示,從而利用uC/OS提供的這種分時操作的功能,很好的解決了系統(tǒng)的實時性問題,增強了系統(tǒng)的穩(wěn)定性。 時間顯示是系統(tǒng)中調(diào)用最多的任務,考慮到系統(tǒng)的功耗問題,設計中將時間顯示任務放到了TimerA的中斷里面來完成。通過外部鍵盤的觸發(fā)將開啟TmerA的中斷使能,LCD將開始顯示外部實時時鐘的時間。同樣通過鍵盤控制也可以關閉TimerA的中斷使能,這樣在沒有任何任務就緒的情況下,系統(tǒng)將進入空閑任務中,從而進一步降低了系統(tǒng)的功耗。 4.3系統(tǒng)升級擴展 為了滿足遠程數(shù)據(jù)采集處理的要求此系統(tǒng)可以與GSM MODEM聯(lián)合使用,以達到遠程無線傳輸數(shù)據(jù)的功能。數(shù)據(jù)采集系統(tǒng)與GSM MODEM通過RS232通信,將需要發(fā)送的數(shù)據(jù)輸給GSM MODEM,然后再通過GSM MODEM發(fā)送到遠程的數(shù)據(jù)采集站。增加此功能的軟件修改十分簡單,只需將此功能作為一個獨立的任務添加到uC/OS中,通過鍵盤觸發(fā)來完成該任務的調(diào)用,而無需再對整個軟件系統(tǒng)的邏輯進行修改,這也體現(xiàn)了uC/OS模塊化軟件設計的優(yōu)勢。需要注意的是GSM MODEM的初始化過程時間較長,在這個過程中盡量不要有任務的切換,從而造成整個發(fā)送過程的失敗。有效的方法就是將GSM的發(fā)送作為最低優(yōu)先級的任務來處理,在沒有其它任務觸發(fā)后再調(diào)用該任務。 四、結論 uC/OS在手持數(shù)據(jù)采集系統(tǒng)的成功應用為手持設備軟件系統(tǒng)的設計探索了一條新的道路。使用uC/OS設計嵌入式軟件克服了傳統(tǒng)的前后臺式的軟件設計方法的弊端,提高了系統(tǒng)的實時性和穩(wěn)定性,使得軟件系統(tǒng)代碼模塊化,更進一步增強了系統(tǒng)升級擴展的能力。未來,在嵌入式系統(tǒng)軟件設計中uC/OS的應用領域必將變得更加的廣泛。 參考文獻 [1] Jean J.Labrosse著,邵貝貝譯.嵌入式實時操作系統(tǒng)μC/OS-Ⅱ(第2版).北京航空航天大學出版社 2002.3. [2] 魏小龍編著.MSP430系列單片機接口技術及系統(tǒng)設計實例.北京:北京航空航天大學出版社 2002 胡大可主編.MSP430系列單片機C語言程序設計與開發(fā).北京:北京航空航天大學出版社 2002 IAR Company,MSP430 Windows WorkBench,TEXAS INSTRUMENTS。1999 72~83 |