《電子技術應用》
您所在的位置:首頁 > 嵌入式技術 > 業(yè)界動態(tài) > μC/OS-II在總線式數據采集系統(tǒng)中的應用

μC/OS-II在總線式數據采集系統(tǒng)中的應用

2009-01-16
作者:張興國 徐筱麟

??? 摘? 要: 介紹源代碼開放的μC/OS-II實時操作系統(tǒng),以及基于此技術的總線式數據采集系統(tǒng),討論了μC/OS-II在實際開發(fā)應用中應注意的幾個問題,并通過實例論述實時操作系統(tǒng)在單片機系統(tǒng)應用開發(fā)的廣闊前景。?

????關鍵詞: 實時操作系統(tǒng)? μC/OS-II? 前后臺系統(tǒng)? 總線式? 移植

?

??? μC/OS-II是一個源代碼開放的實時操作系統(tǒng),可移植、可固化(嵌入到產品中成為產品的一部分)、可裁減,屬于占先式實時內核。執(zhí)行時間可確定(即函數調用與服務的時間是可知的,不依賴于應用程序的多少),支持現有大多數型號的8位、16位、32位MCU/MPU,已被廣泛應用于交換機、路由器、過程控制、汽車業(yè)、辦公自動化、計算機外設以及民用消費類產品等,具有穩(wěn)定的可靠性。把μC/OS-II應用在總線式數據采集系統(tǒng)中,可使該系統(tǒng)比以往的前后臺系統(tǒng)能夠更加穩(wěn)定地工作,而且在一定程度上滿足了監(jiān)控測量實時性的需求。?

1 總線式數據采集系統(tǒng)的組成與功能?

??? 隨著社會信息化程度的提高,人們對重要工業(yè)及生活設施智能化監(jiān)控的要求也越來越高。應這種需求,設計了這套總線式數據采集系統(tǒng)。該系統(tǒng)采用總線巡檢方式,對監(jiān)測對象進行數據采集與處理,系統(tǒng)硬件以模塊化結構,實現32/64/128路模擬或數字量的集中監(jiān)測,適用于各種標準現場一次儀表或二次儀表數據測量與控制。整機采用先進的微機處理技術和通信控制技術,并嵌入實時處理內核,智能化程度較高,工作性能更加穩(wěn)定,測量精度高,通用性強。?

1.1 系統(tǒng)組成?

??? 該系統(tǒng)的硬件組成如圖1所示。?

?

?

??? 現場監(jiān)測通道狀態(tài)以總線方式,通過總線處理單元傳送到中央控制單元進行數據采集與處理,其中MCU采用具有10位A/D轉換器的80C196KB。?

1.2 系統(tǒng)功能?

??? 該系統(tǒng)可以對各通道的工作參數、狀態(tài)進行即時修改設定,并可以通過面板LED實時顯示32/64/128路通道的工作狀態(tài),同時各通道的實時參數通過LCD進行逐屏顯示。對發(fā)生報警的信道可以通過打印處理單元進行打印輸出、聲光報警及顯示。該系統(tǒng)采用總線巡檢方式,對各信道工作狀態(tài)進行遠程數據采集并進行集中數據處理。為進一步滿足智能化管理的需要,具有和計算機通信的功能,可以實現監(jiān)測數據的共享。同時,也可以通過計算機對各信道的工作狀態(tài)進行設置,進一步增強了該系統(tǒng)的智能化管理能力。?

2 μC/OS-II在系統(tǒng)中的應用?

??? 該系統(tǒng)若采用以往的前后臺式工作方式,即后臺為主應用程序,前臺為中斷處理程序;通常情況下執(zhí)行主程序,若有中斷發(fā)生時,則轉向前臺處理中斷服務程序。前臺需要處理定時顯示系統(tǒng)信息子程序,或按鍵中斷處理子程序,然后根據中斷程序中所置的狀態(tài)標志,由主程序判斷其狀態(tài)標志后再進入相應的子程序,也就是主程序采用狀態(tài)查詢方式進行工作。這樣在一定程度上不能保證整個系統(tǒng)測量的實時性。因為主程序在執(zhí)行其它程序時,不可能隨時去檢測這些狀態(tài)標志,尤其是處理多信道A/D采樣計算時,耗時較多。當工作的信道增加或減少時,這種現象則表現得尤為明顯,而且難以實現并行操作的相互通信。在主程序的各個子模塊中,有需要橫向通信聯(lián)系交換信息的,這在一般的前后臺系統(tǒng)中是很困難的,且存在系統(tǒng)不穩(wěn)定的隱患。實時內核兼具實時多任務性和穩(wěn)定性,因此考慮采用實時內核。μC/OS-II是一個源碼開放的實時內核,且又有許多成功的先例可供參考,可針對不同的MCU/MPU,通過條件編譯裁減其內核的大小,以滿足系統(tǒng)要求。μC/OS-II是占先式內核,總是運行就緒條件下優(yōu)先級最高的任務。最大可以管理64個任務,其中保留8個給系統(tǒng),故應用程序最多可以有56個任務。鑒于許多成功先例和系統(tǒng)成本,采用了80C196KB作為系統(tǒng)的MCU。通過實驗,基本滿足了系統(tǒng)所要求的實時性。?

2.1 開發(fā)實時內核的流程?

??? 開發(fā)實時內核的流程如圖2所示。

?

?

2.2 內核的移植?

??? 內核的移植也就是使實時內核能夠在某個微處理器或微控制器上正常運行。移植工作包括以下幾個內容:?

??? (1)在OS_CPU.H中用#define定義三個宏,聲明C96中能夠識別的數據類型和堆棧的增長方向。?

??? (2)在OS_CPU.C中用C語言重新編寫以下幾個函數:OSTaskStkInit、OSStartHighRdy、OSTaskCreateHook、OSTaskSwHook、OSTaskDelHook、OSTaskStatHook、OSTimeTickHook。?

??? (3)在OS_CPU.ASM中編寫幾個匯編語言函數LoadCtx()、OSCtxSw()、OSIntCtxSw()、OSTickISR()。?

2.3 實時內核在應用中應注意的問題

??? 一個實時系統(tǒng)的軟件由實時操作系統(tǒng)加上應用程序構成。應用程序與操作系統(tǒng)的接口通過系統(tǒng)調用來實現。用80C196KB作為系統(tǒng)的MCU,只能用內部RAM作為TCB和所有系統(tǒng)存儲器(含各種控制表)以及各個任務的工作和數據單元。因此一定要注意以下幾點:?

??? (1)為各個任務分配各自的堆棧區(qū),該堆棧區(qū)既作為任務的工作單元,也作為任務控制塊的保護單元。?

??? (2)系統(tǒng)的任務控制塊只存放各任務的堆棧指針,而任務的狀態(tài)均存放于任務堆棧中。在一個任務退出運行時,通過中斷把它的狀態(tài)進棧,然后把它的堆棧指針保存于系統(tǒng)的TCB中;再根據優(yōu)先級取出優(yōu)先級最高的已就緒任務的堆棧指針SP映象值送入SP中;最后執(zhí)行中斷返回指令轉去執(zhí)行新任務。?

??? (3)各任務的數據和工作單元盡量用堆棧實現,這樣可以允許各任務使用同一個子程序。使用堆棧實現參數傳遞并作為工作單元,而不使用絕對地址的RAM,可實現可重入子程序。該子程序既可為各個任務所調用,也可以實現遞歸調用。?

2.4 應用μC/OS-II實時內核的主要部分?

??? (1)任務的分配?

??? 實時系統(tǒng)中的任務有別于前后臺系統(tǒng)中的子程序模塊,任務是處理機按程序處理數據的過程,是個動態(tài)的概念。一般一個任務對應于一段獨立的主程序,它可能調用各種子程序,并使用各種系統(tǒng)資源如中斷、外設等,以完成某種選定的功能,且允許多個任務并行。根據該系統(tǒng)的性能指標和技術要求,可對系統(tǒng)進行如下的任務劃分:按鍵中斷、LCD顯示、串行通信、打印與報警、信道巡檢A/D采樣與數據處理、系統(tǒng)信息顯示、系統(tǒng)工作參數測量、電源切換與充電管理共八個任務。?

??? (2)任務的調度?

??? μC/OS-II的任務調度是按優(yōu)先級進行的,根據各任務的實時性要求及重要程度,分別置它們的優(yōu)先級為4、9、8、7、6、11、10、5。其中0、1、2、3、OS_LOWEST_PRIO-3、OS_LOWEST_PRIO-2、OS_LOWEST_PRIO-1、OS_LOWEST_PRIO這幾個優(yōu)先級保留以被系統(tǒng)使用。優(yōu)先級號越低,任務的優(yōu)先級越高。這樣程序之間的通信可以通過按鍵中斷置標志來實現,其中按鍵中斷的優(yōu)先級最高。當其它任務運行時,按鍵中斷將使得系統(tǒng)服務轉向運行按鍵中斷處理子程序ISR。當中斷處理子程序運行完后,轉向判斷就緒狀態(tài)任務的優(yōu)先級別。如果發(fā)現有比中斷前任務優(yōu)先級更高的任務,則轉向執(zhí)行該任務。先判斷其運行標志,如果是‘非’,則又等待。再重復上述過程。如果在執(zhí)行完ISR后發(fā)現沒有比中斷前任務優(yōu)先級更高的,則轉向中斷前的子程序繼續(xù)運行。該系統(tǒng)的軟件處理沒有采用優(yōu)先級轉換的方法,而是采用狀態(tài)置位判斷的方法,這樣可以減少程序的復雜性。?

??? (3)任務間的通信?

??? 任務間通信最簡便的方法是使用共享數據結構。雖然共享數據區(qū)法簡化了任務間的信息交換,但是必須保證每個任務在處理共享數據時的排它性,以避免競爭和數據的破壞。通常與共享資源打交道時,使之滿足互斥條件最一般的方法有以下幾種:?

??? ·關中斷;?

??? ·使用測試并置位;?

??? ·禁止任務切換;?

??? ·利用信號量。?

??? 在本系統(tǒng)中采用了前兩種。關中斷是一種最簡單快捷的方式,也是在中斷服務子程序中處理共享數據結構的唯一方法。要注意的是:關中斷的時間要盡量短,以免影響操作系統(tǒng)的中斷處理。其應用模式如下:?

??? void Function(void)?

??? {?

??? ??? OS_ENTER_CRITICAL();?

??? ??? ……??????? /*在此處理共享數據*/?

??? ??? OS_EXIT_CRITICAL();?

??? }?

??? 測試并置位方式需要有一個全局變量,約定好先測試該變量;如果是約定的數值,則執(zhí)行該任務,否則不執(zhí)行該任務。這種方法稱測試并置位(TEST-AND-SET),或TAS。其應用程序如下:?

??? Disable interrupts? ??? /*關中斷*/?

??? If? ('Access Variable' is? 0){?/*若資源不可用,標志為0*/?

????? ?? Set? variable? to? 1; /*置資源不可用,標志為1*/?

????? ?? Reenable? interrupts; /*重開中斷*/?

????? ?? Access?? the?? resource;?/*處理該資源*/?

???????? Disable?? interrupts; ? /*關中斷*/?

????? ?? Set?? the? 'Access? Variable'? back? to? 0;/*清資源不可使用,標志為0*/?

????? ?? Reenable? interrupts; ? /*重新開中斷*/?

??? }else?? {???????????? ????? /*否則*/?

????? ?? Reenable interrupts;? ? /*開中斷*/?

????????????????? ?????????????/*資源不可使用,以后再試*/?

??? }?

??? (4)時鐘節(jié)拍?

??? 時鐘節(jié)拍是特定的周期性中斷,根據本系統(tǒng)的性能指標,取1毫秒。時鐘的節(jié)拍式中斷使得內核可以將任務延時若干個整數時鐘節(jié)拍,以及當任務等待事件發(fā)生時,提供等待超時的依據。另外,系統(tǒng)信息的定時顯示需要系統(tǒng)每隔一定的時鐘節(jié)拍顯示一次。

??? (5)存儲空間的分配?

??? 為了減少操作系統(tǒng)的體積,只應用操作系統(tǒng)的任務調度、任務切換、信號量處理、延時及超時服務幾部分。這樣可使該操作系統(tǒng)的大小減小到3~5KB,再加上應用程序最大可達50KB左右。?

??? 因為每個任務都是獨立運行的,每個任務都具有自己的??臻g。這樣可以根據任務本身的需求(局部變量、函數調用、中斷嵌套等)來分配其RAM空間。?

3 系統(tǒng)運行的實時性分析?

??? 在該系統(tǒng)中應用μC/OS-II實時內核,一是增強了系統(tǒng)運行的穩(wěn)定性,更重要的是滿足了系統(tǒng)測量所需的實時性要求。系統(tǒng)采用12MHz晶振,一條指令的周期是1微秒。以下時間的統(tǒng)計是將C語言編譯為匯編語言后,根據其指令的多少而計算出來的。經統(tǒng)計如下:?

??? ·中斷管理:共需3毫秒;?

??? ·內存管理:共需800微秒;?

??? ·信號量管理:共約4.5毫秒; ?

??? ·任務管理:共需8毫秒;?

??? ·時鐘管理:共需約20毫秒;?

??? ·雜項:約需1毫秒。?

??? 上述時間均是最大運行時間的大概統(tǒng)計,也就是均考慮有任務切換情況下的時間統(tǒng)計結果。在整個內核的應用上對一些函數進行了裁減,沒有用的服務在預編譯時屏蔽掉了,因此未計入統(tǒng)計時間。?

??? 用戶定義函數:按鍵中斷處理15毫秒,LCD顯示一屏30毫秒,串行通信10毫秒,打印及聲光報警400毫秒,信道巡檢A/D采樣與數據處理20毫秒,系統(tǒng)信息顯示10毫秒,系統(tǒng)工作參數測量150毫秒,電源的切換與充電50毫秒??梢娤到y(tǒng)各任務中除打印所需時間較長外,其余任務所需時間都比較短。通過采用實時內核,在很大程度上保證了對信道掃描的定時性,即實時性要求。若采用前后臺編程,在查詢信道掃描的情況下,系統(tǒng)掃描信道的時間不能確定;隨著信道數的變化,信道掃描的定時性很難得到保證,各種顯示的定時性也比較差。?

??? 總之,隨著各種應用電子系統(tǒng)的復雜化和系統(tǒng)實時性需求的提高,并伴隨應用軟件朝著系統(tǒng)化方向發(fā)展的加速,μC/OS-II實時內核一定會得到更大的發(fā)展。因為它可以使產品更加穩(wěn)定可靠,開發(fā)過程更加規(guī)范,且縮短了開發(fā)周期。?

參考文獻?

1 (美) 拉伯羅斯著, 邵貝貝譯. μC/OS-II:源碼公開的實時嵌入式操作系統(tǒng). 北京:中國電力出版社,2001?

2 孫涵芳主編.? Intel 16 位單片機. 北京:北京航空航天大學出版社,1999?

3 張友德,涂時亮,陳章龍. M68H08系列單片機原理與應用.上海:復旦大學出版社,2001

本站內容除特別聲明的原創(chuàng)文章之外,轉載內容只為傳遞更多信息,并不代表本網站贊同其觀點。轉載的所有的文章、圖片、音/視頻文件等資料的版權歸版權所有權人所有。本站采用的非本站原創(chuàng)文章及圖片等內容無法一一聯(lián)系確認版權者。如涉及作品內容、版權和其它問題,請及時通過電子郵件或電話通知我們,以便迅速采取適當措施,避免給雙方造成不必要的經濟損失。聯(lián)系電話:010-82306118;郵箱:aet@chinaaet.com。