|
|||||||||||
| 技術交流 | 電路欣賞 | 工控天地 | 數字廣電 | 通信技術 | 電源技術 | 測控之家 | EMC技術 | ARM技術 | EDA技術 | PCB技術 | 嵌入式系統 驅動編程 | 集成電路 | 器件替換 | 模擬技術 | 新手園地 | 單 片 機 | DSP技術 | MCU技術 | IC 設計 | IC 產業(yè) | CAN-bus/DeviceNe |
這個時鐘中斷服務程序有什么問題嗎? |
| 作者:js_wawayu 欄目:嵌入式系統 |
UCOS-II,ARM44B0: LINK_SAVE DCD 0 PSR_SAVE DCD 0 OSTickISR STMFD sp!, {r4} LDR r4, =LINK_SAVE STR lr, [r4] ; LINK_SAVE = lr_irq MRS lr, spsr STR lr, [r4, #4] ; PSR_SAVE = spsr_irq LDMFD sp!, {r4} ORR lr, lr, #0x80 ; Mask irq for context switching before MSR cpsr_cxsf, lr ; returning BACK from irq mode. SUB sp, sp, #4 ; Space for PC STMFD sp!, {r0-r12, lr} LDR r4, =LINK_SAVE LDR lr, [r4, #0] SUB lr, lr, #4 ; lr = LINK_SAVE - 4, STR lr, [sp, #56] ; the return address for pc. LDR r4, [r4, #4] ; r4 = PSR_SAVE, STMFD sp!, {r4} ; CPSR of the task LDR r4, =OSTCBCur LDR r4, [r4] STR sp, [r4] ;OSTCBCur -> stkptr = sp BL OSIntEnter BL OSTimeTick BL tick_hook ; here do_IRQ is used to clear some virtual-hardware flags BL OSIntExit LDMFD sp!, {r4} ; pop new task cpsr MSR cpsr_cxsf, r4 LDMFD sp!, {r0-r12,lr,pc} ; pop new task r0-R12 & pc 運行的時候發(fā)現,沒有任務切換的情況下,返回不到原來被中斷的那個任務,而是從MAIN函數開始出運行。 |
|
|
| 免費注冊為維庫電子開發(fā)網會員,參與電子工程師社區(qū)討論,點此進入 |
Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號 |