FreeRTOS内核:详解Task各状态(GPT4帮写)

news2024/9/28 5:27:30

FreeRTOS内核:详解Task各状态(GPT4帮写)

  • 1. 背景
  • 2. Task顶层状态区分
  • 3. 运行状态(Running)
  • 4. 非运行状态
    • 4.1 阻塞态(Blocked):
    • 4.2 挂起态(Suspended)
    • 4.3 就绪态(Ready)
  • 总结:
  • 博主热门文章推荐:
  • 附:GPT4 output:

(注:本文部分文案由ChatGPT辅助生成,但内容均经过Howie审核和优化,放心使用。)


1. 背景

在嵌入式系统中,任务(Task)是指系统中的最小执行单元,它可以是一个简单的函数或者是一个包含多个子任务的复杂任务。
而FreeRTOS是一个基于优先级调度的实时操作系统,因此任务状态的变化对系统的稳定性和性能有着至关重要的影响。

因此,了解FreeRTOS各个任务状态的含义和变化规律对于开发人员来说是非常重要的。


2. Task顶层状态区分

从顶层状态区分,FreeRTOS只分为运行和非运行状态,并且会在这两种状态不断切换,以实现操作系统功能:

在这里插入图片描述


3. 运行状态(Running)

  • Running:表示任务正在执行。

当FreeRTOS某个任务处于运行态时,处理器就正在执行它的代码。


4. 非运行状态

当一个任务处于非运行态时,它的所有状态Context都被保存,以便在下一次调度器决定让它进入运行态时可以恢复执行。

非运行态又细分为Ready、Blocked、Suspended、Deleted和Invalid几种状态,

下图为整体关系图:
在这里插入图片描述

task各状态间切换实现如下:

  • 任务从Running状态转换为Blocked状态,是由任务自己主动调用FreeRTOS提供的阻塞函数来实现的,比如等待一个信号量或者一个消息队列。
  • 任务从Ready状态转换为Running状态,是由调度器自动完成的,调度器会根据任务的优先级来决定下一个要执行的任务。
  • 任务从Running状态转换为Blocked状态,是由任务自己主动调用FreeRTOS提供的阻塞函数来实现的,比如等待一个信号量或者一个消息队列。
  • 任务从Blocked状态转换为Ready状态,是由任务自己主动解除阻塞来实现的,比如接收到了一个信号量或者一个消息队列。
  • 任务从Running状态转换为Suspended状态,是由任务自己主动调用vTaskSuspend()函数来实现的。
  • 任务从Suspended状态转换为Ready状态,是由任务自己主动调用vTaskResume()函数来实现的。
  • 任务从任何状态转换为Deleted状态,都是由任务自己主动调用vTaskDelete()函数来实现的。

几个关键的task状态详细介绍如下:

4.1 阻塞态(Blocked):

  • Blocked:如果一个任务等待某个事件的发生,则该task处于阻塞Blocked,比如等待一个信号量或者一个消息队列。

Blocked是非运行态的一种,也是FreeRTOS正常工作情况频繁的一种状态,表示task由于某些原因无法执行。

Task可以进入阻塞态以等待以下两种不同的Event:

  1. 时间相关Event,如定时、延时,比如某个task可进入阻塞态延时1s。

例如调用vTaskDelay(Tickes)的task将进入阻塞态,经延迟指定时间Ticks后,再转移到就绪态。

  1. 同步相关Event,等待其他task或中断产生的事件:如某task进入阻塞态等待队列有数据到来,数据可能是其他task或中断产生。

FreeRTOS实现同步方法:队列、二值信号量、计数信号量、互斥信号量和互斥量等。

Task可以在进入blocked等待同步Event时制定一个超时时间。比如,某task等待队列中数据到来,但最多只等1s,如果超过1s还没有数据也会退出阻塞态进入运行态。

4.2 挂起态(Suspended)

  • Suspended:表示任务被暂停,此时任务不会被调度执行。

Suspended也是非运行态的一种。Suspended的task对于scheduler是不可见的

  • 调用vTaskSuspend()挂起task,
  • 再调用vTaskResume()来唤醒Task

大多数应用程序中都不会用到挂起状态。

4.3 就绪态(Ready)

  • Ready:表示任务已经准备好执行,但还没有得到CPU资源去运行Running。

Ready既Task等待执行的状态。
如果task处于非运行状态,但既没有blocked也没有suspended,则此时为Ready to running,但尚未运行。

总结:

FreeRTOS提供了多种任务状态,可以满足不同的应用场景。开发人员可以根据实际需求选择合适的状态,并根据变化规律编写相应的代码来实现任务的状态转换。

FreeRTOS各个任务状态的含义和变化规律是嵌入式系统开发中非常重要的一部分。掌握这些知识可以帮助开发人员更好地理解任务的工作原理,并且可以编写出更加高效、稳定的嵌入式系统


博主热门文章推荐:

在这里插入图片描述

一篇读懂系列:

  • 一篇读懂无线充电技术(附方案选型及原理分析)
  • 一篇读懂:Android/iOS手机如何通过音频接口(耳机孔)与外设通信
  • 一篇读懂:Android手机如何通过USB接口与外设通信(附原理分析及方案选型)

LoRa Mesh系列:

  • LoRa学习:LoRa关键参数(扩频因子,编码率,带宽)的设定及解释
  • LoRa学习:信道占用检测原理(CAD)
  • LoRa/FSK 无线频谱波形分析(频谱分析仪测试LoRa/FSK带宽、功率、频率误差等)

网络安全系列:

  • ATECC508A芯片开发笔记(一):初识加密芯片
  • SHA/HMAC/AES-CBC/CTR 算法执行效率及RAM消耗 测试结果
  • 常见加密/签名/哈希算法性能比较 (多平台 AES/DES, DH, ECDSA, RSA等)
  • AES加解密效率测试(纯软件AES128/256)–以嵌入式Cortex-M0与M3 平台为例

嵌入式开发系列:

  • 嵌入式学习中较好的练手项目和课题整理(附代码资料、学习视频和嵌入式学习规划)
  • IAR调试使用技巧汇总:数据断点、CallStack、设置堆栈、查看栈使用和栈深度、Memory、Set Next Statement等
  • Linux内核编译配置(Menuconfig)、制作文件系统 详细步骤
  • Android底层调用C代码(JNI实现)
  • 树莓派到手第一步:上电启动、安装中文字体、虚拟键盘、开启SSH等
  • Android/Linux设备有线&无线 双网共存(同时上内、外网)

AI / 机器学习系列:

  • AI: 机器学习必须懂的几个术语:Lable、Feature、Model…
  • AI:卷积神经网络CNN 解决过拟合的方法 (Overcome Overfitting)
  • AI: 什么是机器学习的数据清洗(Data Cleaning)
  • AI: 机器学习的模型是如何训练的?(在试错中学习)
  • 数据可视化:TensorboardX安装及使用(安装测试+实例演示)

附:GPT4 output:

在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/503922.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

K8s基础8——svc基础使用、应用暴露、iptables代理、ipvs代理

文章目录 一、Service基本了解二、Service定义与创建2.1 相关命令2.2 yaml文件参数大全2.3 创建svc2.3.1 两种创建方式类比2.3.2 验证集群内A应用访问B应用2.3.3 将集群外服务定义为K8s的svc2.3.4 分配多个端口 2.4 常用三种类型2.4.1 ClusterIP(集群内部访问&#…

如何解决Redis的双写一致性

目录 1.更新策略2.问题场景3.解决方案 1.更新策略 Redis和MySQL的默认的更新策略是旁路缓存策略,旁路缓存策略又有写策略和读策略 写策略:更新时,先更新数据库,再更新缓存 读策略:读取数据时,如果命中缓…

自动驾驶——Smooth Local Planning

7.1参数曲线 在本模块中,我们将讨论分层运动规划器的最低级别,即局部规划器。作为提醒,局部规划器是分层规划器的一部分,它以无碰撞、高效和舒适的方式执行行为规划器所要求的机动。这导致轨迹,即在给定时间空间中的一…

【C++入门】auto关键字(C++11) + 指针空值nullptr(C++11)

👦个人主页:Weraphael ✍🏻作者简介:目前学习C和算法 ✈️专栏:C航路 🐋 希望大家多多支持,咱一起进步!😁 如果文章对你有帮助的话 欢迎 评论💬 点赞&#x1…

【谷粒商城之ThreadLocal用户身份鉴别】

本笔记内容为尚硅谷谷粒商城购物车ThreadLocal用户身份鉴别部分 目录 ThreadLocal 1.导入依赖 2.编写配置 3.配置Session 4.cookie中的user-key说明 5.编写To与常量 6.编写拦截器 7.添加拦截器的WebConfig配置类 8.Debug测试UserInfoTo中是否有数据 ThreadLocal T…

一篇文章搞定time_wait状态的诸多问题

今天聊聊 TIME_WAIT。 如果看过本文之后,你能够对如下“夺命连环问”做到胸中自有沟壑,则我心甚慰: 你觉得一台机器上看到多少 TIME_WAIT 属于不正常状态? 你觉得出现 TIME_WAIT 相关异常后,会对应用程序造成什么样的…

虚拟化技术简介

文章目录 前言一、什么是虚拟化?二、虚拟化的实现条件三、常见的虚拟化软件产品四、如何查看自己电脑是否支持虚拟化 前言 对于虚拟化技术的简单介绍。 一、什么是虚拟化? 将一台物理计算机虚拟为多台逻辑计算机。在一台计算机上同时运行多个虚拟机&am…

Oracle DataGuard奇怪的ORA-16494错误

Oracle数据库DataGuard数据无法同步,主库查询v$archive_dest出现ORA-16494错误。 数据库版本Oracle 12.1.0.2.0: SQL> select * from v$version;BANNER --------------------------------------------------------------------------------CON_ID --…

【深度学习】基于华为MindSpore和pytorch的卷积神经网络LeNet5实现MNIST手写识别

1 实验内容简介 1.1 实验目的 (1)熟练掌握卷积、池化概念; (2)熟练掌握卷积神经网络的基本原理; (3)熟练掌握各种卷积神经网络框架单元; (4)…

【Java笔试强训 32】

🎉🎉🎉点进来你就是我的人了博主主页:🙈🙈🙈戳一戳,欢迎大佬指点! 欢迎志同道合的朋友一起加油喔🤺🤺🤺 目录 一、选择题 二、编程题 🔥淘宝网店…

初识Vue-事件 样式

目录 事件 事件修饰符 自定义事件 双向绑定 样式style class style Scoped(防止样式污染) 事件 <button click"add($event, 2)">add</button> add(event, num) {event.stopPropagation()// 防止冒泡this.count num; // this在方法里指向当前Vu…

YOLOv5改进系列(1)——添加SE注意力机制

前言 从这篇开始我们进入YOLOv5改进系列。那就先从最简单的添加注意力机制开始吧&#xff01;&#xff08;&#xffe3;︶&#xffe3;&#xff09;↗ 【YOLOv5改进系列】前期回顾&#xff1a; YOLOv5改进系列&#xff08;0&#xff09;——重要性能指标与训练结果评价及分…

Tomcat线程池扩展总结

Tomcat 线程池 前言 最近在压测接口&#xff0c;调线程池参数大小&#xff0c;感觉和预计的不一样。 看了看 tomcat 线程池源码 对比 JDK 线程池源码 源码 构造代码 这里是提交任务 可以看到 这里重写了 TaskQueue 类 可以看到 重写了offer方法 增加了这一行判断&#x…

ePWM模块-时基模块(2)

ePWM模块(2) 时基模块的使用 TBPRD:周期寄存器 (设置的时钟周期存入此,可通过阴影寄存器缓冲后写入,也可通过活动寄存器立即写入) TBCTR:时基计数变值寄存器 (时基当前所计数的值存入,用于和所设定周期值比较) TBPHS:时基相位寄存器 TBSTS:时基状态寄存器 …

Transformer 论文精读——Attention Is All You Need

https://www.bilibili.com/video/BV1pu411o7BE 摘要 序列转录模型是从一个序列生成另一个序列。Transformer 仅利用注意力机制&#xff08;attention&#xff09;&#xff0c;并且在机器翻译领域取得很好的成功。 结论 Transformer 重要贡献之一提出&#xff1a;multi-head…

C++实现二分查找(力扣题目704)

题目要求&#xff1a;给定一个n个元素的&#xff08;升序&#xff09;整型数组nums和一个目标值target&#xff0c;写一个函数搜索nums中的target&#xff0c;如果目标值存在返回下标&#xff0c;否则返回-1 示例 输入: nums [-1,0,3,5,9,12] target 9 输出: 4 解释: 9 出现在…

Coursera—Andrew Ng机器学习—课程笔记 Lecture 3_Linear Algebra Review

3.1 矩阵和向量   参考视频: 3 - 1 - Matrices and Vectors (9 min).mkv 3.2 加法和标量乘法 参考视频: 3 - 2 - Addition and Scalar Multiplication (7 min).mkv 3.3 矩阵向量乘法 参考视频: 3 - 3 - Matrix Vector Multiplication (14 min).mkv 3.4 矩阵乘法 参考视频:…

[Pandas] 读取Excel文件

练习数据准备 demo.xlsx demo.xlsx中的工作表Sheet1显示上述的数据&#xff0c;Sheet2没有数据 我们可以使用Pandas中的read_excel()方法读取Excel格式的数据文件&#xff0c;生成DataFrame数据框进行数据分析处理 基本语法格式 import pandas as pd pd.read_excel(io, sheet…

JVM内存模型介绍

JVM(Java Virtual Machine)又被分为三大子系统&#xff0c;类加载子系统&#xff0c;运行时数据区&#xff0c;执行引擎。在这里我们主要讲解一下JVM的运行时数据区&#xff0c;也就是我们常说的JVM存储数据的内存模型。在这里提一点&#xff0c;平常我们常说内存模型&#xff…

行业趣闻 | 在施工现场“打灰”,挺好的?

房地产市场的不景气对土木行业的冲击、某某大学土木工程专业招不到人、某央企施工人员因吐槽土木行业现状而被辞退…… 面对互联网上诸多对土木行业的调侃和流言&#xff0c;许多土木工程专业的同学变得迷茫了。 这个行业的实际情况究竟是怎样的&#xff1f; 图源网络 2018年10…