运行 FreeRTOS:软件定时器与低功耗管理
1. FreeRTOS 中断优先级管理
在 FreeRTOS 中,某些内核允许基于优先级选择性地屏蔽中断。BASEPRI 寄存器可通过屏蔽所有优先级低于给定值的 IRQ,选择性地禁用 ISR 执行。FreeRTOS 利用此机制,在挂起低优先级中断的同时,允许执行假定不可中断的高优先级中断。
这意味着并非所有 ISR 都能安全调用 FreeRTOS API,只有具有给定(或更低)优先级的 ISR 才能安全调用。我们可通过在 FreeRTOSConfig.h 文件中定义 configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY 宏来设置此最大优先级。CubeMX 通常会自动将最大优先级设置为 5。使用 CubeMX 启用 IRQ 时,要确保调用 FreeRTOS 函数的 ISR 优先级等于或低于 configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY 。
不过,对于 STM32F0/L0 系列 MCU,尽管 CubeMX 生成的项目中定义了该宏,但由于这些系列的 FreeRTOS 端口使用 PRIMASK 寄存器屏蔽所有中断(Cortex - M0/0 + 内核无法选择性禁用 IRQ),该宏会被忽略。
另外,FreeRTOS 要求将滴答中断(与用作内核时基发生器的定时器相关的 IRQ)设置为最低可能的中断,STM32F0/L0 系列为 7,其他 MCU 为 15。 FreeRTOSConfig.h 文件中的 config
订阅专栏 解锁全文
199

被折叠的 条评论
为什么被折叠?



