FreeRTOS 任务

news2024/11/19 8:29:17

FreeRTOS使用多任务完成功能,首先要了解任务的基本知识。

裸机编程中,单任务系统的编程方式,即裸机的编程方式,这种编程方式的框架一般都是在 main()函数 中使用一个大循环,在循环中顺序地调用相应的函数以处理相应的事务,这个大循环的部分可 以视为应用程序的后台,而应用程序的前台,则是各种中断的中断服务函数。

多任务系统在处理事务的实时性上比单任务系统要好得多,从宏观上来看,多任务系统的 多个任务是可以“同时”运行的,因此紧急的事务就可以无需等待 CPU 处理完其他事务,在被 处理。 要注意的是多任务系统的多个任务可以“同时”运行,是从宏观的角度而言的,对于单核 的 CPU 而言,CPU 在同一时刻只能够处理一个任务,但是多任务系统的任务调度器会根据相 关的任务调度算法,将 CPU 的使用权分配给任务,在任务获取 CPU 使用权之后的极短时间(宏 观角度)后,任务调度器又会将 CPU 的使用权分配给其他任务,如此往复,在宏观的角度看来, 就像是多个任务同时运行了一样。

从上图可以看出,相较于单任务系统而言,多任务系统的任务也是具有优先级的,高优先 级的任务可以像中断的抢占一样,抢占低优先级任务的 CPU 使用权;优先级相同的任务则各自 轮流运行一段极短的时间(宏观角度),从而产生“同时”运行的错觉。以上就是抢占式调度和 时间片调度的基本原理。 在任务有了优先级的多任务系统中,用户就可以将紧急的事务放在优先级高的任务中进行 处理,那么整个系统的实时性就会大大地提高。

关于任务的相关函数

xTaskCreate()动态方式创建任务
xTaskCreateStatic()静态方式创建任务
xTaskCreateRestricted()动态方式创建使用 MPU 限制的任务
xTaskCreateRestrictedStatic()静态方式创建使用 MPU 限制的任务
vTaskDelete()删除任务

这里常用的就是动态创建和静态创建

1.动态创建

BaseType_t xTaskCreate(
 TaskFunction_t pxTaskCode, 
 const char * const pcName,
 const configSTACK_DEPTH_TYPE usStackDepth,
 void * const pvParameters,
 UBaseType_t uxPriority,
 TaskHandle_t * const pxCreatedTask);
pxTaskCode任务函数
pcName任务名
usStackDepth任务堆栈大小
pvParameters传递给任务函数的参数
uxPriority任务优先级
pxCreatedTask任务句柄,任务成功创建后,会返回任务句柄。任务句柄就 是任务的任务控制块

注意,任务的堆栈这里给的是Depth也就是深度,个人理解实际的大小是深度×宽度,宽度就是事先定义好的字的长度,,那么实际的堆栈大小就是usStackDepth*一个字的字节。

为什么需要堆栈?通过前面的图可以知道,任务是相互切换完成执行的,A任务切换到B任务的时候,CPU从接管A任务的状态切换到接管B任务的装填,那么就需要对A任务的当前现场进行保护,在下次再进行A任务的时候再恢复现场,这里说的保护和恢复,实际上是针对A任务中的一些变量进行的,所以A任务需要一个堆栈,同理,B任务也需要一个自己的堆栈。

uxPriority就是任务的优先级,数字小的优先级低,数字大的优先级高,先执行优先级高的。pxCreatedTask任务句柄,可以整体的控制任务,可以删除或者挂起和恢复时传入相应任务的句柄。

2.静态创建

静态创建和静态创建的区别就是要自己创建一个空闲任务和用户自己申请堆栈内存

TaskHandle_t xTaskCreateStatic(
 TaskFunction_t pxTaskCode,
 const char * const pcName,
 const uint32_t ulStackDepth,
 void * const pvParameters,
 UBaseType_t uxPriority,
 StackType_t * const puxStackBuffer,
 StaticTask_t * const pxTaskBuffer);

静态和动态参数不同的地方

puxStackBuffer任务栈指针,内存由用户分配提供
pxTaskBuffer任务控制块指针,内存由用户分配提供

静态任务的作用

1.创建空闲任务和定时器任务的目的是为了提供系统的基本功能和调度。

空闲任务(Idle Task): 空闲任务是系统中的一个特殊任务,它在没有其他任务需要运行时执行。空闲任务的作用是防止系统进入死循环,保证系统的正常运行。当系统中没有其他任务需要运行时,空闲任务会被调度执行。它通常执行一些低优先级的操作,如系统休眠、节能模式等。
创建空闲任务的静态任务控制块和堆栈是为了分配空闲任务的内存空间,并在系统启动时使用这些内存空间创建空闲任务。

2.为什么创建动态任务不需要创建空闲任务和定时器任务?
创建动态任务时,不需要显式地创建空闲任务和定时器任务的原因是因为FreeRTOS会自动创建和管理这些任务。

空闲任务: FreeRTOS会自动创建一个名为"Idle"的空闲任务,并在系统没有其他任务需要运行时执行。空闲任务的优先级是最低的,它会执行一些低优先级的操作,如系统休眠、节能模式等。由于空闲任务是自动创建和管理的,因此在动态创建任务时不需要显式地创建空闲任务。

定时器任务: FreeRTOS会自动创建一个名为"Timer"的定时器任务,用于管理系统的软件定时器。定时器任务负责管理和处理软件定时器的相关操作,包括创建、删除、启动、停止定时器等。由于定时器任务是自动创建和管理的,因此在动态创建任务时不需要显式地创建定时器任务。

创建动态任务时,只需要调用FreeRTOS提供的任务创建函数,传入任务相关的参数,即可创建动态任务。FreeRTOS会自动进行任务调度和管理,包括空闲任务和定时器任务的创建和执行。

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

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

相关文章

【matlab】分类回归——智能优化算法优化径向基神经网络

目录 径向基(Radial Basis Function, RBF)神经网络 一、基本概念 二、网络结构 三、工作原理 四、学习算法 五、优点与应用 六、与BP神经网络的比较 智能优化算法 常见的智能优化算法 灰狼优化算法(Grey Wolf Optimizer, GWO&#…

万界星空科技MES系统中的排版排产功能

在当今高度竞争的市场环境中,企业对于生产管理的效率和质量要求日益提高。作为智能制造的重要组成部分,制造执行系统(MES)以其强大的功能,在提升企业生产能力方面发挥着不可替代的作用。万界星空科技作为行业领先的智能…

eclipse ide中文件编码的修改,解决中文乱码的问题。

1、先上一张图: 记得之前设置过,但是稍微一变,环境编码又到了ISO-8859-1了,然后就出现了乱码。 2、设置eclipse的编码: Preferences--General -- Content Types -- Text -- Java Properties File -- Default encoding…

昇思25天学习打卡营第18天 | 基于MobileNetv2的垃圾分类

内容介绍: MobileNet网络是由Google团队于2017年提出的专注于移动端、嵌入式或IoT设备的轻量级CNN网络,相比于传统的卷积神经网络,MobileNet网络使用深度可分离卷积(Depthwise Separable Convolution)的思想在准确率小…

node.js外卖小程序-计算机毕业设计源码81838

摘要 自从计算机发展开始,计算机软硬件相关技术的发展速度越来越快,在信息化高速发展的今天,计算机应用技术似乎已经应用到了各个领域。在餐饮行业,除了外卖以外就是到店里就餐,在店里就餐如果需要等待点餐的话&…

complex复数库学习

此头文件是数值库的一部分。本篇介绍complex的基本用法。 常用的API如下: 运算 real 返回实部 (函数模板) imag 返回虚部 (函数模板) abs(std::complex) 返回复数的模 (函数模板) arg 返回辐角 (函数模板) norm 返回模(范数)的平方 (函数模板) conj 返回复共轭 (函…

开启视频创作新篇章!腾讯发布MimicMotion:单张图像+简单姿势,瞬间“活”化视频。

腾讯和上交发布了一个根据图片生成跳舞视频的项目MimicMotion。效果同时支持面部特征和唇形同步,不止可以搞跳舞视频,也可以做数字人。 MimicMotion方案优化的内容有: 引入基于置信度的姿态引导机制。确保生成的视频在时间上更加连贯流畅。 …

Python爬虫教程第1篇-基础知识

文章目录 什么是爬虫爬虫的工作原理用途搜索引擎爬虫Robots协议HTTP的请求过程URL的含义HTTP常见请求头爬虫常用的技术 什么是爬虫 信息的交互是通过web网页、或者移动端等不同的客户端端形式进行交互,这个过程是一个人与网路正常的交互行为。而爬虫可以用来模拟人…

二维树状数组区域查询

落谷4514 过关代码如下 #define _CRT_SECURE_NO_WARNINGS #include<bits/stdc.h> using namespace std; //#define int long longconst int N 2050; int t1[N][N], t2[N][N], t3[N][N], t4[N][N]; int lowbit(int x) { return x & (-x); } int n, m; void update(…

将循环转化为递归的三种方法,求1+2+3……+n等差数列

解法一&#xff1a;使用公共变量s&#xff0c;递归循环1~n加到s上 #include<bits/stdc.h> using namespace std; int n,s; void fun(int i){if(i<n){ssi;fun(i1);}}int main(){cin>>n;fun(1);cout<<s;return 0; } 解法二&#xff1a;通过层层累加&#x…

Vue的民族民俗文化分享平台-计算机毕业设计源码22552

基于Vue的民族民俗文化分享平台设计与实现 摘 要 本文介绍了一种基于Vue.js前端框架和Express后端框架的民族民俗文化分享平台的设计和实现。该平台旨在通过线上方式&#xff0c;促进民族民俗文化的传播与分享&#xff0c;增强公众对多元文化的了解和认同。 平台为普通用户提供…

如何第一次从零上传项目到GitLab

嗨&#xff0c;我是兰若&#xff0c;今天想给大家说下&#xff0c;如何上传一个完整的项目到与LDAP集成的GitLab&#xff0c;也就是说这个项目之前是不在git上面的&#xff0c;这是第一次上传&#xff0c;这样上传上去之后&#xff0c;其他小伙伴就可以根据你这个项目的git地址…

L1218-L5298清零软件使用图解

清零前请取消打印任务&#xff0c;打印机用USB线接电脑并开启 双击[Resetter.exe]启动软件,点击[Select],选择Port打印机型号&#xff0c;然后点[OK]&#xff0c;如图。 [如果port下拉列表中找不到你的打印机&#xff0c;请更换USB接口&#xff0c;并重新开打印机重试。] 2.…

C语言自定义类型——联合体、枚举

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、联合体&#xff08;一&#xff09;、联合体的声明&#xff08;二&#xff09;、联合体的特点&#xff08;三&#xff09;、联合体大小的计算&#xff01;&a…

在本地运行React集成TypeScript的项目

首先问ChatGPT&#xff0c;贴一段TypeScript代码&#xff0c;问ChatGPT&#xff1a;要运行以上代码&#xff0c;该怎么操作&#xff1f; ChatGPT给出了详细步骤&#xff0c;下面是实际操作&#xff1a; 创建一个react项目&#xff1a; npx create-react-app yuanyu-timeline …

js函数扩展内容---多参数,函数属性,字符串生成函数

1.多参数 在js中&#xff0c;Math.max()方法可以接受任意数量的参数&#xff0c; Math.max(1,2,3,4);//4 Math.max(1,2,3,4,5,6,7,8,9,10)//10 在max方法里面有一个rest参数&#xff0c;它接受了所有参数全部合成到了一个number数组里面&#xff0c; function rest(a,b,...a…

在Linux系统中配置GitHub的SSH公钥

在Linux系统中配置GitHub的SSH公钥&#xff0c;可以让您无需频繁输入密码即可与GitHub仓库进行交互&#xff0c;提高工作效率。以下是配置步骤: 第一步&#xff1a; 检查SSH密钥是否存在 首先&#xff0c;检查您的用户目录下的.ssh文件夹中是否已有SSH密钥。打开终端&#xff0…

openrestry中的hello world

目录 概述实践部署openrestry脚本效果验证 概述 此篇将在 k8s 运行起一个 openrestry   环境&#xff1a;k8s&#xff1a;1.27.9 &#xff0c;openrestry(docker镜像版本)&#xff1a; 1.25.x &#xff0c;k8s 与 ingress 请参考我的其它文章 离线镜像包请参考&#xff1a;op…

Wish卖家必读:如何安全有效地进行店铺测评

Wish以其独特的商业模式和先进的技术在电商领域独树一帜。作为北美和欧洲最大的移动电商平台之一&#xff0c;Wish拥有庞大的用户基础&#xff0c;其中90%的卖家来自中国&#xff0c;这不仅显示了其在全球电商市场中的影响力&#xff0c;也反映了其对中国卖家的吸引力。 Wish平…

微信小程序UGC类功能场景内容安全识别检测实现方案

概念普及 最近开发了一个小程序&#xff0c;属于同城信息发布类的&#xff0c;提交上架的时候&#xff0c;说需要补充社交-笔记类目。 补充完再次提审&#xff0c;又说是项目包含UGC类功能场景。所谓的UGC类功能&#xff0c;就是指用户可以在平台上自由发布信息&#xff0c;这…