STM32——FreeRTOS - 中断管理*

发布时间:2026/7/21 5:41:14
STM32——FreeRTOS - 中断管理* STM32——学习总纲-CSDN博客一、什么是中断二、中断优先级分组设置最大 256个中断优先级一般芯片厂家用不到这么多优先级。这四位又分为 抢占 优先级 和 子 优先级由中断优先级分组设置中断优先级分组设置Free RTOS为了方便管理统一使用 Group_4的方式全部优先级设为抢占优先级。特点三、中断相关寄存器系统寄存器每个寄存器32bit中断屏蔽寄存器这里的 0x50是因为ST芯片第四位不用所以赋值优先级5放到高四位实现方式#define portDISABLE_INTERRUPTS() vPortRaiseBASEPRI() static portFORCE_INLINE void vPortRaiseBASEPRI( void ) { uint32_t ulNewBASEPRI configMAX_SYSCALL_INTERRUPT_PRIORITY; __asm { /* Set BASEPRI to the max syscall priority to effect a critical * section. */ /* *INDENT-OFF* */ msr basepri, ulNewBASEPRI dsb isb /* *INDENT-ON* */ } }BASEPRI 设置为 0x50简单记忆**************************************************************************************************************FreeRTOS 如何 “管理” 被 BASEPRI 屏蔽、硬件挂起的中断完整流程进入临界区设置 BASEPRI屏蔽低于阈值的普通中断中断触发后 NVIC 自动置 PENDING 挂起请求不会丢失仅延后执行。退出临界区清 BASEPRI 屏蔽CPU 按优先级依次处理所有挂起中断。该类中断优先级低于configMAX_SYSCALL_INTERRUPT_PRIORITY允许调用FromISR内核接口高优先级中断不受 BASEPRI 屏蔽禁止操作 RTOS 内核。若中断唤醒更高优先级任务不会立刻切换仅置位 PendSV 挂起标志。全部挂起中断执行完毕后进入 PendSV 中断由 FreeRTOS 完成上下文切换与任务调度。补充总结中断挂起是硬件 NVIC 机制FreeRTOS 只负责管控中断内内核操作、延迟调度保证临界区内核数据不被破坏。1、硬件层不由 RTOS 控制中断来了自动挂起是 NVIC 硬件行为RTOS 只是配置 BASEPRI 阈值来控制屏蔽范围2、调度处理层完全由 RTOS 管理划定可使用内核 API 的中断范围中断调用 FromISR API 唤醒了一个优先级比当前运行任务更高的任务时依靠 PendSV 延迟切换统一处理所有临界区放行后批量到来的挂起中断保证内核数据安全、任务调度有序3、总结执行 taskEXIT_CRITICAL 清零 BASEPRI 后 FreeRTOS 才统一处理调度这些被挂起的中断。**************************************************************************************************************四、FreeRTOS中断管理实验五、课堂总结