FreeRTOS中断理解

📅 2026/6/25 18:31:09
FreeRTOS中断理解
FREERTOS中断可以看下面这篇文章:05-FreeRTOS中断管理简介问题1:最低优先级禁止抢占啥意思回答:一、先纠正两个关键基础规则(Cortex-M + FreeRTOS Group4)中断优先级数值越小,优先级越高0 1 2 ... 15,15 是全系统最低中断优先级;FreeRTOS 固定分组 4:4 位全是抢占优先级,只要抢占优先级更高,就能打断正在运行的中断(中断嵌套)。表格里:N =configMAX_SYSCALL_INTERRUPT_PRIORITY(分界阈值)M = 14,M+1 = 15,也就是PendSV、SysTick 固定设为 15,是整个系统最低的中断优先级。二、“最低优先级区域禁止抢占” 两层含义1. 第一层:外部任何中断都能抢占它,它抢不了任何人最低优先级区间是 15(SysTick/PendSV):只要当前有别的中断在运行(0~14 任意优先级),SysTick/PendSV 触发了也不能打断别人,必须排队等所有中断执行完;反过来:只要 SysTick/PendSV 正在运行,随便一个外设中断(UART、定时器等)都能立刻抢占、打断它。 这就是 “禁止抢占别人”—— 它没有抢占其他中断的资格。2. 第二层:系统设计层面,不允许用这两个中断去抢占业务中断FreeRTOS 把 SysTick、PendSV 设为最低优先级的核心目的: 优先保障硬件外设、紧急故障中断实时响应,任务切换操作必须让步于所有硬件事件。假如 SysTick 优先级很高,它就会抢占 UART、定时器中断,导致串口丢数据、定时不准;现在它优先级最低,任何外设中断来了都能打断调度流程,硬件实时性优先。三、区分表格三行的 “禁止” 含义(别混淆)最高优先级 (0~N):禁止调用 FreeRTOS API这类中断不受 RTOS 管控,不能用队列、信号量等 RTOS 函数,和抢占无关;可屏蔽中断 (N+1~M):允许调用 FromISR 系列 API日常外设中断,优先级中等,既能被高优先级硬件中断抢占,也能抢占系统 SysTick/PendSV;最低优先级 (M+1~15):禁止抢占指无法抢占任何其他中断,所有中断都能抢占它,它只能在无任何中断运行时才能执行。举个直观例子假设:外部 UART 中断优先级 = 5(可屏蔽区间,N+1~M)SysTick 优先级 = 15(最低区间) 场景 1:UART 中断正在接收数据,此时 SysTick 计时到触发中断 → SysTick 优先级更低,不能抢占 UART,只能等串口中断处理完再执行 SysTick; 场景 2:SysTick 正在运行,此时 UART 收到数据触发中断 → UART 优先级更高,直接抢占 SysTick,立刻处理串口数据。补充:为什么写 “禁止抢占” 而不是 “不能被抢占”文字表述是站在 SysTick/PendSV 自身视角: 它没有抢占其他中断的能力,所以总结为 “禁止抢占”; 而高、中优先级中断,都具备抢占更低级别中断