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

正文內(nèi)容

嵌入式系統(tǒng)—rteosμcos-ii的移植-文庫吧資料

2025-07-24 23:41本頁面
  

【正文】 D SP!, {R4R7} ADD SP, SP, 8 。獲取 R12 MRS R0, CPSR 。下面為保存任務(wù)環(huán)境 LDR R2, [SP, 20] 。共同執(zhí)行的任務(wù)切換代碼是“ OSIntCtxSw” 其中 OS_TASK_SW( )是通過 軟件中斷 0完成的,通過前面的分析,可以知道執(zhí)行任務(wù)切換時的現(xiàn)場環(huán)境如下所示,同時R3中保存著 SPSR,它是任務(wù)中斷前 CPSR的備份。調(diào)用函數(shù)OSIntCtxSw( ) SPSR: 程序狀態(tài)保留寄存器 CPSR: 當(dāng)前 程序狀態(tài)寄存器 編寫 雖然 OS_TASK_SW( )和 OSIntCtxSw( )的執(zhí)行條件不同,但是它們的功能相同,只要稍作處理就可以它們共用一段任務(wù)切換代碼。調(diào)用函數(shù) OS_TASK_SW( ) ,使更高優(yōu)先級的任務(wù)進(jìn)入就緒狀態(tài),內(nèi)核剝奪當(dāng)前任務(wù)的運行資格。當(dāng)處于運行狀態(tài)的任務(wù)因為某種原因進(jìn)入就緒態(tài),或者有其它更高優(yōu)先級的任務(wù)進(jìn)入就緒態(tài),操作系統(tǒng)內(nèi)核就要運行別的就緒任務(wù),這時需要進(jìn)行任務(wù)切換。在執(zhí)行軟件中斷服務(wù)函數(shù)之前,要提取中斷號和其它入口參數(shù),這些通過軟件中斷接口程序完成。它們分別如下表所示。 編寫 在 Hook() 函數(shù), 它們在某個特定的系統(tǒng)動作時被調(diào)用 , 允許執(zhí)行函數(shù)中的用戶代碼 。 如果在低優(yōu)先級的任務(wù)中創(chuàng)建高優(yōu)先級的任務(wù)就十分危險了。 } } break。 case 0x83: // 任務(wù)代碼是 Thumb代碼 if (Regs[0] = OS_LOWEST_PRIO) { ptcb = OSTCBPrioTbl[Regs[0]]。= ~(1 5)。 編寫 —— 軟件中斷異常服務(wù)程序 功能號 簡介 0x00 任務(wù)級任務(wù)切換函數(shù) 0x01 運行優(yōu)先級最高的任務(wù) ,由OSStartHighRdy產(chǎn)生 0x02 關(guān)中斷 0x03 開中斷 0x80 任務(wù)切換到系統(tǒng)模式 0x81 任務(wù)切換到用戶模式 0x82 任務(wù)代碼是 ARM代碼 0x83 任務(wù)代碼是 THUMB代碼 ... case 0x82: // 任務(wù)代碼是 ARM代碼 if (Regs[0] = OS_LOWEST_PRIO) { ptcb = OSTCBPrioTbl[Regs[0]]。所以增加兩個函數(shù) TaskIsARM()和 TaskIsTHUMB()用于改變?nèi)蝿?wù)建立時默認(rèn)的指令集。 ... 使用內(nèi)嵌匯編將處理器模式切換到用戶模式 使用內(nèi)嵌匯編將處理器模式切換到系統(tǒng)模式 編寫 —— 軟件中斷異常服務(wù)程序 功能號 簡介 0x00 任務(wù)級任務(wù)切換函數(shù) 0x01 運行優(yōu)先級最高的任務(wù) ,由OSStartHighRdy產(chǎn)生 0x02 關(guān)中斷 0x03 開中斷 0x80 任務(wù)切換到系統(tǒng)模式 0x81 任務(wù)切換到用戶模式 0x82 任務(wù)代碼是 ARM代碼 0x83 任務(wù)代碼是 THUMB代碼 任務(wù)可以使用 ARM的兩種指令集的任意一種運行,但是任務(wù)建立時默認(rèn)的只是一種指令集。 編寫 —— 軟件中斷異常服務(wù)程序 功能號 簡介 0x00 任務(wù)級任務(wù)切換函數(shù) 0x01 運行優(yōu)先級最高的任務(wù) ,由OSStartHighRdy產(chǎn)生 0x02 關(guān)中斷 0x03 開中斷 0x80 任務(wù)切換到系統(tǒng)模式 0x81 任務(wù)切換到用戶模式 0x82 任務(wù)代碼是 ARM代碼 0x83 任務(wù)代碼是 THUMB代碼 void SWI_Exception(int SWI_Num, int *Regs) { ... case 0x80: // 任務(wù)切換到系統(tǒng)模式 __asm { MRS R0,SPSR BIC R0,R0,0x1f ORR R0,R0,SYS32Mode MSR SPSR_c,R0 } break。 ... 每關(guān)閉一次中斷,中斷關(guān)閉計數(shù)器加 1 每調(diào)用一次開中斷函數(shù),該計數(shù)器減 1,為0時允許打開中斷 關(guān)閉中斷 打開中斷 編寫 —— 軟件中斷異常服務(wù)程序 功能號 簡介 0x00 任務(wù)級任務(wù)切換函數(shù) 0x01 運行優(yōu)先級最高的任務(wù) ,由OSStartHighRdy產(chǎn)生 0x02 關(guān)中斷 0x03 開中斷 0x80 任務(wù)切換到系統(tǒng)模式 0x81 任務(wù)切換到用戶模式 0x82 任務(wù)代碼是 ARM代碼 0x83 任務(wù)代碼是 THUMB代碼 它們可以在任何情況下使用。 break。由于使用了軟件中斷,程序狀態(tài)寄存器 CPSR保存到 程序狀態(tài)保存寄存器SPSR中,軟件中斷退出時會將 SPSR恢復(fù)到 CPSR中,所以程序只要改變程序狀態(tài)保存寄存器 SPSR中的相應(yīng)的控制位就可以了。這些代碼與處理器有關(guān),是需要移植的代碼。 } 該函數(shù)在 。 OSStart()最終調(diào)用函數(shù)OSStartHighRdy()運行多任務(wù)啟動前優(yōu)先級最高的任務(wù)。 ? 移植代碼中一個重要的工作就是為這些軟件中斷 編寫服務(wù)程序 功能號 接口函數(shù) 簡介 0x00 void OS_TASK_SW(void) 任務(wù)級任務(wù)切換函數(shù) 0x01 _OSStartHighRdy(void) 運行優(yōu)先級最高的任務(wù) ,由 OSStartHighRdy產(chǎn)生 0x02 void OS_ENTER_CRITICAL(void) 關(guān)中斷 0x03 Void OS_EXIT_CRITICAL(void) 開中斷 0x80 Void ChangeToSYSMode(void) 任務(wù)切換到系統(tǒng)模式 0x81 Void ChangeToUSRMode(void) 任務(wù)切換到用戶模式 0x82 Void TaskIsARM(INT8U prio) 任務(wù)代碼是 ARM代碼 0x83 Void TaskIsTHUMB(INT8U prio) 任務(wù)代碼是 THUMB代碼 編寫 —— 軟件中斷異常服務(wù)程序 功能號 簡介 0x00 任務(wù)級任務(wù)切換函數(shù) 0x01 運行優(yōu)先級最高的任務(wù) ,由OSStartHighRdy產(chǎn)生 0x02 關(guān)中斷 0x03 開中斷 0x80 任務(wù)切換到系統(tǒng)模式 0x81 任務(wù)切換到用戶模式 0x82 任務(wù)代碼是 ARM代碼 0x83 任務(wù)代碼是 THUMB代碼 功能號 接口函數(shù) 簡介 0x00 void OS_TASK_SW(void) 任務(wù)級任務(wù)切換函數(shù) 0x01 _OSStartHighRdy(void) 運行優(yōu)先級最高的任務(wù) ,由 OSStartHighRdy產(chǎn)生 0x02 void OS_ENTER_CRITICAL(void) 關(guān)中斷 0x03 Void OS_EXIT_CRITICAL(void) 開中斷 0x80 Void ChangeToSYSMode(void) 任務(wù)切換到系統(tǒng)模式 0x81 Void ChangeToUSRMode(void) 任務(wù)切換到用戶模式 0x82 Void TaskIsARM(INT8U prio) 任務(wù)代碼是 ARM代碼 0x83 Void TaskIsTHUMB(INT8U prio) 任務(wù)代碼是 THUMB代碼 void SWI_Exception(int SWI_Num, int *Regs) { OS_TCB *ptcb。因此關(guān)中斷和開中斷就可以嵌套。 } 該數(shù)據(jù)比較特別,它用于保存該任務(wù)關(guān)中斷的次數(shù),它在調(diào)用 OS_ENTER_CRITICAL( )時加 1,在調(diào)用OS_EXIT_CRITICAL( )時減 1。 *stk = 0。 *stk = (unsigned int) pdata。 *stk = 0。 *stk = 0。 *stk = 0。 *stk = 0。 *stk = 0。 *stk = 0。 *stk = (OS_STK) task。 opt = opt。 return (stk)。 *stk = (USER_USING_MODE|0x00)。 *stk = 0。 *stk = 0。 *stk = 0。 *stk = 0。 *stk = 0。 *stk = 0。 *stk = (OS_STK) task。 stk = ptos。 —— OSTaskStkInit( ) 任務(wù)入棧的 其它數(shù)據(jù) LR R12 R11 R10 R9 R8 ... 棧底 任務(wù)環(huán)境開始 SP PC R2 R1 R0 OSEnterSum 空閑空間 編寫 —— OSTaskStkInit( ) OS_STK *OSTaskStkInit (void (*task)(void *pd), void *pdata, OS_STK *ptos, INT16U opt) { OS_STK *stk。而 任務(wù)的堆棧結(jié)構(gòu)是與 CPU的體系結(jié)構(gòu)、編譯器有密切的關(guān)聯(lián) 。即任務(wù)被執(zhí)行時,就像從中斷返回一樣。 /* 任務(wù)代碼是 THUMB代碼 */ __swi(0x83) void TaskIsTHUMB(INT8U prio)。 /* 任務(wù)切換到用戶模式 */ __swi(0x81) void ChangeToUSRMode(void)。 /* 開中斷 */ __swi(0x03) void OS_EXIT_CRITICAL(void)。 /* 運行優(yōu)先級最高的任務(wù) */ __swi(0x01) void _OSStartHighRdy(void)。同時,這個函數(shù)也可以有參數(shù)和返回值,其傳遞規(guī)則與一般函數(shù)相同。 —— 使用軟中斷 SWI作底層接口 功能號 接口函數(shù) 簡介 0x00 void OS_TASK_SW(void) 任務(wù)級任務(wù)切換函數(shù) 0x01 _OSStartHighRdy(void) 運行優(yōu)先級最高的任務(wù) ,由 OSStartHighRdy產(chǎn)生 0x02 void OS_ENTER_CRITICAL(void) 關(guān)中斷 0x03 Void OS_EXIT_CRITICAL(void) 開中斷 0x80 Void ChangeToSYSMode(void) 任務(wù)切換到系統(tǒng)模式 0x81 Void ChangeToUSRMode(void) 任務(wù)切換到用戶模式 0x82 Void TaskIsARM(INT8U prio) 任務(wù)代碼是 ARM代碼 0x83 Void TaskIsTHUMB(INT8U prio) 任務(wù)代碼是 THUMB代碼 編寫 用軟中斷作為操作系統(tǒng)的底層接口就需要在 C語言中使用SWI( SoftWare Interrupt) 指令。 } define OS_STK_GROWTH 1 /*從高向低 */ 程序狀態(tài)寄存器( CPSR) ? 條件位 : ? N = 1結(jié)果為負(fù) ,0結(jié)果為正或 0 ? Z = 1結(jié)果為 0,0結(jié)果不為 0 ? C =1進(jìn)位, 0借位 ? V =1結(jié)果溢出, 0結(jié)果沒溢出 ? Q 位 : ? 僅 ARM 5TE/J架構(gòu)支持 ? 指示增強型 DSP
點擊復(fù)制文檔內(nèi)容
環(huán)評公示相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1