版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、基于ARM的嵌入式系統(tǒng)設(shè)計(jì) uC/OS-介紹1主要內(nèi)容uC/OS歷史內(nèi)核結(jié)構(gòu)-任務(wù)以及調(diào)度機(jī)制uC/OS的移植2什么是uC/OSu: Micro C:controluC/OS : 適合于小型控制系統(tǒng)的操作系統(tǒng)小巧實(shí)時(shí)性強(qiáng)可移植性強(qiáng)3uC/OS歷史作者Jean J. Labrosse利用業(yè)余時(shí)間完成最初的一篇介紹文章在Embedded System Programming1992年5月到6月期上連載,這是內(nèi)核源代碼的首次曝光。1993年實(shí)時(shí)內(nèi)核uC/OS出版4uC/OS 歷史uC/OS-II是一種基于優(yōu)先級(jí)的可搶先的硬實(shí)時(shí)內(nèi)核。目前已經(jīng)被移植到多種不同結(jié)構(gòu)的CPU上,運(yùn)行在從位到位的各種系統(tǒng)之上
2、。通過(guò)了美國(guó)FAA認(rèn)證,可以運(yùn)行在諸如航天器等對(duì)安全要求極為苛刻的系統(tǒng)之上。5主要內(nèi)容uC/OS歷史內(nèi)核結(jié)構(gòu)-任務(wù)以及調(diào)度機(jī)制uC/OS的移植6任務(wù)同一時(shí)刻只有一個(gè)任務(wù)在運(yùn)行每個(gè)任務(wù)被賦予一定的優(yōu)先級(jí)每個(gè)任務(wù)都有自己的一套CPU寄存器和自己的??臻g。 任務(wù)控制塊 7任務(wù)void mytask(void *pdata) for (;) do something;waiting;do something; 8任務(wù)9任務(wù)的數(shù)據(jù)結(jié)構(gòu)任務(wù)控制塊任務(wù)控制塊 OS_tcb,包括任務(wù)堆棧指針,狀態(tài),優(yōu)先級(jí),任務(wù)表位置,任務(wù)鏈表指針等。所有的任務(wù)控制塊,放在任務(wù)控制塊數(shù)組中,并且連接成鏈表。OSTCBFreeL
3、istTCB0TCB1TCBn新任務(wù)TCB(1)空(2)(3)prenext圖 4.3 TCB的雙向鏈表結(jié)構(gòu)10任務(wù)的狀態(tài)休眠態(tài)就緒態(tài)運(yùn)行態(tài)掛起態(tài)被中斷態(tài)1112任務(wù)調(diào)度uC/OS是占先式實(shí)時(shí)多任務(wù)內(nèi)核,優(yōu)先級(jí)最高的任務(wù)一旦準(zhǔn)備就緒,則擁有CPU的所有權(quán)開(kāi)始投入運(yùn)行。uC/OS中不支持時(shí)間片輪轉(zhuǎn)法,每個(gè)任務(wù)的優(yōu)先級(jí)要求不一樣且是唯一的,所以任務(wù)調(diào)度的工作就是:查找準(zhǔn)備就緒的最高優(yōu)先級(jí)的任務(wù)并進(jìn)行上下文切換。13任務(wù)就緒表14任務(wù)就緒根據(jù)優(yōu)先級(jí)確定就緒表 假設(shè)優(yōu)先級(jí)為12的任務(wù)進(jìn)入就緒狀態(tài),12=1 100b,則 OSRdyTbl1的第4位置1,且OSRdyGrp的第1位置1,相應(yīng)的 數(shù)學(xué)表達(dá)式
4、為: OSRdyGrp |=0 x02; OSRdyTbl1 |=0 x10;而優(yōu)先級(jí)為21的任務(wù)就緒21=10 101b,則OSRdyTbl2的第5位置1,且OSRdyGrp的第2位置1,相應(yīng)的數(shù)學(xué)表達(dá)式為: OSRdyGrp |=0 x04; OSRdyTbl2 |=0 x20;15任務(wù)就緒從上面的計(jì)算我們可以得到:若第n位置1,則應(yīng)該與2n 相或。uC/OS中,把2n的n=0-7的8個(gè)值 先計(jì)算好存在數(shù)組OSMapTbl7中,也就是: OSMapTbl0 =20=0 x1; OSMapTbl1 =21=0 x2; OSMapTbl7 =27=0 x80;16任務(wù)就緒利用OSMapTbl,
5、通過(guò)任務(wù)的識(shí)別號(hào)-優(yōu)先級(jí)prio來(lái)設(shè)置任務(wù)在就緒組和就緒表數(shù)組中相應(yīng)位置的數(shù)學(xué)式為:OSRdyGrp |=OSMapTblprio3;OSRdyTblprio3 |=OSMapTblprio & 0 x07;假設(shè)優(yōu)先級(jí)為12,1 100bOSRdyGrp |=0 x02;OSRdyTbl1 |=0 x10;17確定最高優(yōu)先級(jí)任務(wù)兩個(gè)關(guān)鍵:優(yōu)先級(jí)數(shù)分解為高三位和低三位分別確定;高優(yōu)先級(jí)有著小的優(yōu)先級(jí)號(hào) ;18確定最高優(yōu)先級(jí)任務(wù)通過(guò)OSRdyGrp值確定高3位,假設(shè)為0 x24=100 100b, - OSRdyTbl2 和OSRdyTbl5,高優(yōu)先級(jí)為2通過(guò)OSRdyTbl2的值來(lái)確定低3位,
6、假設(shè)為0 x12=010 010b ,-第2個(gè)和第5個(gè)任務(wù),取高優(yōu)先級(jí)第2個(gè)-1719確定最高優(yōu)先級(jí)任務(wù)查表法具有確定的時(shí)間,增加了系統(tǒng)的可預(yù)測(cè)性,uC/OS中所有的系統(tǒng)調(diào)用時(shí)間都是確定的High3 =OSUnMapTblOSRdyGrp;Low3 =OSUnMapTblOSRdyTblHigh3;Prio =(Hign33)+Low3;20查表INT8U const OSUnMapTbl = 0, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 5, 0,
7、 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 6, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 7, 0, 1, 0, 2, 0,
8、 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 6, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 5, 0, 1, 0, 2, 0, 1, 0, 3, 0,
9、 1, 0, 2, 0, 1, 0, 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0;21內(nèi)核運(yùn)行機(jī)制時(shí)間任務(wù)一任務(wù)二OSStartTime Tick Time Tick 12550Time Tick 空閑任務(wù)22操作系統(tǒng)的運(yùn)行void main() sysinit(); OSInit (); OSTaskCreate ( Task1, (void *)&Task1Data, (void *)&Task1StkTASK_STK_SIZE,Task1prio); OSTaskCreate (Task2, (void *)&Task2Data, (vo
10、id *)&Task2StkTASK_STK_SIZE,Task2prio); ticker_start(OS_TICKS_PER_SEC); OSStart();23操作系統(tǒng)的運(yùn)行void OSStart (void) INT8U y, x; if (OSRunning = FALSE) 判斷是否沒(méi)有啟動(dòng)內(nèi)核 y = OSUnMapTblOSRdyGrp; x = OSUnMapTblOSRdyTbly; OSPrioHighRdy = (INT8U)(y 3) + x); 找到優(yōu)先級(jí)最高的準(zhǔn)備就緒任務(wù) OSPrioCur = OSPrioHighRdy; 當(dāng)前運(yùn)行任務(wù)優(yōu)先級(jí) OSTCBHighRdy = OSTCBPrioTblOSPrioHighRdy; 根據(jù)任務(wù)優(yōu)先級(jí)找到任務(wù) OSTCBCur = OSTCBHighRdy; OSStartHighRdy(); 讓優(yōu)先級(jí)最高的任務(wù)運(yùn)行起來(lái)24OSStartHighRdy: 把OSRunning設(shè)為1 lir0,1lisr11,OSRunninghastbr0,OSRunningl(r11)獲取準(zhǔn)備運(yùn)行的任務(wù)TCB指針lisr11,OSTCBHighR
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- CCAA - 2023年01月環(huán)境管理體系基礎(chǔ)答案及解析 - 詳解版(65題)
- 養(yǎng)老院老人臨終關(guān)懷服務(wù)制度
- 企業(yè)員工培訓(xùn)與素質(zhì)拓展制度
- 老年終末期患者跌倒預(yù)防環(huán)境改造的循證實(shí)踐培訓(xùn)方案
- 保障智能助手用戶數(shù)據(jù)的安全政策
- 2025年內(nèi)蒙古通遼經(jīng)濟(jì)技術(shù)開(kāi)發(fā)區(qū)社區(qū)工作者招聘筆試真題
- 2025年山西省煙草專賣局(公司)真題
- 2025年龍巖市中醫(yī)院招聘專業(yè)技術(shù)考試真題
- 2025年福建省能源石化集團(tuán)有限責(zé)任公司招聘考試真題
- 線性代數(shù)02198自考真題模擬試題及答案
- 大體積混凝土施工裂縫防治技術(shù)研究
- 電力行業(yè)物資管理部崗位職責(zé)
- 感染性心內(nèi)膜炎護(hù)理查房
- 導(dǎo)管相關(guān)皮膚損傷患者的護(hù)理 2
- 審計(jì)數(shù)據(jù)管理辦法
- 建筑設(shè)計(jì)防火規(guī)范-實(shí)施指南
- 口腔修復(fù)臨床病例
- 乙狀結(jié)腸冗長(zhǎng)護(hù)理查房
- 2025年廣西中考英語(yǔ)試卷真題(含答案解析)+聽(tīng)力音頻
- 短文魯迅閱讀題目及答案
- DB34T 5137-2025電化學(xué)儲(chǔ)能液冷系統(tǒng)設(shè)計(jì)技術(shù)要求
評(píng)論
0/150
提交評(píng)論