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

正文內(nèi)容

異常中斷處理ppt課件(已改無錯(cuò)字)

2023-06-12 07:55:10 本頁面
  

【正文】 0000 MOV r4,0x80000000 LDR r0,[r4,0] LDR r0,[r4,0] CMP r0,1 CMP r0,1 BLEQ int_handler_1 BLEQ int_handler_1 MOV r0,0 MOV r0,0 dfg STR r0,[r4,4] STR r0,[r4,4] LDMFD sp!,{r4,pc} LDMFD sp!,{r0r4,r12,lr} SUBS pc,lr,4 Assemble Language of ARM 34 C 中斷處理示例 __irq void IRQHandler (void) { volatile unsigned int *source = (unsigned int *)0x80000000。 if (*source == 1) // which interrupt was it? int_handler_1()。 // process the interrupt // insert checks for other interrupt sources here *(source+1) = 0。 // clear the interrupt } ? Output without __irq Output with __irq STMFD sp!,{r4,lr} MOV r4,0x80000000 LDR r0,[r4,0] CMP r0,1 LEQ int_handler_1 MOV r0,0 STR r0,[r4,4] LDMFD sp!,{r4,pc} STMFD sp!,{r0r4,r12,lr} MOV r4,0x80000000 LDR r0,[r4,0] CMP r0,1 BLEQ int_handler_1 MOV r0,0 STR r0,[r4,4] LDMFD sp!,{r0r4,r12,lr} SUBS pc,lr,4 Assemble Language of ARM 35 中斷重新使能的問題 ? 當(dāng)另外一個(gè)中斷搶先當(dāng)前中斷時(shí),如果程序員使用下邊特殊的步驟來防止系統(tǒng)狀態(tài)丟失 , 中斷是可以嵌套 : ? 保存 IRQ狀態(tài)下的 LR( LR_irq ) ? 保存 IRQ狀態(tài)下的 SPSR( SPSR_IRQ) ? 當(dāng)中斷可重入時(shí),在中斷處理程序中使用 “ BL…” 必須特別小心 : ? 如果第二個(gè)中斷產(chǎn)生, BL調(diào)用的返回地址 (LR_irq) 可能被沖掉,子程序?qū)㈠e(cuò)誤的返回 – 導(dǎo)致無限循環(huán) ! ? 解決方法是在使用 “ BL…” 之前改變模式來避免 LR_irq 被沖掉 ? 通常使用 “ System”模式 ( 這時(shí) BL 使用 LR_usr) ? 在處理程序結(jié)束,必須: ? 切換回 IRQ 模式 ? 禁止中斷 (來避免在恢復(fù) SPSR_irq 到一個(gè)臨時(shí)的寄存器中后它被沖掉 ). ? __irq 不能用來寫可重入中斷處理程序 ? 必須采用采用下頁中匯編代碼段來代替。 Assemble Language of ARM 36 C 可重入中斷示例 IRQHandler SUB lr, lr, 4 STMFD sp!, {lr} MRS r14, SPSR STMFD sp!, {r12, r14} MOV r12, IntBase LDR r12, [r12, IntSource] MRS r14, CPSR BIC r14, r14, 0x9F ORR r14, r14, 0x1F MSR CPSR_c, r14 STMFD sp!, {r0r3, lr} MOV r0,r12 BL C_irq_handler LDMFD sp!, {r0r3, lr} MRS r12, CPSR BIC r12, r12, 0x1F ORR r12, r12, 0x92 MSR CPSR_c, r12 LDMFD sp!, {r12, r14} MSR SPSR_csxf, r14 LDMFD sp!, {PC}^ 切換到 IRQ 模式同時(shí)禁止 IRQ. LR_irq , SPSR_irq 和工作寄存器 (r12) 壓棧保護(hù)來避免下一次中斷發(fā)生使它們被沖掉 } 保存 R03, LR_user 到 user 棧中 , 然后調(diào)用 C 子程序 ,中斷源 (R0)作為一個(gè)參數(shù)傳入 C 處理函數(shù)。 恢復(fù) LR_irq , SPSR_irq 和工作寄存器 (r12) ,然后退出中斷處理使用修正后的 LR } 讀 / 清中斷控制器中斷源 { 切換到 System 模式同時(shí)使能 IRQ { { 復(fù)位 (reset) ? Reset 處理程序執(zhí)行的動(dòng)作取決于不同的系統(tǒng) . 例如它可以 : ? 設(shè)置異常向量 ? 初始化存儲(chǔ)器系統(tǒng) (. MMU/PU) ? 初始化所有需要的模式的堆棧和寄存器 ? 初始化所有 C 所需的變量 ? 初始化所有 I/O設(shè)備 ? 使能中斷 ? 改變處理器模式或 /和狀態(tài) ? 調(diào)用主應(yīng)用程序 ? 詳細(xì)資料請(qǐng)參考 “ Embedded Software Development” 模塊 . Assemble Language of ARM 38 未定義指令 ? 下列情況將引起未定義指令異常 : ? ARM 試圖執(zhí)行一真正的未定義指令 ? ARM 遇到一協(xié)處理器指令,可是系統(tǒng)中的協(xié)處理器硬件并不存在 ? ARM 遇到一協(xié)處理器指令,系統(tǒng)中協(xié)處理器硬件也存在,可是 ARM 不是在超級(jí)用戶模式 (privileged mode) ? 例如:操作協(xié)處理器 15(cp15) ARM cache 控制器 ? 解決方法 : ? 在處理程序中執(zhí)行軟協(xié)處理器仿真 ? 禁止在非超級(jí)用戶模式下操作 ? 報(bào)告錯(cuò)誤并退出 預(yù)取異常 ? 不論異常是發(fā)生在 ARM 還是 Thumb 狀態(tài)下,導(dǎo)致預(yù)取異常的指令地址在 lr4 處 . ? 處理方法取決于存儲(chǔ)器管理策略 ? 有存儲(chǔ)器管理的系統(tǒng) (. demand paged virtual memory) ? 修正問題 (. enable correct memory page) ? 返回并重新執(zhí)行預(yù)取異常的指令 ( SUBS pc,lr,4 ) ? 沒有存儲(chǔ)器管理的系統(tǒng) ? 通常表示一個(gè)致命的錯(cuò)誤 ? 報(bào)告錯(cuò)誤 (如果可能 ) 然后退出 數(shù)據(jù)異常 ? 導(dǎo)致異常的指令的地址在 lr8 處 . ? 處理方法取決于存儲(chǔ)器管理策略 ? 有存儲(chǔ)器管理的系統(tǒng) (. demandpaged virtual memory) ? 如果使用了 MMU
點(diǎn)擊復(fù)制文檔內(nèi)容
教學(xué)課件相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號(hào)-1