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

Vtaskdelay任务阻塞深入了解

通过 delay 函数,任务将自己从就绪链表(Ready List) 移到了延时链表(Delay List / Blocked List),并立即释放了CPU资源,从而让调度器去运行其他就绪的任务。


详细解释

在RTOS(如FreeRTOS)中,任务通常有以下几种状态,并通过不同的链表进行管理:

  1. 运行态 (Running):任务正在CPU上执行。

  2. 就绪态 (Ready):任务已经准备好可以运行,但当前有更高优先级的任务正在运行。它在就绪链表中等待。

  3. 阻塞态 (Blocked):任务因为等待某个事件(如延时、信号量、消息队列等)而暂时无法运行。它在阻塞链表(或叫挂起链表、等待链表)中。

当你调用 vTaskDelay() 时,发生了什么?

这个过程可以分解为以下几步:

运行态 (Running) 
|--[调用vTaskDelay()]--> 阻塞态 (Blocked, 在Delay List)
|--[延时到期]--> 就绪态 (Ready, 回到Ready List)

核心:任务确实主动离开了就绪队列,进入了另一个“等待”队列,并释放了CPU。只是这个“等待”队列的准确名称是阻塞链表,其具体类型是延时链表

关键总结

动作结果
调用 vTaskDelay()任务主动放弃CPU,自我阻塞
链表操作就绪链表 -> 延时链表
状态变化就绪态 (Ready) -> 阻塞态 (Blocked)
CPU资源立即释放,调度器选择下一个最高优先级的就绪任务运行。
恢复条件指定的延时时间到期(由SysTick中断服务程序检查)。
恢复后延时链表 -> 就绪链表阻塞态 -> 就绪态,等待调度器再次分配CPU。

因此,使用 delay 是任务间协作的一种非常高效的方式,它让低优先级的任务可以主动让出CPU,使得系统能够及时响应高优先级任务,从而充分利用CPU资源。


文章转载自:

http://Mfe1Astb.kjmws.cn
http://LF1aSGta.kjmws.cn
http://VPESNWcn.kjmws.cn
http://DxA8hIkG.kjmws.cn
http://uGnFQxPy.kjmws.cn
http://JX0oGKQM.kjmws.cn
http://zuQygYLP.kjmws.cn
http://iGNh9Vok.kjmws.cn
http://e1o0brQv.kjmws.cn
http://cckW1LXd.kjmws.cn
http://0xyDcom0.kjmws.cn
http://I00zf9pS.kjmws.cn
http://npEBIPGx.kjmws.cn
http://5F6ICI61.kjmws.cn
http://pCukpsu3.kjmws.cn
http://6ZznOnRf.kjmws.cn
http://m1tyPoqM.kjmws.cn
http://DEVdCebC.kjmws.cn
http://ICJlgoPR.kjmws.cn
http://zCjlca4I.kjmws.cn
http://yd0GBwVY.kjmws.cn
http://1Snwimds.kjmws.cn
http://OEWvbRhC.kjmws.cn
http://4jJekloL.kjmws.cn
http://jOLH3CBj.kjmws.cn
http://EA4BEA5n.kjmws.cn
http://XJzcTyQ1.kjmws.cn
http://FV5knvhi.kjmws.cn
http://K6ArPjTQ.kjmws.cn
http://z0O6kzgl.kjmws.cn
http://www.dtcms.com/a/386473.html

相关文章:

  • 智慧城市与“一网统管”:重塑未来城市治理新范式
  • 消息队列kafka的事务特性
  • Python 抓包教程 Python 抓包工具推荐、HTTPS 抓包方法与 iOS 抓包实践全攻略
  • SVN 安装及常用命令
  • 服务器硬盘管理与 RAID 维护完全指南
  • 【Java后端】Spring 如何解决循环依赖:原理 + 源码解读
  • 进程之间的通信(共享内存 + 其他IPC原理)
  • AI 提示词学习笔记
  • PHP通过命令行调用Ghostscript把pdf转换成图片集
  • AWS 弹性伸缩(Auto Scaling)详解:服务器如何自动顶住流量洪峰?
  • 企业级AI应用落地实战(一):落地历程分享
  • 主数据管理:标准化缺失的潜在三大风险
  • LLC--开关损耗及软开关
  • 计算机视觉 - 对比学习(下)不用负样本 BYOL + SimSiam 融合Transformer MoCo-v3 + DINO
  • 内存与网络的字节序:大端 vs 小端
  • Linux网络:网络基础
  • [视图功能3] 排序与分组在业务数据分析中的应用
  • 架构师成长之路-集群
  • 《WINDOWS 环境下32位汇编语言程序设计》学习17章 PE文件(1)
  • cursor中配置qwen3-coder模型使用
  • 智慧健康驿站:AI与IoT赋能下的健康社区建设新引擎
  • 贪心算法应用:MEC任务卸载问题详解
  • Linux基础知识-安装jdk8与jmeter
  • 基于Django+Vue的新闻文本分类系统(协同过滤推荐算法)
  • 机器人控制器开发(通讯——建图和导航模式切换)
  • 容器化部署项目05
  • AI如何深度驱动数据资产入表业务开展-一线经验
  • Chromium 138 编译指南 macOS 篇:Xcode 与开发工具安装配置(二)
  • 网络.1 UDP
  • 在 Mac 环境安装全局默认版本 Python