
第l6卷。第 期
2006年8月
計算機技術與發展
COM UIER TEa 10LDGY AND DEVELoPM匱Nr
V01.16 No.8
Aug.2006
嵌入式操作系統ttC/OS的運行機制
石世光 ,陳云洽2,葉奇明3
(1.電子科技大學中山學院計算機工程系,廣東中山528403;
2,中山大學電子與通信系,廣東廣州510275;
3.茂名學院師范學院計算機系,廣東茂名525000)
摘要:目前對嵌入系統的引入和應用,已越來越成為廣大科研人員關心的問題。而嵌入式操作系統是嵌入系統應用的核
心,文中主要探討了源代碼開放的嵌入式操作系統 ̄C/OS的內核運行機制。首先分析任務塊的基本結構,然后闡述了任
務管理的實現過程,最后著重討論了任務啟動過程以及在兩種不同情況下的任務切換工作原理,為嵌入式系統開發應用提
供指導作用。
關鍵詞:嵌入式操作系統; ̄tC/OS;運行機制;任務
中圖分類號:TP316.2 文獻標識碼:A 文章編號:1673—629X(2006)08—0085—03
Operation Mechanism of Embedded Operating System I ̄C/OS
SHI Shi—guang ,CHEN Yun.qia2
,YE Qi—miI1g3
(1.Dept.ofComputerEng.,ZhougshanCoil.ofUniv.ofElectronic Sci.andTech.ofChina,Zhongshan 528403,China;
2.Dept.of Electronics and Communication Eng.,Zhongshan Univ.,Guangzhou 510275,China;
3.Dept.of Computer Eng.,Teachers School of Maoming Coil.,Maoming 525000,China)
Al ̄raet:Nowadays it has alreadybecome anoticeable problemformany scientific researcherstoilltroduceand applythe embeddedoperat.
ing system.Andthe embeddedoperating systemisthe coreofthe embedded application.Operatic ̄mechanismofthe emmeddedoperating
system ̄c/os is mainly described in this paper.Firstly,analyses the fundanm ̄tal stI'lJcture of task control block.Secondly。expatiates on
the realization of task l'p.Rrlage ̄qaerlt.Fhaally,dieusses the process of task stan and both of the task—switch’s operation prir ̄ple in detail.
Thereforeitwill providegoodhelpforthe researcher oftheembeddedoperating system.
Keywords:embedded operating system;,uC/OS;operationmechanism;task
O引 言
當前的嵌入式操作系統層出不窮,而且它們以其各自
不同的特色廣泛分布于通信、航空航天、汽車、醫療、電子
消費等不同的領域。它們性能卓越、功能完備、技術成熟、
服務周全,通過使用這樣的操作系統,可以大大縮短產品
的開發周期,降低開發成本,同時產品的品質也能夠大大
提升。對于一名從事嵌入式系統開發的研究人員或工程
師來說,了解并熟悉嵌入式操作系統是最基本的。
1使用 ̄C/OS操作系統的目的
t ̄C/OS是專門為中低端嵌入式應用設計的可剝奪型
實時操作系統內核,主體用標準的ANSI C語言寫成,可
移植性極好。目前已被成功地移植到MCU,DSP,CPU
上,包括8位、16位、32位及64位。它包括了一個操作系
統最基本的一些特性,如任務調度、任務通信、內存管理、
收稿日期:2006一O3—14
作者簡介:石世光(1974一),男,湖北大冶人,助教,研究方向為嵌入
式系統開發。
中斷管理等,而且代碼完全開放、結構簡單明了、代碼風格
嚴謹,非常適合初涉嵌入式操作系統的人士學習,它可以
讓人們以最快的速度來了解操作系統的概念、結構和模塊
工作原理,并由淺人深逐步推廣到商用操作系統上。同時
對于那些對操作系統感興趣的愛好者來說,t ̄C/OS的淺
顯易懂,給人們提供了一個很好的研究標本,這就是要學
習t ̄C/OS的一個很重要的原因。
 ̄C/OS在高校教學使用是不需要申請許可證的,只
有將 ̄C/OS的目標代碼嵌入到商業產品中,才需要購買
銷售許可證。自1992年以來,I ̄C/OS已經被應用到數以
百計的產品中,性能完全可以與商業產品相媲美,而且通
過了美國聯邦航空局(FAA)商用航行器認證,其性能優良
穩定并且免費,這是要學習t ̄C/OS的另一個很重要的原
因【lj。
2 /O8內核運行的機制
簡單地講, C/C6內核運行機制的基本思路是:近似
地讓最高優先級的就緒任務處于運行狀態。下面就詳細
談談其工作的實現機制。
維普資訊
?86? 計算機技術與發展 第16卷
2.1任務控制塊基本結構
Struct Os—TCB{
Os—STK* stkP廿;//一個指向當前任務棧頂的指
針;
struct os—tcb*C ̄'I'CBNext:
struct os—tcb*OSTl2Bprev;//c ̄'rCBNext和( ̄"rCBPrev
用于任務控制塊的雙重鏈接;
INT16U OSTCBI)Iy;//用于任務延時或超時限制,每中斷
一次減一,為0表示任務準備就緒;
INT8U( ̄"rcBStat;//任務的狀態字,0表示就緒態;
INT8U ?。茫拢?o;//任務的優先級,值越小,優先級越高。
INT8U OSTCBX,OSTCBY,( ̄'TCBBitX,OSTCBBitY;//用
于加速任務進入就緒態的過程或進入等待事件發生狀態的過
程。
l[2]
從上述結構可以看到,每一個任務都建立相應的任務
控制塊0S—TCB( k Control Block),任務控制塊的開
頭,即OS—TCB的0偏址內存單元中存放任務堆棧指針
0s1 StkPtr,指向任務堆棧;通過雙向鏈表CNIL ̄Next
和0 Prev將不同的任務控制塊0s—TCB連起來,任
務控制塊還包括任務延時、狀態、優先級等信息。
系統初始化時,將根據任務的多少來建立任務控制塊
鏈表。任務創建函數分配的一塊內存,建立任務堆棧,用
來保存寄存器的值和該任務的代碼地址;再把堆棧的地址
存人任務控制塊,從而把任務程序代碼、任務堆棧和任務
控制塊聯系在一起。操作系統內核可以通過任務控制塊
找到任務堆棧,從堆棧中取得任務代碼_3 J。
2.2任務管理的實現
任務管理主要是通過對任務控制塊(TCB)的管理來
實現的。當一個任務建立時,I ̄C/OS系統為其所對應的
OS—TCB賦值;當任務的CPU使用權被剝奪時,系統用
OS—TCB來保存該任務的狀態;當任務重新得到CPU使
用權時,系統就可通過任務控制塊來使任務從被中斷處繼
續執行下去。
每個任務都被分配一個任務控制塊TCB,按照任務
優先級的次序將各個任務TCB的指針放人任務優先級表
數組中,這樣通過該數組就可訪問各個任務。
同時有一個TCB指針a汀 lc1 r指向當前任務的
TCB,另有一個TCB指針O ̄HighRdy指向具有更高
優先級的并且將要執行任務的TCB,如果兩者任務優先
級不等說明要進行任務切換,完成了任務切換后,CPU就
開始運行更高優先級任務。
2.3任務啟動過程
使就緒狀態的任務開始運行的函數叫做oggt ̄t()。
在調用OSStart()之前,必須至少已經建立了自己的一個
任務。前面談到過,由于操作系統是按照“比較任務優先
級,找到高優先級任務,然后再使之運行”的思路來啟動任
務的,所以就有了任務就緒表和優先級判定表。就緒表中
有兩個變量(OSRdyGrp和OSRdyTbl[])用來存放每個任
務的就緒標志,通過分組與優先級表中的項實現一一對
應,進而確定進入就緒態的優先級最高的任務。任務啟動
過程如圖1所示。
是
開 始
內核是否啟動
利用0SUnMapTbl表找到準備
就緒任務中最高優先級
根據任務優先級表找到該任務
調用函數OsstartHighRdy()
讓優先最高的任務運行起來
結 束
圖l ̄tart()的流程
2.4任務切換原理
任務切換指保存當前任務的上下文,并恢復需要執行
任務的上下文的過程。當發生任務切換時,當前正在運行
的任務的上下文就需要通過該任務的任務控制塊保存起
來,并把需要投入運行的任務的上下文從對應的任務控制
塊中恢復出來_4 J。
任務的切換有兩種情況:一種是任務級切換,另一種
是中斷級切換。
所謂任務級切換,即當前任務運行完畢,下一個準備
就緒的最高級優先任務進行任務切換。
1)任務級切換的大致流程如下:
◇當前任務完成;
O ̄hed()任務調度,選出高優先級就緒任務;
◇0S—Task—Sw()任務切換;
◇運行高優先級任務。
其中OS—Task—Sw()的工作過程比較簡單:
(1)保存寄存器值人當前任務堆棧;
(2)修改當前任務控制塊指針OS'IL-'BGar和當前任務
優先級OSProCur,指向就緒任務;
(3)恢復就緒任務堆棧中的值到寄存器中,完成切換。
而CtSSched()用于任務調度,其流程如圖2所示_5_5。
2)中斷級切換,即是在中斷程序處理事務過程中,可
能有一些任務運行就緒,重新整理和搜索任務就緒表,找
到最高優先級任務進行切換。
中斷級切換的大致流程: ’
◇調用函數OSTicklSR(),完成中斷入口工作;
◇調用OSIntExit()選出高優先級就緒任務;
◇利用OSIntCtxSw()完成任務切換;
◇運行高優先級任務。
維普資訊
第8期 石世光等:嵌入式操作系統vc/c ̄s的運行機制 ?87?
否
圖2 0SSched()函數流程
對于定時中斷函數OSTickISR(),它主要負責中斷進
入時保存處理器寄存器內容,完成任務切換退出時恢復處
理器寄存器內容并返回,相當于中斷服務程序的入口。
中斷級的上下文切換是OSIntExit()通過調用OS—
IntCtxSw()來執行切換功能。下面重點談談OSIntExit()
函數過程。與任務級切換不同的是中斷級切換時,中斷返
回函數將決定是返回到被中斷的任務,還是讓優先級最高
任務運行。其流程如圖3所示。
3結束語
以上是一些經驗與體會,筆者曾在研制電力諧波檢測
儀的項目中,根據嵌入式操作系練/ ̄C/OS的內核運行機
制原理,在TI EXSP F2407芯片上移植取得很好的效果。
現在網站上有很多關于各種類型芯片的移植程序,但不僅
要知其然,更要知其所以然,才能做到舉一反三、靈活運
用,所以有必要掌握 C/0S內核的運行基本原理,從而能
深入理解移植程序,達到了解嵌入式操作系統原理的目
的,為從事各種嵌入式操作系統的研究打下堅實的基礎。
保存CPU各寄存器
調用OSlmtEnter0函數或中斷嵌套計數器
直接使OSlntNesting加l,記錄嵌套層敦
執行中斷服務程序
嵌套層披減一
嵌套層數是否為0
—、
_
—,
是否有高優先級
任務就緒
\/
是
否
返回斷
點處
返回斷
點處
圖3中斷返回函數流程
參考文獻:
[1]邵貝貝. 源碼公開的實時嵌入式操作系統[M].北
京:中國電力出版社,2001.
[2]崔樹林.嵌入式系統通用的應用軟件結構研究[J].單片機
與嵌入式系統應用,2003(8):9—1O.
[3]王勁松.嵌入式操作系統uc/os的內核實現[J].現代電子
技術,20o3(8):48—49.
[4]羅蕾.嵌入式實時操作系統及應用開發[M]、北京:北京
航空航天出版社,2005.
[5]王克星.實時多任務操作系統的開發與應用[J].計算機工
程與應用,2003(5):132—134.
(上接第84頁)
3小結
決策樹的建立可以使數據規則可視化,結構清晰,所
以在對知識的分類中常常用決策樹表示。利用典型ID3
算法構造決策樹,按照信息增益最大的原則,相對抽象,計
算繁瑣;利用粗集近似精度選擇根結點時計算簡單,而且
分類可以使決策樹和粗集更容易理解。
參考文獻:
[1]朱明.數據挖掘[M].合肥:中國科學技術大學出版社,
20o2.
[2]Quinlan J R.Induction of decision trees[J].Machine Learn—
ing,1986(1)-81—106. 、
[3]王靜紅,王熙照,邵艷華,等.決策樹算法的研究及優化[J].
微機發展,2004,14(9):30—32.
[4]尹阿東,郭秀穎,宮雨,等.增量決策樹算法研究[J].微機
發展,2005,15(2):63—66. ,
【5]曾黃麟.粗糙集理論及其應用[M].重慶:重慶大學出版社,
1998.
[6]董祥軍,宋瀚濤,姜合,等.時態關聯規則的研究[J].計
算機工程,2005,15:24—26、
維普資訊
本文發布于:2023-03-11 08:13:21,感謝您對本站的認可!
本文鏈接:http://www.newhan.cn/zhishi/a/1678493602136445.html
版權聲明:本站內容均來自互聯網,僅供演示用,請勿用于商業和其他非法用途。如果侵犯了您的權益請與我們聯系,我們將在24小時內刪除。
本文word下載地址:EPFR.doc
本文 PDF 下載地址:EPFR.pdf
| 留言與評論(共有 0 條評論) |