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

正文內(nèi)容

嵌入式實(shí)時(shí)操作系統(tǒng)的移植-wenkub.com

2025-05-08 06:46 本頁(yè)面
   

【正文】 ? 在對(duì)臨界資源的訪問(wèn)上使用關(guān)閉中斷實(shí)現(xiàn),沒(méi)有使用 CPU提供的硬件指令,例如測(cè)試并置位。 92 181。 ? 定義函數(shù) OSCtxSw實(shí)現(xiàn)用戶級(jí)上下文切換,用純匯編實(shí)現(xiàn)。C/OSII的移植雖然是一個(gè)很簡(jiǎn)單的過(guò)程,但是,對(duì)于不熟悉 181。 Uart_Printf(start system task.\n)。 } } void Task2(void *Id) { for (。 }// 89 測(cè)試 181。 OSTaskCreate(Task1, (void *)0, (OS_STK *)amp。 OSTaskCreate(SYS_Task, (void *)0, (OS_STK *)amp。 void Task2(void *Id)。 //system task刷新任務(wù)堆棧 define SYS_Task_Prio 1 void SYS_Task(void *Id)。 OSTCBCur = OSTCBHighRdy STR r6, [r4] 。 得到被占先的任務(wù) TCB LDR r4, addr_OSTCBCur LDR r5, [r4] STR sp, [r5] 。 使中斷位處于使能態(tài) STMFD sp!, {r4} 。 保存 FIQ 堆棧 ptr in LR (轉(zhuǎn)到 nuke r7) ldmfd lr!, {r0r12} 。s LR (任務(wù) PC) sub r0, r0, 4 。 得到暫停的 PSR orr r1, r1, 0xC0 。 執(zhí)行中斷返回指令 。 OSTCBCur = OSTCBHighRdy。一旦堆棧指針完成調(diào)整,新的堆棧指針會(huì)被保存到被切換出去的任務(wù)的OS_TCB中 。加在堆棧指針上的數(shù)必須是明確的,而這個(gè)數(shù)主要依賴于移植的目標(biāo)處理器 (地址空間可能是 16, 32或 64位 ),所用的編譯器,編譯器選項(xiàng),內(nèi)存模式等等。 OSTCBCur = OSTCBHighRdy STR r6, [r4] 。 得到當(dāng)前任務(wù) TCB地址 LDR r4, addr_OSTCBCur LDR r5, [r4] STR sp, [r5] 。 保存寄存器和返回地址 MRS r4, CPSR STMFD sp!, {r4} 。 執(zhí)行中斷返回指令 。 OSTCBCur = OSTCBHighRdy。 CPSR 處于 SVC32Mode摸式 LDMFD sp!, {r0r12, lr, pc } 。 轉(zhuǎn)移到新的堆棧中 STR r5, [r4] 。 ? 函數(shù)原型: void OSTimeTickHook (void) 74 用匯編語(yǔ)言編寫(xiě)四個(gè) 與處理器相關(guān)的函數(shù) ? OSStartHighRdy() ? OSCtxSw() ? OSIntCtxSw() ? OSTickISR() 75 OSStartHighRdy():運(yùn)行優(yōu)先級(jí)最高的就緒任務(wù) OSStartHighRdy LDR r4, addr_OSTCBCur 。用戶可以用 OSTaskStatHook()來(lái)擴(kuò)展統(tǒng)計(jì)功能。OSTCBCur指向被切換出去的任務(wù) OS_TCB,而 OSTCBHighRdy指向新任務(wù) OS_TCB。 OSTaskDelHook()可以來(lái)檢驗(yàn) TCB擴(kuò)展是否被建立(一個(gè)非空指針),并進(jìn)行一些清除操作。 ? 函數(shù)原型: void OSTaskCreateHook (OS_TCB *ptcb) { ptcb=ptcb。當(dāng) ?C/OSⅡ 設(shè)置完了自己的內(nèi)部結(jié)構(gòu)后,會(huì)在調(diào)用任務(wù)調(diào)度程序之前調(diào)用 OSTaskCreateHook()。 /* cpsr */ *stk = (SUPMODE)。 /* r3 */ *stk = 2。 /* r7 */ *stk = 6。 /* r11 */ *stk = 10。 /* build a stack for the new task */ *stk = (unsigned int) task。 66 堆棧初始化 低地址內(nèi)存 存儲(chǔ)的處理器寄存器值 中斷返回地址 處理器狀態(tài)字 任務(wù)起始地址 pdata 高地址內(nèi)存 堆棧指針 堆棧增長(zhǎng)方向 67 ARM系統(tǒng)的堆棧初始化 堆棧指針 SP 堆棧增長(zhǎng)方向 低端內(nèi)存 備份程序狀態(tài)寄存器 SPSR 當(dāng)前程序狀態(tài)寄存器 CPSR 任務(wù)傳遞參數(shù) R0(pdata) R1 …… R11 R12 中斷返回地址 LR 任務(wù)起始地址 ptos(PC) 高端內(nèi)存 68 OSTaskStkInit OS_STK * OSTaskStkInit (void (*task)(void *pd), void *pdata, OS_STK *ptos, INT16U opt) { unsigned int * stk。這里我們定義了堆棧是從上往下長(zhǎng)的。 ? 置 OS_STK_GROWTH為 1表示堆棧從上往下長(zhǎng)。 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ù)的微處理器和微控制器的堆棧是從上往下長(zhǎng)的。 return INTS_ON mrs r0, cpsr 。 make a copy for masking orr r1, r1, 0xC0 。 define OS_ENTER_CRITICAL() { cpu_sr = INTS_OFF()。 typedef unsigned long OS_STK。 typedef unsigned long INT32U。 typedef unsigned char INT8U。比如: INT8U、INT8S等。 58 例: ?C/OSII在 S3C44B0X上的移植 ? 設(shè)置 。 ? 系統(tǒng)定時(shí)器應(yīng)該在系統(tǒng)的最高優(yōu)先級(jí)任務(wù)中啟動(dòng)。 ? 建議,小心使用 C編譯器,盡量不使用 Thumb。 ?CPSR中的 T位不能直接操作。 } 55 OSIntExit的關(guān)鍵 —— OSIntCtxSw ? 實(shí)現(xiàn)中斷級(jí)的任務(wù)切換 ? ARM在棧指針調(diào)整過(guò)程中的優(yōu)勢(shì) 任 務(wù) 的 P C任 務(wù) 寄 存 器( r 0 r 1 2 )I R Q 中 堆 棧 的 使 用 情 況進(jìn) 入 時(shí) I R Q 的 S PU n k n o w nO S I n t C t x S w時(shí) I R Q 的 S P堆 棧 的 增 長(zhǎng) 方 向高 地 址低 地 址56 移植 181。 if (OSPrioHighRdy != OSPrioCur) { OSTCBHighRdy = OSTCBPrioTbl[OSPrioHighRdy]。C/OSII在 ARM上的任務(wù)切換 ? 任務(wù)級(jí)的任務(wù)切換; ? 中斷級(jí)的任務(wù)切換。 ? R15:程序計(jì)數(shù)器 (PC)。 ? R0 到 R14 是通用寄存器。 ?6 個(gè)狀態(tài)寄存器。 ? 中止模式 (abt) 支持虛擬內(nèi)存和 /或內(nèi)存保護(hù)等異常。 47 OSIntExit的意義 低 優(yōu) 先 級(jí) 任 務(wù)高 優(yōu) 先 級(jí) 任 務(wù)時(shí) 間中 斷 處 理高 優(yōu) 先 級(jí)任 務(wù) 就 緒是否O S I n t E x i t ( )48 ARM的工作模式 ? ARM處理器有 7種操作模式 : ? 用戶模式 (usr) 正常的程序執(zhí)行模式。中斷處理函數(shù)調(diào)用前后需要通知系統(tǒng)。 為了方便和統(tǒng)一 181。 } 44 使用 method3方式的開(kāi)關(guān)中斷 define OS_ENTER_CRITICAL() { cpu_sr = INTS_OFF()。C/OSII要點(diǎn) (1) 開(kāi)關(guān)中斷的方式。 ? 由于移植時(shí)需要對(duì) CPU的寄存器進(jìn)行操作,所以需要 C交叉編譯器能夠支持匯編語(yǔ)言程序。 41 處理器支持硬件堆棧 ? ?COSII進(jìn)行任務(wù)調(diào)度的時(shí)候,會(huì)把當(dāng)前任務(wù)的 CPU寄存器存放到此任務(wù)的堆棧中,然后,再?gòu)牧硪粋€(gè)任務(wù)的堆棧中恢復(fù)原來(lái)的工作寄存器,繼續(xù)運(yùn)行另一個(gè)任務(wù)。這需要處理器的支持。 } 返回 37 不可重入函數(shù)被中斷破壞 38 如何使函數(shù)具有可重入性 使 Swap()函數(shù)具有可重入性: ? 把 Temp定義為局部變量。 } 36 非可重入代碼舉例 程序 2:非可重入型函數(shù) int temp。 35 可重入代碼舉例 程序 1:可重入型函數(shù) void swap(int *x, int *y) { int temp。 ? 處理器支持能夠容納一定量數(shù)據(jù)的硬件堆棧。 ? 針對(duì)特定處理器的移植。 30 提 要 1 2 嵌入式系統(tǒng)的初始化 ?C/OSⅡ 移植分析 31 操作系統(tǒng)移植的概念 ? 所謂操作系統(tǒng)的移植,是指使一個(gè)實(shí)時(shí)操作系統(tǒng)能夠在某個(gè)微處理
點(diǎn)擊復(fù)制文檔內(nèi)容
高考資料相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖片鄂ICP備17016276號(hào)-1