kokoromi 发表于 2019-6-26 08:57:36

关于PendSVHandler中断嵌套的问题

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

eric2013 发表于 2019-6-26 09:05:36

1、这个就是开关中断,在任务切换的关键部分做的开关


2、PendSV中断本身,没有记录自己被触发几次的功能,在它被pending期间,不管触发了几次,最后仅执行一次。

kokoromi 发表于 2019-6-26 09:49:30

1、画红框以外的地方还是会被其他中断打断的...
2、明白了。多谢!

eric2013 发表于 2019-6-26 09:52:44

kokoromi 发表于 2019-6-26 09:49
1、画红框以外的地方还是会被其他中断打断的...
2、明白了。多谢!

以外的地方随意被中断,里面的vTaskSwitchContext才是任务切换的关键。
页: [1]
查看完整版本: 关于PendSVHandler中断嵌套的问题