本帖最后由 zjtzlqr 于 2013-1-14 20:57 编辑
PendSV_Handler
CPSID I ; Prevent interruption during context switch
MRS R0, PSP ; PSP is process stack pointer
CBZ R0, PendSV_Handler_Nosave ; Skip register save the first time
SUBS R0, R0, #0x20 ; Save remaining regs r4-11 on process stack
STM R0, {R4-R11}
LDR R1, =OSTCBCur ; OSTCBCur->OSTCBStkPtr = SP;
LDR R1, [R1]
STR R0, [R1]
中断发生都是有条件的,什么情况下pendsv中断服务程序会执行
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
开中断指的是不是OS_EXIT_CRITICAL();
但是我在debug的时候
执行OS_EXIT_CRITICAL();之前pendsv中断enable(1),pending(1),active(0)
之后enable(1),pending(1),active(0)
开中断好像pendsv中断好像都没激活过
希望你能够找一份能运行的ucos源码,和一本教材任哲和邵贝贝的都行,多跟踪和多看下原理。
这样一句一句的问,都很辛苦,效率也低。
PendSV_Handler
CPSID I ; Prevent interruption during context switch
MRS R0, PSP ; PSP is process stack pointer
CBZ R0, PendSV_Handler_Nosave ; Skip register save the first time
SUBS R0, R0, #0x20 ; Save remaining regs r4-11 on process stack
STM R0, {R4-R11}
LDR R1, =OSTCBCur ; OSTCBCur->OSTCBStkPtr = SP;
LDR R1, [R1]
STR R0, [R1]
主要是这段代码貌似只是触发一个pendsv异常而已并没有产生pendsv中断,而且我调试的时候跑这段代码pendsv中断服务程序也没有active
一周热门 更多>