FreeRTOS 多任务系统

在最早接触嵌入式的时候,我们编写的代码都是在一个while循环里处理所有的事务。

int main()
{
    while(1)
    {
      do_something();
      do_something1();
      do_something2();
    }
}

这三个事务轮流执行。逻辑简单。但会带来一个问题:

事务1在执行的时候,事务2得不到运行,如果此时事务2更紧急,却得不到运行的机会。

因为三个事务轮流执行的。如果事务1和2大部分时间不需要处理,这样就浪费了时间。

所以我们就引入了操作系统的概念。我们把三个事务分成3个task。同时对事务的优先级进行设定。这样紧急的任务可以获得更多的机会运行。

看起来3个任务都同时在运行。但是某一时刻只能有一个任务在运行。任务之间的切换有操作系统的调度器完成。

任务状态

既然任务之间可以切换,同一时刻只能有一个任务在运行。那么任务的状态肯定就会分为很多种。

运行态:

当一个任务正在运行时,那么就说明这个任务处于运行状态,处理运行状态的任务是当前正在使用处理器的任务。如果使用的是单核处理器的话那么不管在任何时刻永远都只有一个任务处于运行态。

就绪态:

处于就绪态的任务就是那些已经准备就绪(这些任务没有被阻塞或者挂起),可以运行的任务,但是处于就绪态的任务还没有运行,因为有一个同优先级或者更高优先级的任务正在运行!

阻塞态:

如果一个任务当前正在等到某个事件的话就会进入阻塞态,比如说如果某个任务调用了vTaskDelay()的话就会进入阻塞态,直到延时周期完成。任务在等待队列、信号量、事件组等的时候就会进入阻塞态。任务进入阻塞态会有一个超时时间,当超过这个超时时间任务就会退出阻塞态,即使等待的时间还没有到来。

挂起态:

将阻塞一样,任务进入挂起后不能被调度器调用进入运行态,但是进入挂起态的任务没有超时时间。任务进入和退出挂起态经过调用函数vTaskSupend()和xTaskResume()。

任务状态转换如下图:

 任务优先级

每个任务都可以分配一个从0到configMax_PRIORITIES-1的优先级。数字越低优先级越低。考虑到RAM的消耗,config_PRIORITIMES满足应用即可,不宜设置过大。

调度器确保处于就绪态或者运行态的高优先级任务获得处理器使用权。当configUSE_TIME_SLICING定义为1的时候多个任务可以共用一个优先级。此时处于就绪态的优先级相同的任务就会使用时间片轮转调度器获取运行时间。

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

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

相关文章

LabVIEW齿轮箱噪声监测系统

LabVIEW齿轮箱噪声监测系统 齿轮箱作为机械设备的“心脏”,其健康状态对设备的性能有着重要的影响。传统的齿轮箱监测方法依赖于直接的振动信号分析,但这种方法不仅成本高昂,而且在安装和拆卸过程中可能对设备造成损害。针对这些问题&#x…

激光雷达的量产车方案

文章目录 现在的量产方案共同点与差异技术方案应用场景未来发展趋势 现在的量产方案 在量产车领域,半固态激光雷达技术的发展和应用是实现高级自动驾驶功能的关键技术之一。半固态激光雷达,与传统的固态激光雷达相比,其最大特点是在内部采用…

基于java+springboot+vue实现的垃圾分类回收系统(文末源码+Lw)23-213

摘 要 如今社会上各行各业,都喜欢用自己行业的专属软件工作,互联网发展到这个时候,人们已经发现离不开了互联网。新技术的产生,往往能解决一些老技术的弊端问题。因为传统垃圾分类回收系统信息管理难度大,容错率低&a…

HarmonyOS 应用开发之featureAbility接口切换particleAbility接口切换

featureAbility接口切换 FA模型接口Stage模型接口对应d.ts文件Stage模型对应接口getWant(callback: AsyncCallback<Want>): void; getWant(): Promise<Want>;ohos.app.ability.UIAbility.d.tslaunchWant: Want;startAbility(parameter: StartAbilityParameter, c…

【性能类】—JS运行机制

console.log(1) setTimeout(function(){console.log(2) },0) console.log(3)问&#xff1a;这道题打印顺序&#xff1f; 1 → 3 → 2 一、JS是单线程 JS是单线程的&#xff0c;同一时间只能做一件事&#xff0c;运行栈只执行一个任务 二、任务队列 任务队列&#xff1a;同步…

EasyDarwin 、ffmpeg 音视频推流拉流;OBS视频推理软件、obs-rtspserver服务器;python读取rtsp流

参考&#xff1a;https://blog.csdn.net/N71FS1/article/details/130019563 一、EasyDarwin ffmpeg ffmpeg 推送音视频流到rtsp流服务器 EasyDarwin 作为rtsp流服务器 &#xff08;下载&#xff1a;https://www.easydarwin.org/p/easydarwin.html&#xff09;OBS 直播音视频录…

为什么都说”一入Java深似海“?

引言 在当今数字化时代&#xff0c;编程已经成为一项至关重要的技能。而在众多编程语言中&#xff0c;Java以其广泛的应用领域和强大的功能特性&#xff0c;吸引了无数开发者的目光。无论是Web开发、移动应用还是大数据处理&#xff0c;Java都发挥着举足轻重的作用。然而&…

AI预测福彩3D第24弹【2024年4月2日预测--第6套算法开始计算第1次测试】

今天&#xff0c;咱们进行第6套算法测试&#xff0c;本套算法将结合012路直选共27种组合&#xff0c;同时考虑了对012路的和值进行统计分析。今天为第1次测试&#xff0c;好了&#xff0c;废话不多说了。直接上结果~ 仍旧是分为两个方案&#xff0c;1大1小。 经过人工神经网络计…

Windows server 2019搭建域服务(保姆版)

准备两台虚拟机&#xff1a;windows server 2019&#xff08;作为服务器&#xff0c;域管理员在此机器上&#xff09;&#xff0c;windows 10&#xff08;7、8、11都可以&#xff0c;作为域成员&#xff09;本文实验虚拟机时windows server 2019和windows10 前提&#xff0c;同…

IP广播网络音频解码播放终端SV-7101SIP-7101 SIP播放解码器

IP广播网络音频解码播放终端SV-7101SIP-7101 SIP播放解码器 一、描述 SIP-7101是我司的一款壁挂式SIP网络播放终端&#xff0c;具有10/100M以太网接口&#xff0c;配置一路继电器输出和一路线路输出&#xff0c;可将内部音源输出到外接功放&#xff0c;可实现广播播放功能。S…

非关系型数据库--------------Redis配置与优化

目录 一、关系型数据库与非关系型数据库 1.1关系型数据库 1.2非关系型数据库 1.2.1非关系型数据库产生背景 1.3关系型非关系型区别 二、Redis 2.1redis简介 2.2Redis命中机制和淘汰机制 2.3Redis 具有以下优点 2.3.1具有极高的数据读写速度 2.3.2redis支持丰富的数据…

GoogleNet神经网络介绍

一、简介 GoogleNet&#xff0c;也称为GoogLeNet&#xff0c;是谷歌工程师设计的一种深度神经网络结构&#xff0c;它在2014年的ImageNet图像识别挑战赛中取得了冠军。该神经网络的设计特点主要体现在其深度和宽度上&#xff0c;通过引入名为Inception的核心子网络结构&#x…

红酒:红酒的分类标准与市场细分

红酒的分类标准与市场细分是红酒产业中非常重要的概念。通过对红酒进行分类&#xff0c;可以更好地满足不同消费者的需求&#xff0c;提升红酒的市场份额和品牌影响力。 首先&#xff0c;红酒的分类标准可以根据不同的维度进行划分。常见的分类标准是根据葡萄酒的口感、香气、颜…

RK3588 NPU研究(一)

使用NPU进行AI计算&#xff0c;具体对应模型推理 对应代码位置 hardware/rockchip/rknpu2 examples: yolo5 编译 下载NDK工具https://developer.android.google.cn/ndk/downloads?hlzh-cn源码中使用16b&#xff0c;测试可以使用16/17/18/19/20&#xff0c;不可以使用21&…

开源代码分享(17)—基于yalmip+cplex的微电网优化调度(附matlab代码)

1基本概念 微网&#xff08;Micro-Grid&#xff0c;MG&#xff09;是进行电能调度时常见的概念&#xff0c;作为组织各分布式单元的结构。微网概念的提出旨在实现分布式电源的灵活、高效应用&#xff0c;解决数量庞大、形式多样的分布式电源并网问题[8]。微网中集成了电源、储能…

DS1302时钟芯片

目录 DS1302简介 前言 DS1302内部结构 理解&#xff1a; DS1302引脚图 DS1302常用寄存器 寄存器控制指令 解释&#xff1a; 常用寄存器指令 DS1302控制时序 单字节读 代码辅助理解 单字节写 代码辅助理解 仿真案例 电路图 keil文件 DS1302简介 前言 DS1302…

Pycharm环境配置完整教程

目录 python解释器下载 检查是否正确安装 Pycharm下载 Pycharm环境配置 本文主要介绍python解释器安装、Pycharm环境配置以及运行第一个程序的零基础的教程&#xff0c;即使是python小白也能正确配置相应的python学习环境哦&#xff01; python解释器下载 官网地址&#…

在jupyter notebook中使用conda环境

在jupyter notebook中使用conda环境 1. 环境配置 conda activate my-conda-env # this is the environment for your project and code conda install ipykernel conda deactivateconda activate base # could be also some other environment conda install nb_cond…

java学习之路-数组定义与使用

目录 ​编辑 1.什么是数组 2.数组的创建及其初始化 2.1数组的创建 2.2数组的初始化 3.数组的使用 3.1数组元素访问 3.2遍历数组 4.数组是引用类型 4.1jvm的内存分布 4.2基本类型变量与引用类型变量的区别 4.3引用变量详解 4.4 null 5.数组的使用场景 5.1存储数据 5…

【网课必备】学浪视频下载到本地

学浪作为知识付费平台&#xff0c;拥有大量的课程&#xff0c;所以很多人在学浪上购买自己的课程&#xff0c;但是学浪官方没有提供下载选项&#xff0c;只可以在学浪客户端软件观看&#xff0c;并不是很方便 于是为了解决这一个需求&#xff0c;小白老师s开发了学浪视频下载到…