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

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

2009-01-16
作者:張興國(guó) 徐筱麟

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

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

?

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

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

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

1.1 系統(tǒng)組成?

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

?

?

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

1.2 系統(tǒng)功能?

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

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

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

2.1 開(kāi)發(fā)實(shí)時(shí)內(nèi)核的流程?

??? 開(kāi)發(fā)實(shí)時(shí)內(nèi)核的流程如圖2所示,。

?

?

2.2 內(nèi)核的移植?

??? 內(nèi)核的移植也就是使實(shí)時(shí)內(nèi)核能夠在某個(gè)微處理器或微控制器上正常運(yùn)行。移植工作包括以下幾個(gè)內(nèi)容:?

??? (1)在OS_CPU.H中用#define定義三個(gè)宏,聲明C96中能夠識(shí)別的數(shù)據(jù)類(lèi)型和堆棧的增長(zhǎng)方向,。?

??? (2)在OS_CPU.C中用C語(yǔ)言重新編寫(xiě)以下幾個(gè)函數(shù):OSTaskStkInit,、OSStartHighRdy、OSTaskCreateHook,、OSTaskSwHook,、OSTaskDelHook、OSTaskStatHook,、OSTimeTickHook,。?

??? (3)在OS_CPU.ASM中編寫(xiě)幾個(gè)匯編語(yǔ)言函數(shù)LoadCtx()、OSCtxSw(),、OSIntCtxSw(),、OSTickISR()。?

2.3 實(shí)時(shí)內(nèi)核在應(yīng)用中應(yīng)注意的問(wèn)題

??? 一個(gè)實(shí)時(shí)系統(tǒng)的軟件由實(shí)時(shí)操作系統(tǒng)加上應(yīng)用程序構(gòu)成,。應(yīng)用程序與操作系統(tǒng)的接口通過(guò)系統(tǒng)調(diào)用來(lái)實(shí)現(xiàn),。用80C196KB作為系統(tǒng)的MCU,只能用內(nèi)部RAM作為T(mén)CB和所有系統(tǒng)存儲(chǔ)器(含各種控制表)以及各個(gè)任務(wù)的工作和數(shù)據(jù)單元。因此一定要注意以下幾點(diǎn):?

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

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

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

2.4 應(yīng)用μC/OS-II實(shí)時(shí)內(nèi)核的主要部分?

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

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

??? (2)任務(wù)的調(diào)度?

??? μC/OS-II的任務(wù)調(diào)度是按優(yōu)先級(jí)進(jìn)行的,根據(jù)各任務(wù)的實(shí)時(shí)性要求及重要程度,分別置它們的優(yōu)先級(jí)為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這幾個(gè)優(yōu)先級(jí)保留以被系統(tǒng)使用,。優(yōu)先級(jí)號(hào)越低,任務(wù)的優(yōu)先級(jí)越高。這樣程序之間的通信可以通過(guò)按鍵中斷置標(biāo)志來(lái)實(shí)現(xiàn),其中按鍵中斷的優(yōu)先級(jí)最高,。當(dāng)其它任務(wù)運(yùn)行時(shí),按鍵中斷將使得系統(tǒng)服務(wù)轉(zhuǎn)向運(yùn)行按鍵中斷處理子程序ISR,。當(dāng)中斷處理子程序運(yùn)行完后,轉(zhuǎn)向判斷就緒狀態(tài)任務(wù)的優(yōu)先級(jí)別,。如果發(fā)現(xiàn)有比中斷前任務(wù)優(yōu)先級(jí)更高的任務(wù),則轉(zhuǎn)向執(zhí)行該任務(wù),。先判斷其運(yùn)行標(biāo)志,如果是‘非’,則又等待。再重復(fù)上述過(guò)程,。如果在執(zhí)行完ISR后發(fā)現(xiàn)沒(méi)有比中斷前任務(wù)優(yōu)先級(jí)更高的,則轉(zhuǎn)向中斷前的子程序繼續(xù)運(yùn)行,。該系統(tǒng)的軟件處理沒(méi)有采用優(yōu)先級(jí)轉(zhuǎn)換的方法,而是采用狀態(tài)置位判斷的方法,這樣可以減少程序的復(fù)雜性。?

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

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

??? ·關(guān)中斷;?

??? ·使用測(cè)試并置位;?

??? ·禁止任務(wù)切換;?

??? ·利用信號(hào)量。?

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

??? void Function(void)?

??? {?

??? ??? OS_ENTER_CRITICAL();?

??? ??? ……??????? /*在此處理共享數(shù)據(jù)*/?

??? ??? OS_EXIT_CRITICAL();?

??? }?

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

??? Disable interrupts? ??? /*關(guān)中斷*/?

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

????? ?? Set? variable? to? 1; /*置資源不可用,標(biāo)志為1*/?

????? ?? Reenable? interrupts; /*重開(kāi)中斷*/?

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

???????? Disable?? interrupts; ? /*關(guān)中斷*/?

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

????? ?? Reenable? interrupts; ? /*重新開(kāi)中斷*/?

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

????? ?? Reenable interrupts;? ? /*開(kāi)中斷*/?

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

??? }?

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

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

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

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

??? 因?yàn)槊總€(gè)任務(wù)都是獨(dú)立運(yùn)行的,每個(gè)任務(wù)都具有自己的??臻g,。這樣可以根據(jù)任務(wù)本身的需求(局部變量、函數(shù)調(diào)用,、中斷嵌套等)來(lái)分配其RAM空間,。?

3 系統(tǒng)運(yùn)行的實(shí)時(shí)性分析?

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

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

??? ·內(nèi)存管理:共需800微秒;?

??? ·信號(hào)量管理:共約4.5毫秒; ?

??? ·任務(wù)管理:共需8毫秒;?

??? ·時(shí)鐘管理:共需約20毫秒;?

??? ·雜項(xiàng):約需1毫秒。?

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

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

??? 總之,隨著各種應(yīng)用電子系統(tǒng)的復(fù)雜化和系統(tǒng)實(shí)時(shí)性需求的提高,并伴隨應(yīng)用軟件朝著系統(tǒng)化方向發(fā)展的加速,μC/OS-II實(shí)時(shí)內(nèi)核一定會(huì)得到更大的發(fā)展,。因?yàn)樗梢允巩a(chǎn)品更加穩(wěn)定可靠,開(kāi)發(fā)過(guò)程更加規(guī)范,且縮短了開(kāi)發(fā)周期。?

參考文獻(xiàn)?

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

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

3 張友德,涂時(shí)亮,陳章龍. M68H08系列單片機(jī)原理與應(yīng)用.上海:復(fù)旦大學(xué)出版社,2001

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