freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

嵌入式系統(tǒng)復(fù)習(xí)20xx新-在線瀏覽

2025-06-30 01:07本頁面
  

【正文】 務(wù)控制塊 OS_tcb,包括 任務(wù)堆棧指針,狀態(tài),優(yōu)先級,任務(wù)表位置,任務(wù)鏈表指針等。 OSTCBFreeList TCB0 TCB1 TCBn 新任務(wù) TCB (1) 空 (2) (3) pre next 圖 TCB的雙向鏈表結(jié)構(gòu) 136 任務(wù)控制塊結(jié)構(gòu) Struct os_tcb { OS_STK *OSTCBStkPtr。 struct os_tcb *OSTCBprev。 void *OSTCBMsg。 INT8U OSTCBStat。 INT8U OSTCBX, OSTCBY, OSTCBBitX, OSTCBBitY。 uC/OS中不支持時間片輪轉(zhuǎn)法,每個任務(wù)的優(yōu)先級要求不一樣且是唯一的,所以任務(wù)調(diào)度的工作就是:查找準(zhǔn)備就緒的最高優(yōu)先級的任務(wù)并進(jìn)行 上下文切換。由兩個變量組成: – OSRedyGrp: 8位,每位表示一組( 8個)任務(wù)中是否有就緒的任務(wù)。 141 就緒狀態(tài)標(biāo)志 Bit 0 in OSRdyGrp is 1 when any bit in OSRdyTbl[0] is 1. Bit 1 in OSRdyGrp is 1 when any bit in OSRdyTbl[1] is 1. Bit 2 in OSRdyGrp is 1 when any bit in OSRdyTbl[2] is 1. Bit 3 in OSRdyGrp is 1 when any bit in OSRdyTbl[3] is 1. Bit 4 in OSRdyGrp is 1 when any bit in OSRdyTbl[4] is 1. Bit 5 in OSRdyGrp is 1 when any bit in OSRdyTbl[5] is 1. Bit 6 in OSRdyGrp is 1 when any bit in OSRdyTbl[6] is 1. Bit 7 in OSRdyGrp is 1 when any bit in OSRdyTbl[7] is 1. 142 根據(jù)優(yōu)先級找到任務(wù)在就緒任務(wù)表中的位置 O SR dy Gr p12 07 6 5 4 300 XXXYY Y任務(wù)優(yōu)先級2 017 6 5 4 310 8915 14 13 12 1118 161723 22 21 20 1926 242531 30 29 28 2734 323339 38 37 36 3542 404147 46 45 44 4350 484955 54 53 52 5158 565763 62 61 60 59[ 0][ 1][ 2][ 3][ 4][ 5][ 6][ 7]O SR dy Tb l [7 ]XY優(yōu)先級最低任務(wù)(空閑任務(wù))優(yōu)先級最高任務(wù)任務(wù)優(yōu)先級號143 根據(jù)優(yōu)先級確定就緒表 假 設(shè) 優(yōu) 先 級 為 12 的 任 務(wù) 進(jìn) 入 就 緒 狀 態(tài) , 12=1 100b, 則OSRdyTbl[1]的第 4位置 1, 且 OSRdyGrp的第 1位置 1, 相應(yīng)的數(shù)學(xué)表達(dá)式為 : OSRdyGrp |=0x02; OSRdyTbl[1] |=0x10。 144 根據(jù)優(yōu)先級確定就緒表 從上面的計算我們可以得到 :若第 n位置 1, 則應(yīng)該與 2n 相或 。 OSMapTbl[1] =21=0x2。 145 根據(jù)優(yōu)先級確定就緒表 利用 OSMapTbl, 通過任務(wù)的識別號 優(yōu)先級 prio來設(shè)置任務(wù)在就緒組和就緒表數(shù)組中相應(yīng)位置的數(shù)學(xué)式為: OSRdyGrp |=OSMapTbl[prio3]。 0x07]。 146 根據(jù)就緒表確定最高優(yōu)先級( 1) 兩個關(guān)鍵 : 優(yōu)先級數(shù)分解為高三位和低三位 分別確定; 高優(yōu)先級有 著小的優(yōu)先級號 ; 147 根據(jù)就緒表確定最高優(yōu)先級( 2) 通過 OSRdyGrp值確定高 3位,假設(shè)為 0x24=100 100b, 〉 OSRdyTbl[2] 和 OSRdyTbl[5],高優(yōu)先級為 2 通過 OSRdyTbl[2]的值來確定低 3位, 假設(shè)為 0x12=010 010b , 〉 第 2個和第 5個任務(wù),取高優(yōu)先級第 2個 〉 17 148 源代碼中使用了查表法 查表法具有確定的時間 , 增加了系統(tǒng)的可預(yù)測性 , uC/OS中所有的系統(tǒng)調(diào)用時間都是確定的 High3 =OSUnMapTbl[OSRdyGrp]。 Prio =(Hign33)+Low3。 150 任務(wù)間通信手段 提供 OS_ENTER_CRITICAL和 OS_EXIT_CRITICAL來對臨界資源進(jìn)行保護(hù) OSSchedLock( )禁止調(diào)度 保護(hù)任務(wù)級的共享資源。 151 事件控制塊 ECB 所有的通信信號都被看成是事件 (event), 一個稱為事件控制塊 (ECB, Event Control Block)的數(shù)據(jù)結(jié)構(gòu)來表征每一個具體事件 , ECB的結(jié)構(gòu)如下: 程序 ECB的結(jié)構(gòu)如下 typedef struct { void *OSEventPtr。 /*等待任務(wù)列表 */ INT16U OSEventCnt。 /*事件類型:信號量 、 郵箱等 */ INT8U OSEventGrp。 與 TCB類似的結(jié)構(gòu) , 使用兩個鏈表 , 空閑鏈表與使用鏈表 152 信號量 semaphore uC/OS中信號量由兩部分組成:信號量的計數(shù)值和等待該信號任務(wù)的等待任務(wù)表。 系統(tǒng)通過 OSSemPend( )和 OSSemPost( )來支持信號量的兩種原子操作P()和 V()。 153 中斷與時鐘節(jié)拍 我們知道:當(dāng)發(fā)生中斷時,首先應(yīng)保護(hù)現(xiàn)場,將 CPU寄存器入棧,再處理中斷函數(shù),然后恢復(fù)現(xiàn)場,將 CPU寄存器出棧,最后執(zhí)行中斷返回 iret(x86)指令實現(xiàn)中斷返回。OSIntNesting 時鐘節(jié)拍是一種特殊的中斷,操作系統(tǒng)的心臟。對任務(wù)列表進(jìn)行掃描,判斷是否有延時任務(wù)應(yīng)該處于準(zhǔn)備就緒狀態(tài),最后進(jìn)行上下文切換。 … .. OSTaskcreat( ) … .. OSStart()。 void mytask(void *pdata) { for (。 waiting。 } } 156 揭開神秘的面紗 — 任務(wù)調(diào)度全程追蹤 For example1 創(chuàng)建 2個任務(wù),每個任務(wù)僅僅是進(jìn)行延時,延時不同的時間片,不同優(yōu)先級 void Task1(void) void Task2(void) { { while(1) while(1) { { blinkled1()。 Task1Data++。 OSTimeDly(25)。 } } } } 157 void main() { sysinit()。 OSTaskCreate ( Task1, (void *)amp。Task1Stk[TASK_STK_SIZE],Task1prio)。Task2Data, (void *)amp。 ticker_start(OS_TICKS_PER_SEC)。 } 158 void OSStart (void) { INT8U y, x。 x = OSUnMapTbl[OSRdyTbl[y]]。 找到優(yōu)先級最高的準(zhǔn)備就緒任務(wù) OSPrioCur = OSPrioHighRdy。 根據(jù)任務(wù)優(yōu)先級找到任務(wù) OSTCBCur = OSTCBHighRdy。 讓優(yōu)先級最高的任務(wù)運行起來 } } 159 OSStartHighRdy: bl OSTaskSwHook 用戶自定義函數(shù) 把 OSRunning設(shè)為 1 li r0,1 lis r11,OSRunningha stb r0,OSRunningl(r11) 獲取準(zhǔn)備運行的任務(wù) TCB指針 lis r11,OSTCBHighRdyha lwz r11,OSTCBHighRdyl(r11) 設(shè)置當(dāng)前運行任務(wù) TCB lis r12,OSTCBCurha stw r11,OSTCBCurl(r12) 獲取新的任務(wù)的堆棧指針 lwz r1,0(r11) 恢復(fù)新任務(wù)的上下文 lwz r2,XR2(r1) ....... rfi 160 void OSTimeDly (INT16U ticks) { if (ticks 0) { 確保 tick大于 0 OS_ENTER_CRITICAL()。= ~OSTCBCurOSTCBBitX) == 0) { /* Delay current task */ OSRdyGrp amp。 設(shè)置任務(wù)為非就緒狀態(tài) } OSTCBCurOSTCBDly = ticks。 退出臨界段代碼 OSSched()。 OS_ENTER_CRITICAL()。 OSPrioHighRdy = (INT8U)((y 3) + OSUnMapTbl[OSRdyTbl[y]])。 設(shè)置運行任務(wù)為最高優(yōu)先級任務(wù) OSCtxSwCtr++。 執(zhí)行上下文切換 } } OS_EXIT_CRITICAL()。) { OS_ENTER_CRITICAL()。 OS_EXIT_CRITICAL()。 ptcb = OSTCBList。 OS_STAT_SUSPEND)) { OSRdyGrp |= ptcbOSTCBBitY。 } else {ptcbOSTCBDly = 1。 指針指向下一個 TCB結(jié)構(gòu) } OSTime++。 每個任務(wù)有自己的堆??臻g。 168 uC/OS的移植 代碼分為三部分: 與 CPU無關(guān)的內(nèi)核代碼 , 包括 , , , , , , 。 處理器相關(guān)的代碼 , 包括: , , 。 定義函數(shù) OS_TASK_SW執(zhí)行任務(wù)切換。 定義函數(shù) OSIntCtxSw實現(xiàn)中斷級任務(wù)切換,用純匯編實現(xiàn)。 定義 OSTaskStkInit來初始化任務(wù)的堆棧。一個任務(wù)的基礎(chǔ)上增加一個基于時間片的微型調(diào)度核 在對臨界資源的訪問上使用關(guān)閉中斷實現(xiàn),沒有使用 CPU提供的硬件指令,例如測試并置位。 源代碼閱讀 移植: DSP,單片機 172 ARM CortexM3 體系結(jié)構(gòu) 1. ARM介紹 2. ARM CortexM3處理器內(nèi)核概述 3. CortexM3模塊的內(nèi)部方框圖 4. 編程模式 5. 內(nèi)部寄存器 6. 系統(tǒng)異常(中斷) 7. 嵌套向量中斷控制器( NVIC) 8. 存儲器保護(hù)單元( MPU) 173 ARM簡介 ARM公司簡介 ARM是 Advanced RISC Machines的縮寫,它是一家微處理器行業(yè)的知名企業(yè),該企業(yè)設(shè)計了大量高性能、廉價、耗能低的 RISC (精簡指令集)處理器。它將技術(shù)授權(quán)給世界上許多著名的半導(dǎo)體、軟件和 OEM廠商,并提供服務(wù)。當(dāng)前應(yīng)用比較多的 ARM處理器核系列有: ARM7 ARM9 ARM10E Xscale ARM11 Cortex ARM9E ARM簡介 176 ARM簡介 ARM7系列簡介 ARM7TDMI是 ARM公司 1995年推出的第一個處理器,也是目前用量最多的一個內(nèi)核。該系列處理器提供 Thumb 16位壓縮指令集和 EmbededICE軟件調(diào)試
點擊復(fù)制文檔內(nèi)容
法律信息相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1