⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 osiickisr代码.txt

📁 ucos 在 arm9 芯片上的移植
💻 TXT
字号:
    	STMFD	sp!, {r4}                ; 这个SP是IRQ模式下的!
        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}                ; 只好重新恢复R4
        ORR     lr, lr, #0x80           ; Mask irq for context switching before 
        MSR     cpsr_cxsf, lr           ; returning back from irq mode.我们还没有
                                        ; 保存好现场,如果打开中断,就有可能发生新的
                                        ; 抢占式调度,于是这个现场就OVER了。现场保
                                        ; 护和现场恢复都要一气呵成。
    
        SUB     sp, sp, #4               ; Space for PC
        STMFD   sp!, {r0-r12, lr}
        
        LDR     r4, =LINK_SAVE
        LDR     lr, [r4, #0]
        SUB     lr, lr, #4               ; PC = LINK_SAVE - 4,
        STR     lr, [sp, #(14*4)]        ; SAVE PC [..]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                    ; 我们在Tick_hook()里清除S3C44B0x的Tick_Int_Pend位,这个
                                         ; 函数在main.c里,是另加的.其实用uCOS-II自己的HOOK更好
        BL      OSIntExit                    ; 调度!
                
        LDMFD   sp!, {r4}                ; pop current task cpsr
        MSR     cpsr_cxsf, r4
        LDMFD   sp!, {r0-r12,lr,pc}      ; pop current task r0-r12,lr & pc

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -