FreeRTOS-中断的嵌套和竞争

  • 对于FreeRTOS最好不去用中断嵌套,中断嵌套会增加堆栈空间的使用,因为每个中断服务程序都需要保存和恢复寄存器状态,这可能会耗尽有限的堆栈空间,从而导致系统故障。以及中断嵌套时,不同的中断服务程序可能会竞争访问共享资源,从而增加死锁的风险。这可能会导致系统出现故障或瘫痪。
  • FreeRTOS的中断的嵌套和竞争:中断的嵌套(Interrupt Nesting)是指当一个中断正在执行时,可以被另一个更高优先级的中断所中断。中断可以打断具有较低逻辑优先级的任何中断,但是中断不能打断具有相同或更高逻辑优先级的任何中断。

  • HAL_NVIC_SetPriorityGrouping() 函数来配置优先级分组方式,就是确定不同中断的抢占优先级与子优先级的关系。NVIC_PriorityGroup_4 的话,那 4 位优先级就都全是抢占优先级了,没有子优先级,也就是说下面的SubPriority 子优先级都应该为0

### FreeRTOS嵌套中断的工作原理及实现 #### 1. 嵌套中断的基础概念 在 FreeRTOS 中,嵌套中断是指多个中断可以在同一时间发生,并且高优先级的中断可以打断低优先级的中断处理过程。这种机制允许更紧急的任务或事件得到更快响应[^1]。 当一个中断正在执行其服务程序 (ISR, Interrupt Service Routine),另一个更高优先级的中断触发时,当前 ISR 将被挂起并保存上下文,随后 CPU 转向新的高优先级中断进行处理。一旦高优先级中断完成,CPU 返回继续执行之前未完成的较低优先级 ISR[^2]。 #### 2. 配置与限制条件 为了支持嵌套中断FreeRTOS 提供了一个配置参数 `configMAX_SYSCALL_INTERRUPT_PRIORITY`,用于定义哪些中断级别会被内核屏蔽以及哪些不会受到影响。具体来说: - **低于或等于此值的优先级**:这些中断可能会受到 RTOS 内核的影响,在某些情况下可能被暂时禁用。 - **高于此值的优先级**:这些中断完全独立于 RTOS 运行环境之外工作,即使在任务切换期间也不会被阻止。这意味着它们能够满足严格的实时需求。 #### 3. 实现细节分析 以下是关于如何通过硬件特性配合软件设计来达成有效管理嵌套中断的一些要点: ##### (1)全局中断使能控制 在 Cortex-M 架构下,可以通过设置 PRIMASK 寄存器或者 BASEPRI 来有条件地关闭特定范围内的中断请求。对于 FreeRTOS 而言,默认采用的是基于 BASEPRI 的方法,因为它提供了更加精细粒度的选择能力,从而更好地适应多层嵌套场景下的调度需求。 ##### (2)任务上下文保护策略 每当进入一个新的中断层次前都需要妥善保管好原有状态信息以便后续恢复操作正常运行。这通常涉及寄存器堆栈压入动作以保留现场数据;而出错则需相应弹出来重建先前的状态[^3]。 ##### (3)临界区处理技术 为了避免竞争状况的发生,在访问共享资源的时候往往需要创建所谓的“临界区域”。在此区域内不允许任何其他形式的干扰源介入其中直到整个事务结束为止。为此目的专门设置了宏函数 portENTER_CRITICAL() portEXIT_CRITICAL() ,用来临时提升系统的整体敏感程度直至最低可接受阈限之下再恢复正常运作模式。 ```c // 示例代码展示如何在一个安全的方式下调用 API 函数从 ISRs 中发送消息给队列 void vAnInterruptHandler( void ) { uint8_t ucData; // 获取一些数据... ucData = readSomeData(); // 发送该数据至某个队列对象上 xQueueSendFromISR( xQueue, &ucData, pdFALSE ); } ``` 上述例子展示了怎样利用 FreeRTOS 扩展功能——即来自 ISR 版本的消息传递接口——有效地促进不同级别的异步通信流程之间无缝衔接起来的同时还保持良好的性能表现水平。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

梅尔文

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值