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

正文內容

嵌入式系統(tǒng)復習20xx新(編輯修改稿)

2025-06-09 01:07 本頁面
 

【文章內容簡介】 OSTaskcreat( ) … .. OSStart()。 } 155 任務的格式 每個任務不能占用全部 CPU的資源 需要有等待,或延時等系統(tǒng)調用 典型的一個無限循環(huán)。 void mytask(void *pdata) { for (。) { do something。 waiting。 do something。 } } 156 揭開神秘的面紗 — 任務調度全程追蹤 For example1 創(chuàng)建 2個任務,每個任務僅僅是進行延時,延時不同的時間片,不同優(yōu)先級 void Task1(void) void Task2(void) { { while(1) while(1) { { blinkled1()。 blinkled2()。 Task1Data++。 Task2Data++。 OSTimeDly(25)。 OSTimeDly(50)。 } } } } 157 void main() { sysinit()。 OSInit ()。 OSTaskCreate ( Task1, (void *)amp。Task1Data, (void *)amp。Task1Stk[TASK_STK_SIZE],Task1prio)。 OSTaskCreate (Task2, (void *)amp。Task2Data, (void *)amp。Task2Stk[TASK_STK_SIZE],Task2prio)。 ticker_start(OS_TICKS_PER_SEC)。 OSStart()。 } 158 void OSStart (void) { INT8U y, x。 if (OSRunning == FALSE) { 判斷是否沒有啟動內核 y = OSUnMapTbl[OSRdyGrp]。 x = OSUnMapTbl[OSRdyTbl[y]]。 OSPrioHighRdy = (INT8U)((y 3) + x)。 找到優(yōu)先級最高的準備就緒任務 OSPrioCur = OSPrioHighRdy。 當前運行任務優(yōu)先級 OSTCBHighRdy = OSTCBPrioTbl[OSPrioHighRdy]。 根據(jù)任務優(yōu)先級找到任務 OSTCBCur = OSTCBHighRdy。 OSStartHighRdy()。 讓優(yōu)先級最高的任務運行起來 } } 159 OSStartHighRdy: bl OSTaskSwHook 用戶自定義函數(shù) 把 OSRunning設為 1 li r0,1 lis r11,OSRunning@ha stb r0,OSRunning@l(r11) 獲取準備運行的任務 TCB指針 lis r11,OSTCBHighRdy@ha lwz r11,OSTCBHighRdy@l(r11) 設置當前運行任務 TCB lis r12,OSTCBCur@ha stw r11,OSTCBCur@l(r12) 獲取新的任務的堆棧指針 lwz r1,0(r11) 恢復新任務的上下文 lwz r2,XR2(r1) ....... rfi 160 void OSTimeDly (INT16U ticks) { if (ticks 0) { 確保 tick大于 0 OS_ENTER_CRITICAL()。 進入臨界段代碼 if ((OSRdyTbl[OSTCBCurOSTCBY] amp。= ~OSTCBCurOSTCBBitX) == 0) { /* Delay current task */ OSRdyGrp amp。= ~OSTCBCurOSTCBBitY。 設置任務為非就緒狀態(tài) } OSTCBCurOSTCBDly = ticks。 在 TCB中裝載延時數(shù) OS_EXIT_CRITICAL()。 退出臨界段代碼 OSSched()。 調度下一個任務開始運行 } } 161 void OSSched (void) { INT8U y。 OS_ENTER_CRITICAL()。 if ((OSLockNesting | OSIntNesting) == 0) { 調度鎖,或者處于中斷狀態(tài)禁止調度 y = OSUnMapTbl[OSRdyGrp]。 OSPrioHighRdy = (INT8U)((y 3) + OSUnMapTbl[OSRdyTbl[y]])。 獲取準備就緒組里最高優(yōu)先級的任務 if (OSPrioHighRdy != OSPrioCur) { OSTCBHighRdy = OSTCBPrioTbl[OSPrioHighRdy]。 設置運行任務為最高優(yōu)先級任務 OSCtxSwCtr++。 OS_TASK_SW()。 執(zhí)行上下文切換 } } OS_EXIT_CRITICAL()。 } 162 OS_TASK_SW 任務的上下文切換 通過 sc系統(tǒng)調用指令完成 保護當前任務的現(xiàn)場 恢復新任務的現(xiàn)場 執(zhí)行中斷返回指令 開始執(zhí)行新的任務 163 什么也不做的空閑任務 只是為了消耗 CPU的時間片 void OSTaskIdle ( ) { for (。) { OS_ENTER_CRITICAL()。 OSIdleCtr++。 OS_EXIT_CRITICAL()。 } } 164 void OSTimeTick (void) { OS_TCB *ptcb。 ptcb = OSTCBList。 OSTCB鏈表指針 while (ptcbOSTCBPrio != OS_IDLE_PRIO) { 看是不是空閑任務,空閑任務是最后的任務 if (ptcbOSTCBDly != 0) { 是否延時 if (ptcbOSTCBDly == 0) { 延時減一,看是否延時結束 if (!(ptcbOSTCBStat amp。 OS_STAT_SUSPEND)) { OSRdyGrp |= ptcbOSTCBBitY。 是的話將其列入準備就緒表 OSRdyTbl[ptcbOSTCBY] |= ptcbOSTCBBitX。 } else {ptcbOSTCBDly = 1。 } } } ptcb = ptcbOSTCBNext。 指針指向下一個 TCB結構 } OSTime++。 變量加一,記錄系統(tǒng)啟動以來的時鐘滴答數(shù) } 165 OSTimeTick( void ) 令指針指向第一個任務 是否是空閑任務 ? 任務是否存在延時 ? 延時數(shù)減一 延時數(shù)是否為 0? 如果條件合適 , 將該 任務放入就緒列表 令指針指向下一個任務 OSTime++ 返回 是 否 是 否 是 否 空閑任務總是最后一個任務 對任務表進行掃描 預定的延時到了, 就應該在使任務處于就緒 條件是:任務沒有處于掛起態(tài) 任務沒有延時的話忽略即可 166 時間 任務一 任務二 OSStart Time Tick Time Tick 1 25 50 Time Tick 空閑任務 167 總結 不存在一個內核任務 /實體,內核的管理是通過調用系統(tǒng)函數(shù)來實現(xiàn)的。 每個任務有自己的堆??臻g。內核對任務的占先式調度不會干擾每個任務的總的運行結果。 168 uC/OS的移植 代碼分為三部分: 與 CPU無關的內核代碼 , 包括 , , , , , , 。 與應用相關的設置頭文件 , 包括 : , 。 處理器相關的代碼 , 包括: , , 。 169 移植要點 定義函數(shù) OS_ENTER_CRITICAL和 OS_ENTER_CRITICAL。 定義函數(shù) OS_TASK_SW執(zhí)行任務切換。 定義函數(shù) OSCtxSw實現(xiàn)用戶級上下文切換,用純匯編實現(xiàn)。 定義函數(shù) OSIntCtxSw實現(xiàn)中斷級任務切換,用純匯編實現(xiàn)。 定義函數(shù) OSTickISR。 定義 OSTaskStkInit來初始化任務的堆棧。 170 uC/OS的改進 固定的基于優(yōu)先級的調度,不支持時間片,使用起來不方便。一個任務的基礎上增加一個基于時間片的微型調度核 在對臨界資源的訪問上使用關閉中斷實現(xiàn),沒有使用 CPU提供的硬件指令,例如測試并置位。 系統(tǒng)時鐘中斷,沒有提供用戶使用定時器,可以借鑒 linux的定時器加以修改 可以加上文件系統(tǒng)和 TCP/IP協(xié)議棧 171 學習 uC/OS的步驟 學習與研究 uC/OS的起點:在 PC上執(zhí)行 uC/OS ,環(huán)境: TC編譯環(huán)境,新建一個工程 應用程序設計:消費者與生產者經典問題。 源代碼閱讀 移植: DSP,單片機 172 ARM CortexM3 體系結構 1. ARM介紹 2. ARM CortexM3處理器內核概述 3. CortexM3模塊的內部方框圖 4. 編程模式 5. 內部寄存器 6. 系統(tǒng)異常(中斷) 7. 嵌套向量中斷控制器( NVIC) 8. 存儲器保護單元( MPU) 173 ARM簡介 ARM公司簡介 ARM是 Advanced RISC Machines的縮寫,它是一家微處理器行業(yè)的知名企業(yè),該企業(yè)設計了大量高性能、廉價、耗能低的 RISC (精簡指令集)處理器。 公司的特點是只設計芯片,而不生產。它將技術授權給世界上許多著名的半導體、軟件和 OEM廠商,并提供服務。 174 ARM簡介 將技術授權給其它芯片廠商 形成各具特色的 ARM芯片 . . . 已有 100多家公司與 ARM公司訂購技術使用許可協(xié)議 175 常用 ARM處理器系列 ARM公司開發(fā)了很多系列的 ARM處理器核,目前最新的系列是 Cortex,而 ARM6核以及更早的系列已經很罕見了。當前應用比較多的 ARM處理器核系列有: ARM7 ARM9 ARM10E Xscale ARM11 Cortex ARM9E ARM簡介 176 ARM簡介 ARM7系列簡介 ARM7TDMI是 ARM公司 1995年推出的第一個處理器,也是目前用量最多的一個內核。 該系列包括 ARM7TDMI、 ARM7TDMIS、帶有高速緩存處理器宏單元的 ARM720T和擴充了 Jazelle的ARM7EJS。該系列處理器提供 Thumb 16位壓縮指令集和 Em
點擊復制文檔內容
法律信息相關推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號-1