基于NIOS II的uC/OS系統(tǒng)的開發(fā)
1、uC/OSII簡介
本文引用地址:http://m.butianyuan.cn/article/201609/305167.htmu C / O S 是一種免費(fèi)公開源代碼、結(jié)構(gòu)小巧、具有可剝奪實(shí)時(shí)內(nèi)核的實(shí)時(shí)操作系統(tǒng)。
μC/OS-II 的前身是μC/OS,最早出自于1992 年美國嵌入式系統(tǒng)專家Jean J.Labrosse 在《嵌入式系統(tǒng)編程》雜志的5 月和6 月刊上刊登的文章連載,并把μC/OS 的源碼發(fā)布在該雜志的B B S 上。
μC/OS 和μC/OS-II 是專門為計(jì)算機(jī)的嵌入式應(yīng)用設(shè)計(jì)的, 絕大部分代碼是用C語言編寫的。CPU 硬件相關(guān)部分是用匯編語言編寫的、總量約200行的匯編語言部分被壓縮到最低限度,為的是便于移植到任何一種其它的CPU 上。用戶只要有標(biāo)準(zhǔn)的ANSI 的C交叉編譯器,有匯編器、連接器等軟件工具,就可以將μC/OS-II嵌人到開發(fā)的產(chǎn)品中。μC/OS-II 具有執(zhí)行效率高、占用空間小、實(shí)時(shí)性能優(yōu)良和可擴(kuò)展性強(qiáng)等特點(diǎn), 最小內(nèi)核可編譯至 2KB 。μC/OS-II 已經(jīng)移植到了幾乎所有知名的CPU 上。
嚴(yán)格地說uC/OS-II只是一個(gè)實(shí)時(shí)操作系統(tǒng)內(nèi)核,它僅僅包含了任務(wù)調(diào)度,任務(wù)管理,時(shí)間管理,內(nèi)存管理和任務(wù)間的通信和同步等基本功能。沒有提供輸入輸出管理,文件系統(tǒng),網(wǎng)絡(luò)等額外的服務(wù)。但由于uC/OS-II良好的可擴(kuò)展性和源碼開放,這些非必須的功能完全可以由用戶自己根據(jù)需要分別實(shí)現(xiàn)。
uC/OS-II目標(biāo)是實(shí)現(xiàn)一個(gè)基于優(yōu)先級調(diào)度的搶占式的實(shí)時(shí)內(nèi)核,并在這個(gè)內(nèi)核之上提供最基本的系統(tǒng)服務(wù),如信號量,郵箱,消息隊(duì)列,內(nèi)存管理,中斷管理等。
1.1任務(wù)管理
uC/OS-II 中最多可以支持64 個(gè)任務(wù),分別對應(yīng)優(yōu)先級0~63,其中0 為最高優(yōu)先級。63為最低級,系統(tǒng)保留了4個(gè)最高優(yōu)先級的任務(wù)和4個(gè)最低優(yōu)先級的任務(wù),所有用戶可以使用的任務(wù)數(shù)有56個(gè)。
uC/OS-II提供了任務(wù)管理的各種函數(shù)調(diào)用,包括創(chuàng)建任務(wù),刪除任務(wù),改變?nèi)蝿?wù)的優(yōu)先級,任務(wù)掛起和恢復(fù)等。
系統(tǒng)初始化時(shí)會自動產(chǎn)生兩個(gè)任務(wù):一個(gè)是空閑任務(wù),它的優(yōu)先級最低,該任務(wù)僅給一個(gè)整形變量做累加運(yùn)算;另一個(gè)是系統(tǒng)任務(wù),它的優(yōu)先級為次低,該任務(wù)負(fù)責(zé)統(tǒng)計(jì)當(dāng)前cpu的利用率。
1.2 時(shí)間管理
uC/OS-II的時(shí)間管理是通過定時(shí)中斷來實(shí)現(xiàn)的,該定時(shí)中斷一般為10毫秒或100毫秒發(fā)生一次,時(shí)間頻率取決于用戶對硬件系統(tǒng)的定時(shí)器編程來實(shí)現(xiàn)。中斷發(fā)生的時(shí)間間隔是固定不變的,該中斷也成為一個(gè)時(shí)鐘節(jié)拍。
uC/OS-II要求用戶在定時(shí)中斷的服務(wù)程序中,調(diào)用系統(tǒng)提供的與時(shí)鐘節(jié)拍相關(guān)的系統(tǒng)函數(shù),例如中斷級的任務(wù)切換函數(shù),系統(tǒng)時(shí)間函數(shù)。
1.3 內(nèi)存管理
在ANSI C中是使用malloc和free兩個(gè)函數(shù)來動態(tài)分配和釋放內(nèi)存。但在嵌入式實(shí)時(shí)系統(tǒng)中,多次這樣的操作會導(dǎo)致內(nèi)存碎片,且由于內(nèi)存管理算法的原因,malloc和free的執(zhí)行時(shí)間也是不確定。
uC/OS-II中把連續(xù)的大塊內(nèi)存按分區(qū)管理。每個(gè)分區(qū)中包含整數(shù)個(gè)大小相同的內(nèi)存塊,但不同分區(qū)之間的內(nèi)存快大小可以不同。用戶需要動態(tài)分配內(nèi)存時(shí),系統(tǒng)選擇一個(gè)適當(dāng)?shù)姆謪^(qū),按塊來分配內(nèi)存。釋放內(nèi)存時(shí)將該塊放回它以前所屬的分區(qū),這樣能有效解決碎片問題,同時(shí)執(zhí)行時(shí)間也是固定的。
1.4 任務(wù)間通信與同步
對一個(gè)多任務(wù)的操作系統(tǒng)來說,任務(wù)間的通信和同步是必不可少的。uC/OS-II中提供了4中同步對象,分別是信號量,郵箱,消息隊(duì)列和事件。所有這些同步對象都有創(chuàng)建,等待,發(fā)送,查詢的接口用于實(shí)現(xiàn)進(jìn)程間的通信和同步。
1.5 任務(wù)調(diào)度
uC/OS-II 采用的是可剝奪型實(shí)時(shí)多任務(wù)內(nèi)核??蓜儕Z型的實(shí)時(shí)內(nèi)核在任何時(shí)候都運(yùn)行就緒了的最高優(yōu)先級的任務(wù)。
uC/os-II的任務(wù)調(diào)度是完全基于任務(wù)優(yōu)先級的搶占式調(diào)度,也就是最高優(yōu)先級的任務(wù)一旦處于就緒狀態(tài),則立即搶占正在運(yùn)行的低優(yōu)先級任務(wù)的處理器資源。為了簡化系統(tǒng)設(shè)計(jì),uC/OS-II規(guī)定所有任務(wù)的優(yōu)先級不同,因?yàn)槿蝿?wù)的優(yōu)先級也同時(shí)唯一標(biāo)志了該任務(wù)本身。
uC/OS-II詳細(xì)用法可參考相關(guān)資料。
2、FPGA下的uC/OS-II
下面就介紹怎樣在以黑金開發(fā)板EP2C208上進(jìn)行uC/OSII實(shí)驗(yàn)。
第一步:添加一個(gè)用于系統(tǒng)時(shí)鐘節(jié)拍的定時(shí)器timer_ucos,定時(shí)時(shí)間為100ms(根據(jù)任務(wù)定)。
第二步:在Nios下設(shè)置相關(guān)選項(xiàng)。請看下面操作步驟。
打開Quart II工程,以黑金開發(fā)板EP2C208的工程為例,進(jìn)入SOPC Builder界面下如圖:
在左側(cè)的“System Contents”下單擊Peripherais的左側(cè)“
”;在彈出的菜單下單擊Microcotroller Peripherais的左側(cè)“
”;如下圖。
找到 “Interval Timer”并雙擊,彈出如下圖并按下圖進(jìn)行相關(guān)設(shè)置,單擊完成。
命名為timer_ucos;如下圖。
時(shí)鐘節(jié)拍定時(shí)器到此已添加完成,單擊Generate按鈕生成SOPC系統(tǒng)。
接下來對Quart II工程進(jìn)行編譯并把 “.pof”通過AS接口下接到EPCS中。至此Quart II工程工作完畢.。
評論