请教一下ucos中什么情况下会执行PendSV_Handler

2019-12-14 12:53发布

本帖最后由 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中断服务程序会执行
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
11条回答
悠然科技
2019-12-15 01:11
你在任务里调用OSTimeDly包括OSTimeDlyHMSM,源码里面有个OSCtxSw,叫做任务级切换,在中断里包括systick滴答时钟中断里面,必须调用OSIntExit(),这个叫做中断级切换,这俩的源码是汇编的,一样的,都会调用PendSV_Handler,即进行系统主栈内容的替换以达到切换的目的。
希望你能够找一份能运行的ucos源码,和一本教材任哲和邵贝贝的都行,多跟踪和多看下原理。
这样一句一句的问,都很辛苦,效率也低。

一周热门 更多>