请教一下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条回答
wdooy
1楼-- · 2019-12-15 10:16
这个函数在进入时钟滴答就会被软中断,他是个软中断函数
wdooy
2楼-- · 2019-12-15 13:50
NVIC_PENDSVSET  EQU     0x10000000                              ; Value to trigger PendSV exception. ////////////////////



OSIntCtxSw
    LDR     R0, =NVIC_INT_CTRL                                  ; Trigger the PendSV exception (causes context switch)
    LDR     R1, =NVIC_PENDSVSET
    STR     R1, [R0]
    BX      LR

sgweilong
3楼-- · 2019-12-15 18:04
学习了,也在疑问中,早期版本的ucos任务切换就是找到高优先级别的任务,并没有进入软中断。
PendSV倒是在FREERTOS里面有看到。不解中
sgweilong
4楼-- · 2019-12-15 23:04
看了9楼,在FreeRTOS中也找到了
        /* Set a PendSV to request a context switch. */
        *(portNVIC_INT_CTRL) = portNVIC_PENDSVSET;
xiaoliusheng
5楼-- · 2019-12-16 03:50
 精彩回答 2  元偷偷看……

一周热门 更多>