野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 3487|回复: 2

关于PendSVHandler中断嵌套的疑问?

[复制链接]
发表于 2019-6-26 09:05:58 | 显示全部楼层 |阅读模式
看了下FreeRTOS的源码,有一个疑问:

如果执行PendSVHandler中断处理函数实现任务切换的过程中又来了一个中断ISR1,由于PendSVHandler中断的优先级最低,所以这个中断会被打断,转而执行ISR1,在ISR1结束时又会去执行任务切换,再一次触发PendSVHandler,这样就会出现两个PendSVHandler,程序会怎么处理?丢掉一个吗?还是说执行两遍PendSVHandler?我看了下PendSVHandler函数,里面并没有关中断的操作。

还有一个情况,有两个ISR,一个高优先级的ISR1,一个低优先级的ISR2,首先执行ISR2,过程中来了ISR1,ISR1执行完毕后触发一次PendSVHandler,ISR1退出后转而继续执行之前被打断的ISR2,ISR2执行完毕后又触发一次PendSVHandler,这样有两个PendSVHandler,是丢掉一个还是执行两遍PendSVHandler?



PendSVHandler的源码:

[mw_shl_code=c,true]xPortPendSVHandler:
        mrs r0, psp
        isb
        /* Get the location of the current TCB. */
        ldr        r3, =pxCurrentTCB
        ldr        r2, [r3]

        /* Is the task using the FPU context?  If so, push high vfp registers. */
        tst r14, #0x10
        it eq
        vstmdbeq r0!, {s16-s31}

        /* Save the core registers. */
        stmdb r0!, {r4-r11, r14}

        /* Save the new top of stack into the first member of the TCB. */
        str r0, [r2]

        stmdb sp!, {r0, r3}
        mov r0, #configMAX_SYSCALL_INTERRUPT_PRIORITY
        msr basepri, r0
        dsb
        isb
        bl vTaskSwitchContext
        mov r0, #0
        msr basepri, r0
        ldmia sp!, {r0, r3}

        /* The first item in pxCurrentTCB is the task top of stack. */
        ldr r1, [r3]
        ldr r0, [r1]

        /* Pop the core registers. */
        ldmia r0!, {r4-r11, r14}

        /* Is the task using the FPU context?  If so, pop the high vfp registers
        too. */
        tst r14, #0x10
        it eq
        vldmiaeq r0!, {s16-s31}

        msr psp, r0
        isb
        #ifdef WORKAROUND_PMU_CM001 /* XMC4000 specific errata */
                #if WORKAROUND_PMU_CM001 == 1
                        push { r14 }
                        pop { pc }
                #endif
        #endif

        bx r14[/mw_shl_code]
回复

使用道具 举报

发表于 2019-6-26 10:47:32 | 显示全部楼层
不管是不是PendSVHandler中断,被嵌套打断回来一样也是从执行中的位置继续吧,怎么会执行两次?(说错请指正)

这本宝典里面应该有满足你的钻研渴望
1.png
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-6-26 11:32:04 | 显示全部楼层
WishWish 发表于 2019-6-26 10:47
不管是不是PendSVHandler中断,被嵌套打断回来一样也是从执行中的位置继续吧,怎么会执行两次?(说错请指 ...

我的意思是如果正在执行PendSVHandler的过程中又来了一个中断ISR,在这个ISR结束时又触发了一次PendSVHandler中断,那么之前那个PendSVHandler中断结束后是不是紧接着又要进入一次PendSVHandler?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-5-22 15:02 , Processed in 0.027970 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表