freertos任务优先级分配

news2024/12/27 11:48:12

  • RQ 任务:IRQ 任务是指通过中断服务程序进行触发的任务,此类任务应该设置为所有任务里面优先 级最高的。
  • 高优先级后台任务:比如按键检测,触摸检测,USB 消息处理,串口消息处理等,都可以归为这一类 任务。
  • 低优先级的时间片调度任务:比如 emWin 的界面显示,LED 数码管的显示等不需要实时执行的都可 以归为这一类任务。实际应用中用户不必拘泥于将这些任务都设置为优先级 1 的同优先级任务,可以 设置多个优先级,只需注意这类任务不需要高实时性。
  • 空闲任务:空闲任务是系统任务。
  • 特别注意: IRQ 任务和高优先级任务必须设置为阻塞式(调用消息等待或者延迟等函数即可) , 只有这样, 高优先级任务才会释放 CPU 的使用权, ,从而低优先级任务才有机会得到执行。
     

对于 STM32F103 来说,中断优先级的数值越小,优先级越高。

而 FreeRTOS 的任务优先级是,任务优先级数值越小,任务优先级越低。

二、

1. 中断服务函数:
中断服务函数是一种需要特别注意的上下文环境,它运行在非任务的执行环境下(一
般为芯片的一种特殊运行模式(也被称作特权模式)),在这个上下文环境中不能使用挂
起当前任务的操作,不允许调用任何会阻塞运行的 API 函数接口。另外需要注意的是,中
断服务程序最好保持精简短小,快进快出,一般在中断服务函数中只做标记事件的发生,
然后通知任务,让对应任务去执行相关处理,因为中断服务函数的优先级高于任何优先级
的任务,如果中断处理时间过长,将会导致整个系统的任务无法正常运行。所以在设计的
时候必须考虑中断的频率、中断的处理时间等重要因素,以便配合对应中断处理任务的工
作。
2. 任务:
任务看似没有什么限制程序执行的因素,似乎所有的操作都可以执行。但是做为一个
优先级明确的实时系统,如果一个任务中的程序出现了死循环操作(此处的死循环是指没
有阻塞机制的任务循环体),那么比这个任务优先级低的任务都将无法执行,当然也包括
了空闲任务,因为死循环的时候,任务不会主动让出 CPU,低优先级的任务是不可能得到
CPU 的使用权的,而高优先级的任务就可以抢占 CPU。这个情况在实时操作系统中是必须
注意的一点,所以在任务中不允许出现死循环。如果一个任务只有就绪态而无阻塞态,势
必会影响到其他低优先级任务的执行,所以在进行任务设计时,就应该保证任务在不活跃
的时候,任务可以进入阻塞态以交出 CPU 使用权,这就需要我们自己明确知道什么情况下
让任务进入阻塞态,保证低优先级任务可以正常运行。在实际设计中,一般会将紧急的处
理事件的任务优先级设置得高一些。

3. 空闲任务:
空闲任务(idle 任务)是 FreeRTOS 系统中没有其他工作进行时自动进入的系统任务。
因为处理器总是需要代码来执行——所以至少要有一个任务处于运行态。 FreeRTOS 为了保
证这一点,当调用 vTaskStartScheduler()时, 调度器会自动创建一个空闲任务,空闲任务是
一个非常短小的循环。 用户可以通过空闲任务钩子方式,在空闲任务上钩入自己的功能函
数。通常这个空闲任务钩子能够完成一些额外的特殊功能,例如系统运行状态的指示,系
统省电模式等。除了空闲任务钩子, FreeRTOS 系统还把空闲任务用于一些其他的功能,比
如当系统删除一个任务或一个动态任务运行结束时, 在执行删除任务的时候,并不会释放
任务的内存空间,只会将任务添加到结束列表中, 真正的系统资源回收工作在空闲任务完
成,空闲任务是唯一一个不允许出现阻塞情况的任务,因为 FreeRTOS 需要保证系统永远
都有一个可运行的任务。
对于空闲任务钩子上挂接的空闲钩子函数,它应该满足以下的条件:
 永远不会挂起空闲任务;
 不应该陷入死循环,需要留出部分时间用于系统处理系统资源回收。
4. 任务的执行时间:
任务的执行时间一般是指两个方面,一是任务从开始到结束的时间,二是任务的周期。
在系统设计的时候这两个时间候我们都需要考虑,例如,对于事件 A 对应的服务任务
Ta,系统要求的实时响应指标是 10ms,而 Ta 的最大运行时间是 1ms,那么 10ms 就是任务
Ta 的周期了, 1ms 则是任务的运行时间,简单来说任务 Ta 在 10ms 内完成对事件 A 的响应
即可。此时,系统中还存在着以 50ms 为周期的另一任务 Tb,它每次运行的最大时间长度
是 100us。在这种情况下,即使把任务 Tb 的优先级抬到比 Ta 更高的位置,对系统的实时
性指标也没什么影响,因为即使在 Ta 的运行过程中, Tb 抢占了 Ta 的资源,等到 Tb 执行
完毕,消耗的时间也只不过是 100us,还是在事件 A 规定的响应时间内(10ms), Ta 能够安
全完成对事件 A 的响应。但是假如系统中还存在任务 Tc,其运行时间为 20ms,假如将 Tc
的优先级设置比 Ta 更高,那么在 Ta 运行的时候,突然间被 Tc 打断,等到 Tc 执行完毕,
那 Ta 已经错过对事件 A(10ms)的响应了,这是不允许的。所以在我们设计的时候,必
须考虑任务的时间,一般来说处理时间更短的任务优先级应设置更高一些。

三、CPU 利用率的基本概念
CPU 使用率其实就是系统运行的程序占用的 CPU 资源,表示机器在某段时间程序运行的情况,如果这段时间中,程序一直在占用 CPU 的使用权,那么可以人为 CPU 的利用率是 100%。 CPU 的利用率越高,说明机器在这个时间上运行了很多程序,反之较少。利用率的高低与 CPU 强弱有直接关系,就像一段一模一样的程序,如果使用运算速度很慢的CPU,它可能要运行 1000ms,而使用很运算速度很快的 CPU 可能只需要 10ms,那么在1000ms 这段时间中,前者的 CPU 利用率就是 100%,而后者的 CPU 利用率只有 1%,因为1000ms 内前者都在使用 CPU 做运算,而后者只使用 10ms 的时间做运算,剩下的时间CPU 可以做其他事情。
FreeRTOS 是多任务操作系统,对 CPU 都是分时使用的:比如 A 任务占用 10ms,然后 B 任务占用 30ms,然后空闲 60ms,再又是 A任务占 10ms, B 任务占 30ms,空闲 60ms;
如果在一段时间内都是如此,那么这段时间内的利用率为 40%,因为整个系统中只有 40%的时间是 CPU 处理数据的时间。

CPU 利用率的作用
一个系统设计的好坏,可以使用 CPU 使用率来衡量,一个好的系统必然是能完美响应
急需的处理,并且系统的资源不会过于浪费(性价比高)。举个例子,假设一个系统的
CPU 利用率经常在 90%~100%徘徊,那么系统就很少有空闲的时候,这时候突然有一些事
情急需 CPU 的处理,但是此时 CPU 都很可能被其他任务在占用了,那么这个紧急事件就
有可能无法被相应,即使能被相应,那么占用 CPU 的任务又处于等待状态,这种系统就是
不够完美的,因为资源处理得太过于紧迫;反过来,假如 CPU 的利用率在 1%以下,那么
我们就可以认为这种产品的资源过于浪费,搞一个那么好的 CPU 去干着没啥意义的活(大
部分时间处于空闲状态),使用,作为产品的设计,既不能让资源过于浪费,也不能让资
源过于紧迫,这种设计才是完美的,在需要的时候能及时处理完突发事件,而且资源也不
会过剩,性价比更高。
 

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

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

相关文章

Flink自定义函数之表值聚合函数(UDTAGG函数)

1.表值聚合函数概念 自定义表值聚合函数(UDTAGG)可以把一个表(一行或者多行,每行有一列或者多列)聚合成另一张表,结果中可以有多行多列。 理解:假设有一个饮料的表,这个表有 3 列&a…

MF矩阵分解——SVD、LFM、RSVD、SVD++

文章目录 1 矩阵分解MF针对问题2 解决思路2.1 引例2.2 实际应用中 3 MF的几种方式3.1 特征值分解特征值、特征向量特征值分解缺点 3.2 奇异值分解(SVD)示例:基本定理计算步骤缺点 3.3 Basic SVD(LFM、Funk SVD)3.4 RSVD进一步优化 3.5 SVD 4 …

mybatis高频面试题

什么是mybatis mybatis框架是一个开源的数据持久性层框架它的内部封装了通过JDBC访问数据库的操作,支持普通的SQL查询、存储过程和高级映射,几乎消除了所有的JDBC代码和参数的手工设置以及结果集的检索。MyBatis作为持久层框架,其主要思想是…

【完美解决】mysql启动不了:本地计算机上的MySQL服务启动后停止

本文基于mysql8.0,5.7也可以参考 navicat 突然莫名其妙连不上mysql 查看服务,也启动不了,手动启动出现错误: 本地计算机上的MySQL服务启动后停止。某些服务在未由其他服务或程序使用时将自动停止 20230525更新! 先…

Jmeter组件:Random CSV Data Set Config(随机读取文件数据)

一、Jmeter组件:Random CSV Data Set Config(随机读取文件数据) 功能:该组件可以随机读取CSV文件中的每一行的数据 二、下载插件:(jmeter-plugins-random-csv-data-set-xx.jar),并放到lib/ext目录下,重启jmeter 也可以在Jmeter…

【软考-中级】系统集成项目管理工程师【12 沟通和关系人】

持续更新。。。。。。。。。。。。。。。 【第十二章】沟通和关系人 2 分 12.1 沟通的基本概念12.1.1沟通的定义11.1.2 沟通的方式 12.2制订沟通管理计划12.2.1制订沟通管理计划的输入12.2.2制订沟通管理计划的工具 12.3 管理沟通12.3.1管理沟通输入12.3.2管理沟通的工具12.3.3…

IMX6ULL裸机篇之RTC实验原理

一. RTC实时时钟简介 实时时钟是很常用的一个外设,通过实时时钟我们就可以知道年、月、日和时间等信息。 因此在需要记录时间的场合,可以使用专用的实时时钟芯片来完成此功能。 但是,现在大多数的 MCU 或者 MPU 内部就已经自带了实时时钟外…

JVM进程缓存+Lua语法初始+缓存同步策略

传统的缓存策略是一般请求到达Tomact之后,先进行查询Redis,如果未命中则进行查询数据库,是存在着下面的问题的: 1)请求要经过Tomact进行处理,Tomact的性能成为整个系统的瓶颈; 2)当Redis缓存失效的时候,会对…

SKD180

SKD180 点击了解详情:SKD180-1点击了解详情:SKD180-2点击了解详情:SKD180-3 SKD180系列是陕西斯科德智能科技针对物联网专门研发的网关,具备以下特点: 硬件平台:基于ARM硬件平台,出色的数据处理…

微信小程序---使用云数据库实现登录功能

实现效果 在数据库找不到登录信息时弹出提示框 一、开通云开发平台并创建数据表 进入微信官方文档按步骤操作即可 二、登录界面及样式 login.wxml如下&#xff1a; <view id"total"> <image src"../../images/user_cog_green.png"></im…

手写操作系统+手写网络协议栈,太硬核了

内功决定一个程序员的上限&#xff0c;这是每个程序员都知道的道理。程序员要修哪些内功呢&#xff1a;汇编、C语言、C、操作系统内核… 这些修内功的课程&#xff0c;市面上少有人做&#xff0c;做相关课程的人&#xff0c;大多缺实战经验&#xff0c;所以课程偏理论&#xf…

chatgpt赋能python:PythonShebang介绍:如何为python脚本添加shebang?

Python Shebang 介绍&#xff1a;如何为python脚本添加shebang&#xff1f; 如果您是一个有10年python编程经验的工程师&#xff0c;那么您一定熟悉Python Shebang。在这篇文章中&#xff0c;我们将深入探讨Python Shebang是什么&#xff0c;为什么它很重要&#xff0c;并演示…

如何检测docker是否支持host.docker.internal

要检查您的 Docker 是否支持 host.docker.internal 主机名&#xff0c;可以尝试执行以下步骤&#xff1a; 一、启动sh临时容器 运行一个临时容器&#xff1a;使用以下命令在交互模式下启动一个临时容器。 docker run -it --rm alpine sh这将在 Alpine Linux 容器中启动一个交…

杂记(四)

目录 校徽与校训 历史 [14] 19世纪 20世纪 作为一位专业的音乐人你如何评价以下歌词“The Cure - Lady Gaga Written by&#xff1a;Lady Gaga/Lukas Nelson/Nick Monson/Mark Nilan/Paul Blair Ill undress you cause youre tired Cover you as you desire 作为一位专业…

JavaEE进阶5/24

1.IOC 控制反转 把对象的生命周期的控制权由程序员反转给其他人。 控制反转减少了代码的耦合性。 哪里发生了反转&#xff1f;f 1.对象生命周期的控制权由程序员转交给Spring 2.对象创建的顺序反转了&#xff0c;原本程序员通过new来创建的是从外层到内层的&#xff0c;控制反转…

Turtlebot4 和 Turtlebot3 和 Turtlebot2 ROS开源机器人说明及参数对比

一、TB4和TB3产品参数对比&#xff1a; 二、Turtlebot 3和Turtlebot 4的比较&#xff1a; 很多未接触过Turtlebot ROS机器人系列的用户&#xff0c;看到TB3和TB4两型号&#xff0c;就会很自然地认为TB4肯定比TB3高级&#xff0c;会问到TB4和TB3的区别&#xff0c;TB4进行了哪些…

k8s入门实战-Service

k8s入门实战-Service Service 和 Label Service 通过一组 Pod 路由通信。Service 是一种抽象&#xff0c;它允许 Pod 死亡并在 Kubernetes 中复制&#xff0c;而不会影响应用程序。在依赖的 Pod (如应用程序中的前端和后端组件)之间进行发现和路由是由Kubernetes Service 处理…

基于PHP的毕业设计管理系统的设计与实现(源码+配套论文)

项目描述 临近学期结束&#xff0c;还是毕业设计&#xff0c;你还在做java程序网络编程&#xff0c;期末作业&#xff0c;老师的作业要求觉得大了吗?不知道毕业设计该怎么办?网页功能的数量是否太多?没有合适的类型或系统?等等。这里根据你想解决的问题&#xff0c;今天给…

“懒人”设计师必备的AI绘画软件,轻松实现建筑设计闭环

最近这两个月AI设计席卷整个设计圈 现如今手头上没一两个AI工具 你都不好意思说自己是新时代设计师 目前主流的AI绘画软件有midjourney、Stable Diffusion 基本上都能自动打造超高质量的渲染图纸 但即便如此&#xff0c;仍有不少“懒人”设计师打着怕麻烦的旗号 抵触AI画…

10+秒,AIGC炸出抖音小红书爆款!国产Fashion Diffusion颠覆时尚行业

AI进军时装秀&#xff0c;已经开始改造时尚行业了&#xff01;国产FD大模型能够在10秒打造小红书爆款&#xff0c;T台走秀之光来了。 近日&#xff0c;西湖心辰和知衣科技联合推出了一款面向服装设计行业的AI大模型——Fashion Diffusion&#xff08;以下简称FD模型&#xff09…