当前位置: 首页 > news >正文

FreeRTOS硬件中断发生时的现场

        在FreeRTOS中,当硬件中断发生时,当前正在运行的任务会立即被挂起,处理器会跳转到中断相关的中断服务程序中,在中断服务程序执行期间,遵循以下规则:

1、中断独占CPU,ISR拥有最高的执行优先级,在它执行完毕并显示退出之前,没有任何任务能够得到CPU时间片来运行,处理器完全用于执行ISR代码,也就是说,任务和裸奔时的while循环一样,内部怎么调度,那是他们自己的事儿,中断一旦来临,他们都靠边站;

2、中断嵌套,如果系统允许中断嵌套,并且发生了更高级的中断,那么当前ISR会被新的中断抢占,这和裸奔没啥区别;

3、ISR中触发调度,中断服务程序执行完毕以后,会发生哪些事情呢?主要取决于以下几个方面:

(1)、中断是否触发了任务切换,也就是说,在中断中,是否调用了portYIELD_FROM_ISR()接口;

(2)、FreeRTOS调度模式的配置,也就是configUSE_PREEMPTION的配置,如果配置为1,则为抢占式,如果配置为0,则为协作式,一班情况下,都是抢占式;

(3)、是否有更高优先级的任务就绪;

以下是中断退出后系统调度的详细流程和规则:

(1)、中断退出时的核心决策点

        中断退出代码(通常是portYIELD_FROM_ISR(xHigherPriorityTaskWoken或者是portEND_SWITCHING_ISR(xHigherPriorityTaskWoken)),是调度的触发点;

        该宏的参数xHigherPriorityTaskWoken的值是关键的输入;

(2)、调度逻辑

        当xHigherPriorityTaskWoken的值为true时,退出中断后,处理器不会返回到被中断的任务,调度器会检查就绪的任务列表,选择优先级最高的就绪任务运行;

        当xHigherPriorityTaskWoken的值为false时,退出中断后,处理器会返回到被中断的任务继续执行,但是同时调度器会检查就绪的任务列表,在下一个调度点,切换到更高优先级的任务上;

简单的来说:这有点儿类似于篮球场上的换人,中断退出的那一刻(类似于罚球时刻),系统会看中断服务程序有没有要求主动“换人”,如果portYIELD_FROM_ISR(pdTRUE),则表示主动要求“换人”,马上就会换上优先级最高的就绪任务,否则,只能在下一个调度点(类似于暂停等停球点)换上优先级最高的就绪任务;

http://www.lryc.cn/news/607691.html

相关文章:

  • 逻辑回归在银行贷款审批中的应用:参数选择与实践
  • c++详解(宏与内联函数,nullptr)
  • 查看主板信息的3种方法
  • PL-0功能拓展及基于VSCode的IDE配置
  • QT开发---图形与图像(补充)
  • 逻辑斯蒂回归的模型优化
  • 疯狂星期四文案网第26天运营日记
  • 台式机 Server 20.04 CUDA11.8
  • 上海月赛kk
  • 电力系统与变压器实验知识全总结 | 有功无功、同步发电机、短路空载实验、电压调整率、效率条件全讲透!
  • 学习嵌入式第十七天
  • 基于coze studio开源框架二次定制开发教程
  • 幂等性校验(订单重复提交问题)
  • IOMMU Client设备DMA配置过程分析(九)
  • STM32 使用 RTC 实现实时时钟功能
  • C语言:20250801学习(构造类型)
  • 机器学习:开启智能时代的钥匙
  • MySQL 高并发下如何保证事务提交的绝对顺序?
  • 学习笔记:原子操作与锁以及share_ptr的c++实现
  • synchronized 深度剖析:从语法到锁升级的完整演进
  • 什么是Sedex审核?Sedex审核的主要内容,Sedex审核的流程
  • 通用障碍物调研
  • 【C++进阶】一文吃透静态绑定、动态绑定与多态底层机制(含虚函数、vptr、thunk、RTTI)
  • 测试分类:详解各类测试方式与方法
  • 使用gcc代替v语言的tcc编译器提高编译后二进制文件执行速度
  • Trust Management System (TMS)
  • MySQL锁的分类 MVCC和S/X锁的互补关系
  • Linux编程: 10、线程池与初识网络编程
  • GESP2025年6月认证C++八级( 第三部分编程题(1)树上旅行)
  • 链表【各种题型+对应LeetCode习题练习】