freertos任务优先级分配

news/2024/11/18 2:40:45/

  • 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.ppmy.cn/news/83942.html

相关文章

Springboot +spring security,配置多个数据源:验证不同用户表

一.简介 上篇文章写到,我们在配置jdbc和mybatis 来源,进行登录后,出现了如下错误! 后面解决方案是:屏蔽了其中一个来源,登陆成功,也分析了其原因。 但是,但是如果需要配置多个数据来源&#…

Linux——网络套接字1|socket编程

IP地址(公网IP),标定了主机的唯一性。 通常情况,把数据送到对方的机器是目的吗? 不是的,真正的网络通信过程其实是进程间通信,如客户端进程和服务器进程,我们把数据在主机间转发仅仅是手段,机器收到数据之后,需要将数据交付给指定的进程,当客户端有多个进程在运行时…

优化 docker 容器性能慢问题

问题: 部署环境下tomcat容器启动缓慢,耗时10多分钟,性能较差,同时后端服务响应较慢。 排查: 宿主环境: docker使用情况: 对比结果CPU、内存使用率都不高。 针对docker环境进行检查&#xff…

Three.js--》实现3d圣诞贺卡展示模型

目录 项目搭建 初始化three.js基础代码 加载环境模型 设置环境纹理 添加水面并设置阴影效果 实现幽灵小球的运动 实现相机切换和文字切屏 实现漫天星星和爱心样式 今天简单实现一个three.js的小Demo,加强自己对three知识的掌握与学习,只有在项目…

Vue简单的引入主流地图

百度地图 引入ak 在 public/index.html 中引入,根据官网教程&#xff0c;注册百度地图&#xff0c;获取应用ak。 页面代码 <template><div class"pos-monitor"><div id"map" style"height:120vh; width:100%"></div>…

Windows系统自带远程桌面和远程协助怎么连接?

随着IT技术的发展和远程办公的兴起&#xff0c;在日常工作中&#xff0c;远程桌面和远程协助等功能已经成为很多用户需要掌握的技能之一。而对于使用Windows系统的用户来说&#xff0c;Windows系统自带的远程桌面和远程协助功能&#xff0c;更是令人欣喜的利器。下面我们就来一…

linux怎么查看硬件信息详解

一、整机信息: 1.1 整机制造商:dmidecode -t system 中的 Manufacturer 1.2 整机型号:dmidecode -t system 中的 Product Name 1.3 序列号:dmidecode -t system 中的 Serial Number 1.4 系统位数:python自带的platform.py中architecture()[0] 1.5 内核架构:uname…

spring boot日志

日志介绍日志的使用日志级别日志持久化更简单的输入日志lombok的运行原理 日志介绍 日志的作用&#xff1a; 1&#xff1a;发现问题&#xff1b; 2&#xff1a;定位问题&#xff1b; 3&#xff1a;记录用户的行为&#xff1a;看哪些是方法用户&#xff1b;还能拿到用户的ip&am…