RTOS笔记--任务状态与调度

任务状态

        freertos中的任务分为四个状态:就绪状态(ready)、运行状态(running)、阻塞状态(blocked)、暂停状态(suspended)

完整的任务状态转换图:

在使用vTaskDelay函数后任务就会转换为阻塞态,阻塞态下需要等待某个时间或某个事件才可以进入准备态随时被调用。

任务在除了暂停状态以外的任何状态都可以通过调用vTaskSuspend函数使得任务进入暂停状态,任务在运行中自行调用,非运行态则可以通过别的运行中的任务调用来令其进入暂停态。在暂停状态下可以调用vTaskResume函数恢复

任务管理与调度

关于优先级

        A.高优先级的任务未运行结束低优先级任务无法运行

        B.一旦高优先级的任务就绪就立刻运行

        C.同优先级的任务轮流运行

在代码中通过链表的方式进行任务管理,在代码宏定义中:

pxReadyTaskLists数组中存放56个链表,而本程序中的最高优先级为56,而这其中每一个链表放置的就是同优先级处于就绪态或运行态的任务TCB结构体

在创建任务的同时还会创建一个pxCurrentTCB指针指向最高优先级的任务,假设有ABC三个同优先级任务按顺序创建,A创建时指向A,B创建时指向B,C创建时指向C,在开启任务调度器后就会从指针处开始运行,因此同优先级最后一个创建的任务最先运行 

在FREERTOS中定义一个1000hz的时钟频率作为tick中断依据,在运行1ms后产生tick中断,中断中设置cnt++作为时钟基准并发起调度,调度的过程就是从上到下遍历pxReadyTaskLists数组中的56个链表,找到第一个非空的链表,使得pxCurrentTCB指针指向下一个任务,每次tick中断就会触发一次调度

高优先级任务可以无需tick调度直接在低优先级任务运行过程中进行抢占,例如,有AB两个任务,B任务优先级高于A任务,那么如果A任务在运行过程中B任务被置于就绪态则B任务会直接抢占开始运行,无需等待tick中断调度,然后在高优先级任务运行中使用DELAY函数则会将其从pxReadyTaskLists中的链表中取出放入xDelayedTaskList1进入阻塞态,并寻找立即下一个运行的任务,在低优先级的任务被抢占时会记录一个index指针指向被抢占的任务,此时就调用此任务。

存放在xDelayedTaskList1链表中的任务的TCB结构体中都会保存有需要等待的时间,而在tick中断时还会判断一下xDelayedTaskList1中的任务是否可恢复,如果可恢复则将其放入pxReadyTaskLists中的链表里,然后再发起调度。

在对任务调用vTaskSuspend函数后将其放入xSuspendedTaskList链表中,在暂停态下无法通过tick中断的判断重新进入就绪态,只能通过调用vTaskResume函数使其回归就绪态

调度总结:

        调度本质上就是链表管理,任务在不同状态下存入不同链表

        rtos中设置tick中断,而tick中断时进行的操作为:

                a.设置cnt++

                b.判断一下xDelayedTaskList1中的任务是否可恢复,如果可恢复则将其放入       pxReadyTaskLists中的链表里

                c.发起调度

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

04--Tomcat

前言:本章整理tomcat的知识点,tomcat知识点相较nginx比较少,但是也是运维必会的软件,这里结合实际项目整理一下。 1、tomcat简介 Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器&#x…

在线建站流程分析

建站流程是指通过互联网创建一个个人或企业网站的过程。随着互联网的发展,越来越多的人和机构开始意识到网络的重要性,建站成为一种常见的行为。在线建站的流程一般包括以下几个步骤。 首先,选择一个合适的建站平台。目前,有很多在…

英伟达Docker 安装与GPu镜像拉取

获取nvidia_docker压缩包nvidia_docker.tgz将压缩包上传至服务器指定目录解压nvidia_docker.tgz压缩包 tar -zxvf 压缩包执行rpm安装命令: #查看指定rpm包安装情况 rpm -qa | grep libstdc #查看指定rpm包下的依赖包的版本情况 strings /lib64/libstdc |grep GLI…

这才是大模型价格战背后的真相

想必大家今天肯定被各家大模型厂商的降价新闻刷圈了,如果说 Meta Llama 3 的开源是国外大模型市场的搅局者,那 DeepSeek-V2 就是国内大模型市场的鲶鱼,但是价格战背后是大模型基础设施优化带来的物美价廉,还是浑水摸鱼的噱头&…

数据结构——(java版)包装类与泛型

文章目录 一 包装类1.1 包装类的概念1.2 装箱/装包1.3 拆箱/拆包1.4 一个面试题: 二 泛型2.1 什么是泛型?2.2 泛型的使用2.3 泛型的上界2.4 泛型实现Comparable接口2.5 擦除机制另外: 一 包装类 1.1 包装类的概念 在java中基本数据类型并不…

中国自动气象站:现代气象观测的中流砥柱

引言 气象观测是人类认识和预报天气的重要手段。在现代科技的推动下,自动气象站成为气象观测的重要工具,为天气预报、防灾减灾和气候研究提供了宝贵的数据支持。本文将介绍中国自动气象站的发展历程、技术特点及其在气象观测中的重要作用。 中国自动气象…

【Linux】信号(一)

信号我们将从信号产生,信号的保存,信号处理分别进行讲解~ 至少大思路是这样。开始之前还要进行一些基础知识的铺垫。 目录 从生活中提炼一些结论:信号概念的一些储备:信号产生:一、kill指令:二、键盘组合键…

BP 客户主数据-国际贸易条款发生更改

Issue :ECC升级S4后 1)客户主数据扩产线时(LHGX03),国贸条件2变更记录查询时,所扩产线(30 1C)无变更记录,未变更产线(10 1C/1H/1M)确认变更记录 20230108新增&#xff1…

生命在于学习——Python人工智能原理(3.2)

三、深度学习 (二)人工神经网络 人工神经网络是模仿人类大脑神经系统工作原理所创建的数学模型,有并行的分布处理能力、高容错性和自我学习等特征。 1、感知器 感知器由Frank Roseblatt于1957年提出,是一种广泛使用的线性分类…

Matlab解决矩阵微分方程建模(代码开源)

#用matlab解决施密特正交规范化矩阵之后,我又想到矩阵的微分方程计算量真的太大了,来回转化让我头大,于是我尝试了一下用matlab建立模型来解决这类问题。 代码部分如下:注解还挺清晰的: %%%解微分方程组%eg&#xff…

多目标优化-NSGA-II

文章目录 一、前置知识NSGA-II帕累托前沿 二、算法流程1.NSGA2.NSGA-II 一、前置知识 1.NSGA(非支配排序遗传算法):旨在同时优化多个冲突的目标函数,寻找帕累托前沿上的解集。 什么是多个冲突的目标: 比如你看上了一辆车,你既想要它便宜,又…

一个思维狂赚20万+?揭秘电商平台隐藏的流量认知!

你想要的流量,资源,人脉,都已经有人为你准备,你只需要找到拥有这些资源的人。对于流量和信息,也是一样,你想找的客户和产品,都已经有人为你准备在淘宝、拼多多等电商平台,你只需要找…

掌握Postman,轻松调试POST与GET接口:详细安装与实战教程,让你的API测试更高效

0.前言 在确保数据接口的稳定性和可访问性方面,使用专业的接口测试工具至关重要。这些工具不仅简化了测试流程,还提供了无需编写额外代码即可轻松调用和调试接口的能力,从而大大提高了测试效率和准确性。 0.1 Postman 背景介绍 用户在开发或…

遭遇Device Association Service占用CPU和内存过高异常

1.异常描述 在蓝牙设备搜索和配对过后,系统界面卡住了,查找了下任务管理器,发现有一个主机服务占用了过多的CPU和内存,且不断的在增长。截图如下: 百度查了下,Device Association Service是一个Win10系统服…

HCIP-Datacom-ARST自选题库_10_多种协议多选【24道题】

1.如图所示,PE1和PE2之间通过LoopbackO接口建立MP-BGP邻居关系,在配完成之后,发现CE1和CE2之间无法互相学习路由,下列哪些选项会造成该问题的出现? PE1或PE2未在BGP-VPNV4单播地址族视图使能邻居A PE1或PE2上的VPN实例参数配置错…

JVM的内存结构

JVM 内存结构 方法区: 方法区主要用于存储虚拟机加载的类信息、常量、静态变量,以及编译器编译后的代码等数据。 程序计数器 由于在JVM中,多线程是通过线程轮流切换来获得CPU执行时间的,因此,在任一具体时刻,一个CP…

2.1.3 采用接口方式使用MyBatis

实战概述:使用MyBatis的接口方式进行数据库操作 环境准备 确保项目中已经集成了MyBatis框架。 创建用户映射器接口 在net.huawei.mybatis.mapper包中创建UserMapper接口。定义方法findById(int id)用于按编号查询用户。定义方法findAll()用于查询全部用户。定义方法…

[沫忘录]MySQL InnoDB引擎

[沫忘录]MySQL InnoDB引擎 逻辑存储结构 InnoDB采用 “表、段,区, 页、行” 这样的层级结构进行存储。 **表空间(tablespace)**ibd文件,主要用于存储记录、索引等数据,一个mysql实例可有多个表空间,甚至能通过innodb…

代理IP科普:IP黑名单与IP白名单的机制与作用

在IP代理使用中,我们经常听到黑名单与白名单两个名词,它们不仅提供了强大的防御机制,还可以灵活应对不同的安全威胁。本文将详细探讨IP黑名单和白名单在网络安全中的双重屏障作用。 一、IP黑名单和白名单定义 IP黑名单与IP白名单是网络安全中…

WPF中Window的外观实现及常用属性

文章目录 1. 概要2. Window的外观2.1 Window的外观组成2.2 Window的实现2.3 Window外观配置2.4 Window 的其他常用属性1. AllowsTransparency 2. WindowStartupLocation3. ShowInTaskbar4. ShowActivated5. SizeToContent6. Topmost7. WindowStyle 1. 概要 和 Android 类似, W…