| 摘要 在嵌入式系統(tǒng)中使用RTOS是大勢所趨。這種多任務(wù)實時操作系統(tǒng)一方面可以提高系統(tǒng)的實時處理能力,另一方面可以提高開發(fā)效率,也能提高軟件的可維護性。本文以RTOS的簡化版本Small RTOS51為開發(fā)平臺,以電子短跑儀為實例,提出面向?qū)ο蟮木幊谭椒ā?/P> 關(guān)鍵詞 嵌入式系統(tǒng) RTOS 面向?qū)ο?任務(wù)分配 任務(wù)通信 電子短跑測試儀 引言 實時操作系統(tǒng)(RTOS)是一段在嵌入式系統(tǒng)啟動后首先執(zhí)行的背景程序。用戶的應(yīng)用程序是運行于RTOS之上的各個任務(wù),RTOS根據(jù)各個任務(wù)要求,進行資源管理、消息管理、任務(wù)調(diào)度和異常處理等工作。在RTOS支持的系統(tǒng)中,每個任務(wù)均有一個優(yōu)先級。RTOS根據(jù)各個任務(wù)的優(yōu)先級,動態(tài)地切換各個任務(wù),保證對實時性的要求。 對于前后臺系統(tǒng),任務(wù)是順序運行的,是一種過程性編程,比較容易實現(xiàn);但對于RTOS,任務(wù)是以分時方式運行的,看上去好像是多個任務(wù)“同時”運行。基于RTOS編程,需要掌握任務(wù)的分配方法以及如何在任務(wù)間進行通信與同步。本文提出的面向?qū)ο蟮木幊谭椒ň褪且环N行之有效的方法。 1Small RTOS51簡介 Small RTOS51是在周立功網(wǎng)站上發(fā)布的一款源代碼公開的,針對51單片機小RAM系統(tǒng)設(shè)計的占先式實時操作系統(tǒng),可以說是μC/OSII的簡化版。基于Small RTOS51的任務(wù)之間的通信與同步可用圖1、圖2來描述。 其中: (a) 信號量——(1)作為任務(wù)之間的互斥方法,(2)同步方法,(3)作為計數(shù)器。 圖1信號量管理示意(b) 消息隊列——用于任務(wù)之間傳遞多個數(shù)據(jù)。 2電子短跑測試儀簡介 電子短跑測試儀是電子體能測試儀的一部分,它的功能描述如下: ① 基于IC卡進行身份識別和數(shù)據(jù)采集的測試儀,起點與終點間采用無線電進行數(shù)據(jù)傳輸。 ② 人機接口部分有8個數(shù)碼管(主畫面顯示),2個發(fā)光二極管(電池欠壓指示與測試狀態(tài)指示),4個按鍵(自檢、查詢、測試),1個蜂鳴器(信號提示),1個IC卡插槽(識別SLE4442測試卡和Atmel 24C64數(shù)據(jù)匯總卡)。 ③ 完整的測試步驟——將測試卡插入IC卡插槽內(nèi),數(shù)碼管顯示學(xué)號,按測試鍵啟動測試,蜂鳴器模擬起跑信號,同時開始計時,直到收到終點線傳感器發(fā)來的無線電信號后結(jié)束測試。之后,分別在測試卡與機內(nèi)E2PROM中保存測試成績。 ④ E2PROM內(nèi)存儲的數(shù)據(jù)可以用數(shù)據(jù)匯總卡取出,在上位機管理軟件中作進一步處理。 3面向?qū)ο蟮木幊?br>步驟一: 發(fā)現(xiàn)對象 根據(jù)上述對電子短跑儀的描述和需求文檔,寫出所有 圖2消息隊列管理示意可作為候選類的名詞如下: 【IC卡】、【測試儀】、【數(shù)碼管】、【發(fā)光二極管】、【電源】、【按鍵】、【蜂鳴器】和【E2PROM】。 【IC卡】有兩種,雖然占用相同的I2C總線,但驅(qū)動程序不一樣,需要作為兩個對象。 【測試儀】可以把測試儀作為一個虛擬主控對象,用來管理所有的對象。這樣做的好處是具有很高的可復(fù)用性和很低的耦合度,但增加了管理的復(fù)雜性,不建議這樣做。 【按鍵】雖然有4個,但它們都是觸發(fā)不同功能的按鈕,并沒有什么內(nèi)在的不同,可以合并為一個對象。 其他的都可以分別作為一個對象。 步驟二: 識別責(zé)任 舉個例子,【蜂鳴器】的責(zé)任是打開蜂鳴器,設(shè)定鳴叫的頻率、鳴叫的時間,關(guān)閉蜂鳴器。其他的對象限于篇幅,不再詳述。 步驟三: 描述行為 實際上,現(xiàn)在要尋找系統(tǒng)提供的服務(wù),并通過為在系統(tǒng)中的對象分配工作來決定怎樣提供這些服務(wù)。在決定如何分配工作時,建議使用UML順序圖。 圖3測試程序UML順序圖圖4任務(wù)間通信示意圖舉個例子,當(dāng)按下【測試鍵】啟動測試后,過程如下:① 測試狀態(tài)燈亮; ② 延時3 s,若收到搶跑信號退出測試;表1 驅(qū)動方式〖〗對象〖〗備注使用任務(wù)〖〗8個數(shù)碼管,4個按鍵電源蜂鳴器2個發(fā)光二極管〖〗數(shù)碼管刷新,按鍵掃描, 需周期服務(wù)電池欠壓,充電管理,自動關(guān)機,需周期服務(wù)因調(diào)用頻率高,可作為一個任務(wù)來處理因調(diào)用頻率高,可作為一個任務(wù)來處理使用消息 隊列〖〗無線接收〖〗將接收到的數(shù)據(jù)送到消息隊列中使用 信號量〖〗E2PROM 24C256IC卡 24C64,4442〖〗共享資源,需要互斥; 為寫操作和讀操作分配不同的消息隊列 ③ 蜂鳴器模擬槍聲鳴叫;④ 啟動計時器,數(shù)碼管顯示測試時間;⑤ 收到結(jié)束信號后退出測試;⑥ 保存測試成績。順序圖如圖3所示。 步驟四: 為對象編寫驅(qū)動程序 ① 使用任務(wù)編寫驅(qū)動程序。有一些設(shè)備需要CPU周期為其服務(wù),典型的就是掃描顯示和掃描鍵盤?梢越o它們分配相應(yīng)的任務(wù),與用戶任務(wù)一起調(diào)度。 ② 使用消息隊列編寫驅(qū)動程序。有一些設(shè)備具有自己的中斷,典型的是串口輸出?梢岳孟㈥犃袑⒂脩羧蝿(wù)需要的服務(wù)通過消息隊列排隊、緩沖起來,利用中斷功能依次服務(wù)。 ③ 使用信號量編寫驅(qū)動程序。有一些設(shè)備既不需要CPU的周期服務(wù),又不具有自己的中斷,典型的是全局變量、模擬I2C總線等?梢岳眯盘柫康幕コ夤δ軐崿F(xiàn)對共享資源的保護。 步驟五: 任務(wù)分配及任務(wù)間通信 ① 任務(wù)的初次分配。把所有對象按驅(qū)動方式列成表格,初次分配得到4個基本任務(wù),如表1所列。 ② 任務(wù)的再次分配。如果系統(tǒng)比較復(fù)雜,需要在基本的任務(wù)上再擴展出一些任務(wù)。在本方案中,擴展了按鍵預(yù)處理任務(wù)、串口接收任務(wù)、顯示管理任務(wù)。在按鍵預(yù)處理任務(wù)中,增加了對按鍵去抖,組合鍵,連擊鍵的支持,鍵命令解釋等;在串口接收任務(wù)中,增加了對通信協(xié)議的處理;在顯示管理任務(wù)中,實現(xiàn)了對主畫面顯示,錯誤提示,查詢界面等管理。 ③ 任務(wù)間的通信。經(jīng)過以上的多步分析,得到任務(wù)分配及通信示意圖,如圖4所示。 在圖4的基礎(chǔ)上,就可以根據(jù)具體的RTOS比較方便地進行軟件的開發(fā)了。 結(jié)語 基于RTOS編程雖然增加了系統(tǒng)硬件開銷,但隨著現(xiàn)代半導(dǎo)體工藝的迅速發(fā)展,使得硬件的性能在不斷地提升而成本在不斷地下降。這就意味著作為一個嵌入式系統(tǒng)工程師,需要關(guān)注更多的是軟件開發(fā)。面向?qū)ο箝_發(fā)具有減少費用、開發(fā)產(chǎn)品所需時間短的優(yōu)勢,并在開發(fā)過程中具有靈活性。 參考文獻 1陳明計,周立功. 嵌入式實時操作系統(tǒng)Small RTOS51原理及應(yīng)用. 北京:北京航空航天大學(xué)出版社,2004 2Labrosse Jean J. 嵌入式實時操作系統(tǒng)μC/OSII. 北京:北京航空航天大學(xué)出版社,2003 3Richard C. Lee William M. Tepfenhart C++面向?qū)ο箝_發(fā). 北京:機械工業(yè)出版社,2002 |