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

正文內(nèi)容

嵌入式實時操作系統(tǒng)的移植(編輯修改稿)

2025-06-17 06:46 本頁面
 

【文章內(nèi)容簡介】 換 ? 任務(wù)級的任務(wù)切換; ? 中斷級的任務(wù)切換。 任 務(wù) 1C P S R , S P S RC P UR 0 R 1 5任 務(wù) 2堆 棧堆 棧53 中斷處理過程 54 OSIntExit() void OSIntExit (void){ OS_ENTER_CRITICAL()。 (1) if ((OSIntNesting | OSLockNesting) == 0) { (2) OSIntExitY = OSUnMapTbl[OSRdyGrp]。 (3) OSPrioHighRdy = (INT8U)((OSIntExitY 3) + OSUnMapTbl[OSRdyTbl[OSIntExitY]])。 if (OSPrioHighRdy != OSPrioCur) { OSTCBHighRdy = OSTCBPrioTbl[OSPrioHighRdy]。 OSCtxSwCtr++。 OSIntCtxSw()。 (4) } } OS_EXIT_CRITICAL()。 } 55 OSIntExit的關(guān)鍵 —— OSIntCtxSw ? 實現(xiàn)中斷級的任務(wù)切換 ? ARM在棧指針調(diào)整過程中的優(yōu)勢 任 務(wù) 的 P C任 務(wù) 寄 存 器( r 0 r 1 2 )I R Q 中 堆 棧 的 使 用 情 況進 入 時 I R Q 的 S PU n k n o w nO S I n t C t x S w時 I R Q 的 S P堆 棧 的 增 長 方 向高 地 址低 地 址56 移植 181。C/OSII要點 (3)—— Thumb帶來的問題 ? 很多 ARM內(nèi)核集成了 16位 thumb指令集。 ? Thumb可以在一定程度上節(jié)省代碼空間,提高系統(tǒng)效率。 ? Thumb會給中斷級的任務(wù)切換帶來麻煩。 ?CPSR中的 T位不能直接操作。 ?Thumb狀態(tài)將導(dǎo)致 CPSR恢復(fù)以后的指令不能運行。 ? 解決辦法: ?對 Thumb的使用必須保證原子操作。 ?專門對任務(wù)切換中 Thumb的情況作處理。 ? 建議,小心使用 C編譯器,盡量不使用 Thumb。 57 移植 181。C/OSII的要點 (4)— 何時啟動系統(tǒng)定時器 ? 如果在 OSStart之前啟動定時器,則系統(tǒng)可能無法正確執(zhí)行完OSStartHighRdy。 ? OSStart函數(shù)直接調(diào)用 OSStartHighRdy去執(zhí)行最高優(yōu)先級的任務(wù),OSStart不返回。 ? 系統(tǒng)定時器應(yīng)該在系統(tǒng)的最高優(yōu)先級任務(wù)中啟動。 ? 使用 OSRunning變量來控制操作系統(tǒng)的運行。 ? 在我們的移植版本中,使用了 181。C/OSII中的保留任務(wù) 1作為系統(tǒng)任務(wù),負責啟動定時器。 58 例: ?C/OSII在 S3C44B0X上的移植 ? 設(shè)置 。 ? 用 C語言編寫六個操作系統(tǒng)相關(guān)的函數(shù)( )。 ? 用匯編語言編寫四個與處理器相關(guān)的函數(shù)( )。 59 設(shè)置與處理器和編譯器相關(guān)的代碼 ? 。比如: INT8U、INT8S等。 ? 與 ARM處理器相關(guān)的代碼,使用 OS_ENTER_CRITICAL() 和OS_EXIT_CRITICAL() 宏開啟/關(guān)閉中斷。 ? 設(shè)置堆棧的增長方向 :堆棧由高地址向低地址增長 。 60 設(shè)置 typedef unsigned char BOOLEAN。 typedef unsigned char INT8U。 typedef signed char INT8S。 typedef unsigned int INT16U。 typedef signed int INT16S。 typedef unsigned long INT32U。 typedef signed long INT32S。 typedef float FP32。 typedef double FP64。 typedef unsigned long OS_STK。 typedef unsigned long OS_CPU_SR。 extern int INTS_OFF(void)。 extern void INTS_ON(void)。 define OS_ENTER_CRITICAL() { cpu_sr = INTS_OFF()。 } define OS_EXIT_CRITICAL() { if(cpu_sr == 0) INTS_ON()。 } define OS_STK_GROWTH 1 /*從高向低 */ 61 程序狀態(tài)寄存器 ? 條件位: ? N = 1結(jié)果為負 ,0結(jié)果為正或 0 ? Z = 1結(jié)果為 0,0結(jié)果不為 0 ? C =1進位, 0借位 ? V =1結(jié)果溢出, 0結(jié)果沒溢出 ? Q 位: ? 僅 ARM 5TE/J架構(gòu)支持 ? 指示增強型 DSP指令是否溢出 ? J 位 ? 僅 ARM 5TE/J架構(gòu)支持 ? J = 1: 處理器處于 Jazelle狀態(tài) ? 中斷禁止位: ? I = 1: 禁止 IRQ ? F = 1: 禁止 FIQ ? T Bit ? 僅 ARM xT架構(gòu)支持 ? T = 0: 處理器處于 ARM 狀態(tài) ? T = 1: 處理器處于 Thumb 狀態(tài) ? Mode位 (處理器模式位 ): ? 0b10000 User ? 0b10001 FIQ ? 0b10010 IRQ ? 0b10011 Supervisor ? 0b10111 Abort ? 0b11011 Undefined ? 0b11111 System 27 31 N Z C V Q 28 6 7 I F T mode 16 23 8 15 5 4 0 24 f s x c U n d e f i n e d J 62 打開 /關(guān)閉中斷 EXPORT INTS_OFF EXPORT INTS_ON INTS_OFF mrs r0, cpsr 。 current CSR mov r1, r0 。 make a copy for masking orr r1, r1, 0xC0 。 mask off int bits msr CPSR_cxsf, r1 。 disable ints and r0, r0, 0x80 。 return IRQ bit mov pc,lr 。 return INTS_ON mrs r0, cpsr 。 current CSR bic r0, r0, 0x80 。 mask on ints msr CPSR_cxsf, r0 。 enable ints mov pc,lr 。 return … 1 1 0 0 0 0 0 0 7 0 31 … 1 0 0 0 0 0 0 0 7 0 31 … I F T Mode 7 0 31 63 設(shè)置 OS_STK_GROWTH ? 絕大多數(shù)的微處理器和微控制器的堆棧是從上往下長的。但是某些處理器是用另外一種方式工作的。 ?C/OSⅡ 被設(shè)計成兩種情況都可以處理,只要在結(jié)構(gòu)常量 OS_STK_GROWTH中指定堆棧的生長方式就可以了。 ? 置 OS_STK_GROWTH為 0表示堆棧從下往上長。 ? 置 OS_STK_GROWTH為 1表示堆棧從上往下長。 64 用 C語言編寫六個操作系統(tǒng)相關(guān)的函數(shù) ? void *OSTaskStkInit (void (*task)(void *pd),void *pdata, void *ptos, INT16U opt) ? void OSTaskCreateHook (OS_TCB *ptcb) ? void OSTaskDelHook (OS_TCB *ptcb) ? void OSTaskSwHook (void) ? void OSTaskStatHook (void) ? void OSTimeTickHook (void) 后 5個函數(shù)為接口函數(shù),可以不加代碼。 65 OSTaskStkInit ? OSTaskCreate()和 OSTaskCreateExt()通過調(diào)用 OSTaskStkInit()來初始化任務(wù)的堆棧結(jié)構(gòu)。因此堆??雌饋砭拖駝偘l(fā)生過中斷并將所有的寄存器保存到堆棧中的情形一樣。這里我們定義了堆棧是從上往下
點擊復(fù)制文檔內(nèi)容
高考資料相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號-1