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

stm32 freertos 学习尚硅谷 第 2 章FreeRTOS基础知识

多任务处理

单核处理器一次只能执行一项任务。 多任务操作系统可以通过任务之间的快速切换制造并发执行的假象

任务调度

操作系统中任务调度器的责任就是决定在某一时刻要执行哪个任务。调度器是内核中负责决定在任何特定时间应执行哪些任务的部分。内核可以在任务生命周期内多次挂起并且稍后恢复一个任务

任务状态

运行态:只有一个,

就绪态:没有任务,唯一可以直接到运行的状态

阻塞态:等待延时,外部事件

挂起态:vTaskSuspend() 进入挂起态

FreeRTOS 任务有两个很常用的 “不运行” 状态,都依赖滴答计时:
休眠(Suspended)
任务主动说:过多久再叫醒我,时间没到绝不运行。
阻塞(Blocked)
任务在等某个事件(消息、信号量、中断等),同时说:我最多等多久,超时了就不等了。

“什么时候恢复运行”。

xTickCount(滴答计数器)

一个硬件定时器周期性产生中断 → 滴答中断(Tick ISR)
每进一次中断,xTickCount + 1
这个计数就是 FreeRTOS 的系统时间
举例:
滴答频率 1kHz → 1ms 加 1
滴答频率 100Hz → 10ms 加

任务上下文是什么?
任务运行时必须用到的 CPU 资源叫上下文:

“现场”
CPU 寄存器(运算、地址、状态等)
任务堆栈
当前执行到哪一行代码

上下文切换

  • 切出 TaskA:把 CPU 寄存器里的值,存到 TaskA 的堆栈
  • 切入 TaskB:把 TaskB 堆栈里保存的值,恢复回 CPU 寄存器

FreeRTOS 不是随时切换,而是在固定时机触发:
1. 最常见:系统滴答中断(Tick ISR)
每次心跳:
检查延时任务是否唤醒
检查是否有更高优先级任务就绪
需要切换 → 标记触发 PendSV
2. 任务主动让出
任务调用 vTaskDelay
任务等待信号量 / 队列
任务运行完毕主动退出
都会主动请求切换
3. 高优先级任务就绪抢占
低优先级任务正在运行
突然来了更高优先级任务 → 立刻触发切换

真正切换 = 在 PendSV 中断服务函数里做
所有上下文切换代码,都在 PendSV_Handler () 里执行

为什么用 PendSV?(核心优势)
可以软件手动触发(想切就切)
可以设置为最低中断优先级
不会打断其他重要中断
所有中断执行完,最后才做任务切换


怎么触发 PendSV?
向中断寄存器 ICSR 的 bit28 写 1
→ 挂起 PendSV 中断
→ 等所有高优先级中断执行完
→ PendSV 运行 → 执行上下文切换

PendSV 设为 最低优先级,不影响重要中断
触发方式:置位 ICSR 的 bit28
触发时机:滴答中断、任务主动让出、高优先级抢

滴答中断、串口中断、定时器中断这种硬件中断,优先级通常很高

FreeRTOS 强制把 PendSV 设为最低中断优先级

所有硬件中断都执行完了 → 最后才轮到 PendSV 做任务切换

PendSV 可以软件手动触发
想切换任务时,只要写一个寄存器位,就能触发 PendSV

向 ICSR 寄存器的 bit28 写 1

SCB->ICSR |= SCB_ICSR_PENDSVSET_Msk;

挂起 PendSV → 等所有高优先级中断执行完 → 自动进入 PendSV_Handler

PendSV 是什么?

Cortex‑M 为 RTOS 设计的、可软件触发的、最低优先级中断。

PendSV 用来干嘛?

专门执行 FreeRTOS 的上下文切换。

为什么要用它?

不干扰高优先级中断,保证系统实时性,让任务切换安全、延后、统一执行。

总结:

PendSV = FreeRTOS 的任务切换工人,永远等所有紧急中断干完,才最后出来做上下文切换。

http://www.jsqmd.com/news/638534/

相关文章:

  • 从数据到视觉:用UGUI RawImage在Unity里做个交互式温度监控面板(支持动态更新)
  • 解决Spring Boot应用启动超慢问题:深入类加载与Bean初始化
  • 【奇点2026权威发布】:AIAgent任务调度必须绕开的7个LLM原生缺陷(附可验证的调度补偿算法伪代码)
  • 西安特产大秦酥饼:百年非遗技艺,一口酥香品长安 - 企业推荐官【官方】
  • Meta:AIRA2系统突破AI科研Agent瓶颈
  • 《机电安装行业数字化转型样板:陕西高信项目管理系统试运行报告》
  • 前端国际化多语言方案
  • K8s StatefulSet 存储卷持久化机制
  • 上海研倍新材料攻克镁合金SLM 3D打印技术难关,轻量化精密构件性能优于铸件 - 企业推荐官【官方】
  • biliTickerBuy:高效智能的B站会员购抢票神器,告别演唱会门票秒杀烦恼
  • 负载箱的选型方法论与系统集成:从需求分析到全生命周期决策
  • Llama-3.2-3B新手入门:用Ollama一键搭建你的本地AI助手
  • 14讲——最短路问题
  • Redis限流算法全解析与实战优化
  • BKIN 完整链路评估
  • 运维系列虚拟化系列OpenStack系列【仅供参考】:将 instance 连接到 vlan100- 每天5分钟玩转 OpenS(95)创建第二个 vlan network “vlan101“
  • 2026年4月AI智能体培训指南:技术实力与口碑俱佳的机构如何选? - 企业推荐官【官方】
  • 2026万商卡线上变现指南:平台操作教程与避坑技巧 - 团团收购物卡回收
  • Cortex-A7 MPCore 架构
  • 用MediaPipe Objectron和Python做个AR小玩具:实时把桌上的杯子“抓”到屏幕里
  • 手把手教你用LKS32MC07x配置无刷电机PWM(含死区时间与中心对齐模式详解)
  • Hitboxer SOCD清理器架构解析:游戏按键重映射系统的深度优化
  • 忍者像素绘卷:天界画坊算法优化实践:提升像素艺术生成效率
  • IT服务台投入越来越高,效率却没有提升?企业正在忽视的ITSM系统成本陷阱
  • 全球最小气雾化制粉设备问世:上海研倍新材颠覆传统路径,低气压循环氩气技术降低能耗90% - 企业推荐官【官方】
  • 终极WeMod专业版免费解锁指南:Wand-Enhancer完整教程
  • 揭秘万商卡变现线上平台的优选技巧,轻松获取现金! - 团团收购物卡回收
  • 终极B站会员购抢票神器:告别手速比拼,轻松获取心仪漫展门票
  • 做泰国外贸生意,企业该如何预防合作骗局?
  • MogFace人脸检测模型-WebUI实战教程:使用ffmpeg抽帧+批量检测实现视频人脸分析