You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何PendSV作为最低优先级中断,在RTOS中被设为15?

PendSV优先级数值设置疑问解答

相关FreeRTOS配置代码

/* The lowest interrupt priority that can be used in a call to a "set priority"
function. */
#define configLIBRARY_LOWEST_INTERRUPT_PRIORITY   15
 
/* The highest interrupt priority that can be used by any interrupt service
routine that makes calls to interrupt safe FreeRTOS API functions.  DO NOT CALL
INTERRUPT SAFE FREERTOS API FUNCTIONS FROM ANY INTERRUPT THAT HAS A HIGHER
PRIORITY THAN THIS! (higher priorities are lower numeric values. */
#define configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY 5

疑问

为何作为最低优先级中断的PendSV,在RTOS中被设置为数值15?结合上述FreeRTOS配置代码,我原本预期:若PendSV在main()函数执行后处于最低优先级,其优先级数值应接近0才合理。

解答

核心原因是ARM Cortex-M内核的中断优先级编号规则和你直觉的相反:在Cortex-M架构里,中断优先级的数值越大,实际优先级越低;数值越小,优先级越高——0是系统能设置的最高优先级。

回到FreeRTOS的配置:

  • configLIBRARY_LOWEST_INTERRUPT_PRIORITY定义为15,意思是系统允许使用的**最低优先级(数值最大)**就是15。
  • PendSV的作用是处理RTOS的任务切换,它必须是系统里优先级最低的中断,这样才会在所有高优先级中断、高优先级任务都执行完毕后才触发,绝对不会打断关键的高优先级工作。所以把它设为15,正好匹配配置里定义的最低优先级,完全符合设计需求。

你之前的误区是把优先级数值的逻辑搞反了,调整这个认知后就明白为什么PendSV要设为15了。

内容的提问来源于stack exchange,提问作者Tejas Rane

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 16:12:52