硬汉嵌入式论坛

 找回密码
 立即注册
查看: 2302|回复: 4
收起左侧

[FreeRTOS] 关于PendSVHandler中断嵌套的问题

[复制链接]

76

主题

237

回帖

465

积分

高级会员

积分
465
发表于 2019-6-26 08:57:36 | 显示全部楼层 |阅读模式
看了下FreeRTOS的源码,有一个疑问,就是如果执行PendSVHandler中断处理函数实现任务切换的过程中又来了一个中断ISR1,由于PendSVHandler中断的优先级最低,所以这个中断会被打断,转而执行ISR1,在ISR1结束时又会去执行任务切换,再一次触发PendSVHandler,这样就会出现两个PendSVHandler,程序会怎么处理?丢掉一个吗?还是说执行两遍PendSVHandler?我看了下PendSVHandler函数,里面并没有关中断的操作。
还有一个情况,有两个ISR,一个高优先级的ISR1,一个低优先级的ISR2,首先执行ISR2,过程中来了ISR1,ISR1执行完毕后触发一次PendSVHandler,ISR1退出后转而继续执行之前被打断的ISR2,ISR2执行完毕后又触发一次PendSVHandler,这样有两个PendSVHandler,是丢掉一个还是执行两遍PendSVHandler?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106660
QQ
发表于 2019-6-26 09:05:36 | 显示全部楼层
1、这个就是开关中断,在任务切换的关键部分做的开关
555.jpg

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

使用道具 举报

76

主题

237

回帖

465

积分

高级会员

积分
465
 楼主| 发表于 2019-6-26 09:49:30 | 显示全部楼层
1、画红框以外的地方还是会被其他中断打断的...
2、明白了。多谢!
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106660
QQ
发表于 2019-6-26 09:52:44 | 显示全部楼层
kokoromi 发表于 2019-6-26 09:49
1、画红框以外的地方还是会被其他中断打断的...
2、明白了。多谢!

以外的地方随意被中断,里面的vTaskSwitchContext才是任务切换的关键。

点评

大佬的回复总是这么及时,厉害了。  发表于 2019-6-26 10:05
回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-4-28 19:32 , Processed in 0.170296 second(s), 29 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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