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

正文內(nèi)容

嵌入式系統(tǒng)設(shè)計(jì)與實(shí)例開發(fā)——arm與?cos-ⅱ第五講?c(文件)

2025-09-22 11:15 上一頁面

下一頁面
 

【正文】 CB地址 LDR r5, addr_OSTCBHighRdy 。 設(shè)置新的當(dāng)前任務(wù) TCB地址 LDMFD sp!, {r4} 。 運(yùn)行新的任務(wù) 76 OSCtxSw()的原型 void OSCtxSw(void) { 保存處理器寄存器 。 OSPrioCur = OSPrioHighRdy。 } 77 OS_TASK_SW ();任務(wù)級(jí)的任務(wù)切換函數(shù)( 1) OS_TASK_SW STMFD sp!, {lr} 。 保存當(dāng)前的 PSR MRS r4, SPSR STMFD sp!, {r4} 。 保存 sp在被占先的任務(wù)的 TCB 。 設(shè)置新的當(dāng)前任務(wù)的 TCB地址 。另外,處理器狀態(tài)字可能是 8, 16, 32甚至 64位寬,并且OSIntExit()可能會(huì)分配局部變量。 82 OSIntCtxSW的實(shí)現(xiàn) 83 OSIntCtxSw()的原型 void OSIntCtxSw(void) { 調(diào)整堆棧指針來去掉在調(diào)用: OSIntExit(), OSIntCtxSw()過程中壓入堆棧的多余內(nèi)容 。 OSPrioCur = OSPrioHighRdy。 } 84 OSIntCtxSW ();中斷級(jí)的任務(wù)切換函數(shù)( 1) OSIntCtxSw add r7, sp, 16 。 關(guān)閉 IRQ, FIQ. msr CPSR_cxsf, r1 。 當(dāng)前 PC地址是 (saved_LR 4) STMFD sp!, {r0} 。 從 FIQ堆棧中得到保存的寄存器 STMFD sp!, {r0r12} 。 保存任務(wù)當(dāng)前 PSR MRS r4, SPSR STMFD sp!, {r4} 。 保存 sp 在被占先的任務(wù)的 TCB 86 OSIntCtxSW ();中斷級(jí)的任務(wù)切換函數(shù)( 3) 。 設(shè)置新的當(dāng)前任務(wù)的 TCB地址 LDMFD sp!, {r4} MSR SPSR, r4 LDMFD sp!, {r4} BIC r4, r4, 0xC0 。 OS_STK Task1_Stack[STACKSIZE]={0, }。 define Task2_Prio 13 88 測(cè)試 181。SYS_Task_Stack[STACKSIZE1], SYS_Task_Prio)。Task1_Stack[STACKSIZE1], Task1_Prio )。C/OSII( 3) void Task1(void *Id) { for(。) { Uart_Printf(run task2\n)。 for (。C/OSII的開發(fā)者,移植還是有一定難度的。 ? 定義函數(shù) OSIntCtxSw實(shí)現(xiàn)中斷級(jí)任務(wù)切換,用純匯編實(shí)現(xiàn)。C/OS 的完善 ? 固定的基于優(yōu)先級(jí)的調(diào)度,不支持時(shí)間片,使用起來不方便。 ? 只是一個(gè)實(shí)時(shí)多任務(wù)內(nèi)核,沒有圖形用戶接口( GUI)、文件系統(tǒng)( FS)和 TCP/IP協(xié)議棧。 ? 系統(tǒng)時(shí)鐘中斷,沒有提供用戶使用定時(shí)器,可以借鑒 Linux的定時(shí)器加以修改。 ? 定義 OSTaskStkInit來初始化任務(wù)的堆棧。 ? 定義函數(shù) OS_TASK_SW執(zhí)行任務(wù)切換。 } } 90 關(guān)于移植 相對(duì)于其他的嵌入式操作系統(tǒng), 181。 } } void SYS_Task(void *Id) { uHALr_InstallSystemTimer()。 OSTimeDly(1000)。 // start the game // // never reached // return 0。Task2_Stack[STACKSIZE1], Task2_Prio)。 // do target (uHAL based ARM system) initialisation // OSInit()。 define Task1_Prio 12 OS_STK Task2_Stack[STACKSIZE]= {0, }。C/OSII( 1) /*任務(wù)定義 */ OS_STK SYS_Task_Stack[STACKSIZE]= {0, }。 得到新任務(wù)堆棧指針 。 OSPrioCur = OSPrioHighRdy // 改變當(dāng)前程序 LDR r4, addr_OSPrioCur LDR r5, addr_OSPrioHighRdy LDRB r6, [r5] STRB r6, [r4] 。在任務(wù)堆棧上保存 PSR 和任務(wù) PSR MRS r4, CPSR bic r4, r4, 0xC0 。 保存 LR mov lr, r7 。 從 IRQ堆棧中得到 IRQ39。FIQ_STACK mrs r1, SPSR 。 將所有處理器寄存器從新任務(wù)的堆棧中恢復(fù)出來 。 調(diào)用用戶定義的 OSTaskSwHook()。在后一種情況下,可以通過簡(jiǎn)單的執(zhí)行一定數(shù)量的 pop(出棧)指令來實(shí)現(xiàn)相同的功能。 返回到新任務(wù)的上下文 LDMFD sp!, {r0r12, lr, pc} 79 中斷服務(wù) 80 關(guān)于棧指針調(diào)整 81 棧指針調(diào)整 調(diào)整堆棧指針(加一個(gè)數(shù)在堆棧指針上)來完成的。 得到新任務(wù)堆棧指針 。 OSPrioCur = OSPrioHighRdy LDR r4, addr_OSPrioCur LDR r5, addr_OSPrioHighRdy LDRBr6, [r5] STRBr6, [r4] 78 OS_TASK_SW():任務(wù)級(jí)的任務(wù)切換函數(shù)( 2) 。 保存 lr STMFD sp!, {r0r12} 。 將所有處理器寄存器從新任務(wù)的堆棧中恢復(fù)出來 。 調(diào)用用戶定義的 OSTaskSwHook()。 從棧頂獲得新的狀態(tài) MSR CPSR, r4 。 獲得堆棧指針 LDR sp, [r5] 。實(shí)際上, OSTimeTickHook()是在節(jié)拍被 ?C/OSⅡ 真正處理,并通知用戶的移植實(shí)例或應(yīng)用程序之前被調(diào)用的。 ? 函數(shù)原型: void OSTaskSwHook (void) { if 0 if(OSRunning==TRUE){ /*保存擬被掛起任務(wù)的寄存器; } /*恢復(fù)擬被運(yùn)行任務(wù)的寄存器; endif } 72 OSTaskStatHook ? OSTaskStatHook()每秒鐘都會(huì)被 OSTaskStat()調(diào)用一次。 OSTaskSwHook()可以直接訪問 OSTCBCur和 OSTCBHighRdy,因?yàn)樗鼈兪侨肿兞?。?dāng) 該函數(shù)被調(diào)用的時(shí)候,它會(huì)收到指向正被刪除任務(wù)的 OS_TCB的指針,這樣它就可以訪問所有的結(jié)構(gòu)成員了。 ? 當(dāng) OSTaskCreateHook()被調(diào)用的時(shí)候,它會(huì)收到指向已建立任務(wù)的OS_TCB的指針,這樣它就可以訪問所有的結(jié)構(gòu)成員了。該函數(shù)允許用戶或使用移植實(shí)例的用戶擴(kuò)展 ?C/OSⅡ 功能。 /* r0 */ *stk = (SUPMODE)。 /* r4 */ *stk = 3。 /* r8 */ *stk = 7。 /* r12 */ *stk = 11。 opt++。 OSTaskCreate()和 OSTaskCreateExt()會(huì)獲得該地址并將它保存到任務(wù)控制塊( OS_TCB)中。因此堆棧看起來就像剛發(fā)生過中斷并將所有的寄存器保存到堆棧中的情形一樣。 ? 置 OS_STK_GROWTH為 0表示堆棧從下往上長(zhǎng)。 enable ints mov pc,lr 。 return IRQ bit mov pc,lr 。 current CSR mov r1, r0 。 extern void INTS_ON(void)。 typedef double FP64。 typedef signed int INT16S。 60 設(shè)置 typedef unsigned char BOOLEAN。 59 設(shè)置與處理器和編譯器相關(guān)的代碼 ? 。C/OSII中的保留任務(wù) 1作為系統(tǒng)任務(wù),負(fù)責(zé)啟動(dòng)定時(shí)器。 ? OSStart函數(shù)直接調(diào)用 OSStartHighRdy去執(zhí)行最高優(yōu)先級(jí)的任務(wù),OSStart不返回。 ?專門對(duì)任務(wù)切換中 Thumb的情況作處理。 ? Thumb會(huì)給中斷級(jí)的任務(wù)切換帶來麻煩。 (4) } } OS
點(diǎn)擊復(fù)制文檔內(nèi)容
教學(xué)課件相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1