在学习了有关中断优先级的一些知识之后,我仍然有点困惑,试图理解允许HAL_NVIC_SetPriority()在SysTick_IRQn(每 1 毫秒调用 FreeRTOS 调度程序的 ISR)上调用什么值。
我的一部分认为HAL_NVIC_SetPriority(SysTick_IRQn, 15 ,0U)(可能的最低优先级)和HAL_NVIC_SetPriority(SysTick_IRQn, 10 ,0U)(更高一点)之间的任何内容都是允许的,而我的一部分认为HAL_NVIC_SetPriority(SysTick_IRQn, 15 ,0U)(可能的最低优先级)和HAL_NVIC_SetPriority(SysTick_IRQn, 5 ,0U)(更高一点)之间的任何内容都是允许的。这是假设configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY在 FreeRTOSConfig.h 中设置为 5。令人困惑的是,在 FreeRTOS 中,数字越大优先级越高,但在 STM32 中,数字越高优先级越低,并且文档非常难以理解。
为了证明我已经做出了勇敢的努力,也为了帮助大家帮我填补空白,以下是我目前的理解。我将以这样一种方式写下我所知道的真实情况的描述,看起来像是我在教你,尽管我正在寻求上述问题的答案,以及 更正、确认或补充您认为合适的洞察力。
尽管这可能适用于许多 STM32 微控制器或系列,但让我们特别针对 STM32F207ZG 进行讨论。
注意:STM32CubeF2下载在这里。
如果您查看标准FreeRTOSConfig.h文件(例如:STM32Cube_FW_F2_V1.7.0/Projects/STM322xG_EVAL/Applications/FreeRTOS/FreeRTOS_ThreadCreation/Inc/FreeRTOSConfig.h),您将看到以下内容:
/* Cortex-M specific definitions. */
#ifdef __NVIC_PRIO_BITS
/* __BVIC_PRIO_BITS will be specified when CMSIS is …Run Code Online (Sandbox Code Playgroud)