FreeRTOS 中断嵌套

最新的 FreeRTOS 移植中允许中断嵌套。中断嵌套需要在 FreeRTOSConfig.h 中
定义表 表 17 详细列出的一个或两个常量。

表 17 控制中断嵌套的常量
常量                                                                                       描述
configKERNEL_INTERRUPT_PRIORITY 设置系统心跳时钟的中断优先级。
如 果 在 移 植 中 没 有 使 用 常 量
configMAX_SYSCALL_INTERRUPT_PRIORITY ,那
么需要调用中断安全版本 FreeRTOS API
的中断都必须运行在此优先级上。
configMAX_SYSCALL_INTERRUPT_PRIORITY 设置中断安全版本 FreeRTOS API 可以运
行的最高中断优先级。
建立一个全面的中断嵌套模型需要设置 configMAX_SYSCALL_INTERRUPT_PRIRITY
为比 configKERNEL_INTERRUPT_PRIORITY 更高的优先级。这种模型在图35中有所展示。
图 35 所示的情形假定常量 configMAX_SYSCALL_INTERRUPT_PRIRITY 设置为 3,
configKERNEL_INTERRUPT_PRIORITY 设置为 1。同时也假定这种情形基于一个具有七个
不同中断优先及的微控制器。这里的七个优先级仅仅是本例的一种假定,并非对应于任
何一种特定的微控制器架构。
在任务优先级和中断优先级之间常常会产生一些混淆。图 35 所示的中断优先级是
由微控制器架构体系所定义的。中断优先级是硬件控制的优先级,中断服务例程的执行
会与之关联。任务并非运行在中断服务中,所以赋予任务的软件优先级与赋予中断源的
硬件优先级之间没有任何关系。

如图 35 所示:
· 处于中断优先级 1 到 3(含)的中断会被内核或处于临界区的应用程序阻塞执行,但是
它们可以调用中断安全版本的 FreeRTOS API 函数
· 处于中断优先级 4 及以上的中断不受临界区影响,所以其不会被内核的任何行为阻
塞,可以立即得到执行——这是由微控制器本身对中断优先级的限定所决定的。通
常 需 要 严 格 时 间 精 度 的 功 能 ( 如 电 机 控 制 ) 会 使 用 高 于
configMAX_SYSCALL_INTERRUPT_PRIRITY 的优先级,以保证调度器不会对其中断响
应时间造成抖动。
· 不需要调用任何 FreeRTOS API 函数的中断,可以自由地使用任意优先级。

对 对 ARM Cortex M3 用户的一点提示
Cortex M3 使用低优先级号数值表示逻辑上的高优先级中断。这显得不是那么直
观,所以很容易被忘记。如果你想对某个中断赋予低优先级,则必须使用一个高优先级
号数值。千万不要给它指定优先级号 0(或是其它低优先级号数值),因为这将会使得这
个 中 断 在 系 统 中 拥 有 最 高 优 先 级 — — 如 果 这 个 优 先 级 高 于
configMAX_SYSCALL_INTERRUPT_PRIRITY ,将很可能导致系统崩溃。
Cortex M3 内核的最低优先级为 255,但是不同的 Cortex M3 处理器厂商实现的优
先级位数不尽相同,而各自的配套库函数也使用了不同的方式来支持中断优先级。比如
STM32,ST 的驱动库中将最低优先级指定为 15,而最高优先级指定为 0。

  • 14
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一叶知秋yyds

分享是一种美德,感谢金主打赏

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值