FreeRTOS基础知识学习笔记

2023-05-16

         先说RTOS,在以前单片机中要执行完上一个程序才会执行下一个程序(当然有中断来临会先执行中断程序),在RTOS中会将两个程序交叉进行。比如,写作业和锻炼在单片机中写作业时锻炼是没有执行的,或者锻炼时没有写作业(可以看出这种的cpu效率不高,不是那么实时)。在RTOS中会将写作业和锻炼交叉进行(这种运行效率大大提高,实时性较好)。RTOS是实时操作系统,具有即时响应和高可靠性的特点,而且任务间独立性高,低耦合。  RTOS操作系统:FreeRTOS、UCOS、RTX、RT—Thread、DJYOS等。

  一、FreeRTOS的任务

       多任务系统将一个大问题分解成小问题分别解决(小任务是并行处理,指的是小任务之间运行速度快好像一块处理实际上一个时间只能运行一个任务),任务调度器负责任务执行的顺序,不同的系统其任务调度器的实现方法也不同。FreeRTOS 是一个抢占式的实时多任务系统, 其任务调度器也是抢占式的。

 上图为正点原子FreeRTOS教程中,FreeRTOS会有一个任务优先级高优先级会打断低优先级任务抢占CPU的使用权(每 个 任 务 都 可 以 分 配 一 个 从 0~(configMAX_PRIORITIES-1) 的 优 先 级 , configMAX_PRIORITIES 在文件 FreeRTOSConfig.h 中有定义。 优先级数字越低表示任务的优先级越低,0 的优先级最低,configMAX_PRIORITIES-1 的优 先级最高。空闲任务的优先级最低,为 0。 FreeRTOS 调度器确保处于就绪态或运行态的高优先级的任务获取处理器使用权,换句话说 就是处于就绪态的最高优先级的任务才会运行。当宏 configUSE_TIME_SLICING 定义为 1 的时 候多个任务可以共用一个优先级,数量不限。默认情况下宏 configUSE_TIME_SLICING 在文件 FreeRTOS.h 中已经定义为 1。此时处于就绪态的优先级相同的任务就会使用时间片轮转调度器 获取运行时间。)。

二、任务状态

   FreeRTOS 中的任务永远处于下面几个状态中的某一个:

 

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

● 就绪态 处于就绪态的任务是那些已经准备就绪(这些任务没有被阻塞或者挂起),可以运行的任务, 但是处于就绪态的任务还没有运行,因为有一个同优先级或者更高优先级的任务正在运行! ● 阻塞态 如果一个任务当前正在等待某个外部事件的话就说它处于阻塞态,比如说如果某个任务调 用了函数 vTaskDelay()的话就会进入阻塞态,直到延时周期完成。任务在等待队列、信号量、事 件组、通知或互斥信号量的时候也会进入阻塞态。任务进入阻塞态会有一个超时时间,当超过 这个超时时间任务就会退出阻塞态,即使所等待的事件还没有来临!

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

三、任务控制块

FreeRTOS 的每个任务都有一些属性需要存储,FreeRTOS 把这些属性集合到一起用一个结 构体来表示,这个结构体叫做任务控制块:TCB_t,在使用函数 xTaskCreate()创建任务的时候就 会自动的给每个任务分配一个任务控制块。

四、 任务堆栈

FreeRTOS 任务调度器在进行任务切换的时候会将当前任务的现场(CPU 寄存器值等)保存在此任务的任务堆栈中,任务堆栈就像是提供一块地方储当前任务的值,以至于任务切换后再次返回可以找到之前的值并继续从上次的地方开始运行。

创建任务的时候需要给任务指定堆栈,如果使用的函数 xTaskCreate()创建任务(动态方法) 的话那么任务堆栈就会由函数 xTaskCreate()自动创建,后面分析 xTaskCreate()的时候会讲解。 如果使用函数 xTaskCreateStatic()创建任务(静态方法)的话就需要程序员自行定义任务堆栈,然 后堆栈首地址作为函数的参数 puxStackBuffer 传递给函数。

 

       文档参考《正点原子FreeRTOS开发手册》    

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

FreeRTOS基础知识学习笔记 的相关文章

随机推荐

  • stm32f103最小系统板详细介绍

    一 什么是单片机最小系统 常见的单片机最小系统为单片机能独立运行程序及控制外围电路的最简单电路 xff0c 主要由单片机 晶振电路 复位电路三部分构成 Stm32f103c8t6也不例外 xff0c 构成最小的运行电路也需要以上三部分 St
  • vscode集成gitee

    第一步 1 百度搜索Git xff0c 出现的第一个网站 xff08 如下图 xff09 Git xff09 2 下载 3 下载之后 双击安装 xff08 安装过程中只需要默认下一步 不需要多余操作 放心大胆的点击下一步 xff09 第二步
  • #include<string> #include<cstring>

    C 43 43 strings string 只能用cin cout处理 xff0c 不能 用scanf xff0c 和printf transform s begin s end s begin tolower 转换成小写的函数 tran
  • 一步步教你如何安装idea

    1 下载idea安装包 2 打开后完成解压 3 点击Next进入下一步 4 选择好我们需要安装的位置 xff0c 这里我选择D盘的一个文件夹进行安装 5 下面根据自己电脑的型号去选择 xff0c 32位或者64位 xff0c 我的电脑是64
  • 一步步教你如何配置Java环境变量(超级详细)

    1 首先需要去官网下载jdk的安装包 xff0c 下载网站 xff1a www oracle com 2 选择版本 xff0c 然后安装开发工具JDK 3 先右击此电脑 xff08 win10 然后点击属性 4 然后找到右边的高级系统设置
  • VMware虚拟机 ——Operation inconsistent with current state。操作与当前状态不一致解决方法

    今天一打开VMware虚拟机 就跳出个界面 xff0c 如下图 所示 xff1a Operation inconsistent with current state xff0c 这句话的意思是操作与当前状态不一致 我想着试试恢复快照行不行
  • MobaXterm远程连接虚拟机的Network error: Connection timed out 网络错误:连接超时解决办法

    今天打开MobaXterm远程连接我VMware虚拟机的时候出现以下界面 xff0c 问题详情如下 xff1a Network error Connection timed out Session stopped Press lt retu
  • 内外网端口映射

    总的来说 xff0c 外网就是我们一般说的Internet 相对的内网是指局域网 xff0c 内网需要一台服务器或路由器做网关 通过它来控制能否访问外网 映射的概念 xff1a 路由器一口接外网 一口接内网的交换机 交换机连接到各个电脑 路
  • VMware虚拟机进行配置网络 Linux

    1 首先输入账户密码登录我们要配置网络的那台虚拟机 2 开始手动输入命令 xff1a vi etc sysconfig network scripts ifcfg ens33 3 进行修改 xff1a 通过移动键盘的方向键将光标移到要修改的
  • 教你如何在idea里进行设置实现快捷键自动生成序列化版本号

    1 打开IDEA 2 找到左上方的File并点击 xff0c 然后找到下面的Setting xff0c 就是前面是个小扳手的 xff0c 点进去进行设置 3 开始设置 找到左边Editor并点左边箭头展开 xff0c 再找到下方的Inspe
  • 关于IDEA的一些设置

    一 IDEA 软件设置Settings页面 Settings是对软件本身的一些属性进行配置 xff0c 例如字体 主题 背景图 插件等 二 如何打开Settings设置页面 左上角File gt Setting 三 Appearance a
  • Linux命令退格键变成^H的解决办法

    方法一 xff1a 按住ctrl键再去按退格键 xff08 backspace xff09 xff0c 就ok了 xff1b 方法二 xff1a 把 stty erase H 添加到 bash profile中 操作如下 xff1a 1 v
  • Typora图床设置

    1 使用SM MS xff0c 进入User Login SM MS Simple Free Image Hosting 2 注册并登录 3 进入typora 的偏好设置中 4 选PicGo Core然后下载 xff0c 下载完毕之后打开配
  • loading加载效果(纯css)

    一 平滑加载 lt div class 61 34 loading 1 34 gt lt div gt box sizing border box loading 1 margin 0 auto width 120px height 20p
  • PX4和Pixhawk的故事

    Pixhawk由Lorenz Meier于2008年创建 2008 寻找自主飞行 故事始于对自主飞行的追求 xff0c Lorenz想让无人机使用计算机视觉自主飞行 xff0c 他在苏黎世联邦理工学院攻读硕士学位的时候开始了一个研究项目 x
  • 备赛电赛学习STM32(十四):MPU6050

    一 MPU6050的简介 6轴是3轴加速度 3轴角速度 9轴就是3轴加速度 3轴角速度 3轴磁场强度 10轴就是3轴加速度 3轴角速度 3轴磁场强度 气场强度 这么多的数据 经过融合之后可进一步得到姿态角或者叫欧拉角 以我们这个飞机为例 欧
  • 【STM32】STM32单片机结构及部件原理

    STM32是目前比较常见并且多功能的单片机 xff0c 要想学习STM32 xff0c 首先要去了解它的基本构成部分以及各部分的原理 单片机型号 xff1a 正点原子STM32F103ZET6 目录 STM32内部结构总览图 xff1a 2
  • hadoop伪分布模式搭建(详细步骤)

    一 前期准备 1 关闭防火墙 2 安装好JDK 3 准备hadoop安装包 二 安装hadoop伪分布模式 1 在home hadoop software 路径下创建hadooptmp目录 2 解压hadoop 3 3 0 tar gz 3
  • ZooKeeper does not recover

    ZooKeeper does not recover from crash when disk was full Description The disk that ZooKeeper was using filled up During
  • FreeRTOS基础知识学习笔记

    先说RTOS xff0c 在以前单片机中要执行完上一个程序才会执行下一个程序 xff08 当然有中断来临会先执行中断程序 xff09 xff0c 在RTOS中会将两个程序交叉进行 比如 xff0c 写作业和锻炼在单片机中写作业时锻炼是没有执