FreeRTOS—任务基础知识

文章目录

  • 一、FreeRTOS任务特性
  • 二、FreeRTOS任务状态
  • 三、FreeRTOS任务优先级
  • 四、FreeRTOS任务实现
  • 五、任务控制块
  • 六、任务堆栈

一、FreeRTOS任务特性

  • 简单
  • 没有使用限制(任务数量没有显示,一个优先级下可以有多个任务)
  • 支持抢占(高优先级任务可以抢占低优先级任务的CPU使用权)
  • 支持优先级
  • 每个任务都拥有堆栈,导致RAM使用量增大
    当任务切换时,需要保护现场,保证再次执行该任务时能够从中断的地方继续执行,现场就存储在任务的RAM中。
  • 如果使用抢占,需要考虑重入问题

二、FreeRTOS任务状态

  • 运行态
    任务正在执行时,处于运行态
  • 就绪态
    任务准备就绪,可以运行
  • 阻塞态
    比如某个任务在等待某一个事件发生,此时任务处于阻塞态
  • 挂起态
    挂起态就是任务暂停运行

这四种任务状态是可以互相转换的。任务创建完成之后,处于就绪态。如果任务调度器调度了处于就绪态的任务,此时任务状态变成了就绪态。当然,运行态也可以编程就绪态。比如此时A任务正在运行,此时有一个比A任务优先级高的B任务处于就绪态。这是任务调度器会将A任务的CPU使用权转交给B任务,此时A任务从运行态转入就绪态。

由就绪态到挂起态,可以直接通过函数vTaskSuspend()实现。运行态和阻塞态也可以调用函数vTaskSuspend(),进入挂起态。解挂时,调用vTaskResume()函数即可。

如果处于运行态的任务调用了一些可以阻塞的API函数,比如等待状态量,等待消息队列等,处于运行态的任务就会转到阻塞态。

任务状态间的转换

三、FreeRTOS任务优先级

任务优先级高的任务,会先被执行。在FreeRTOS周末和,任务优先级可选范围在0~configMAX_PRIORITIER - 1,同一优先级下,可以有多个任务。值得注意的是,在FreeRTOS中,数字越大,优先级越大。

四、FreeRTOS任务实现

FreeRTOS官方给出了一个任务函数的模板

void vATaskFunction(void *pvParameters)
{for( ; ; )   // 死循环,可以用while(1){// 任务应用程序vTaskDelay();   // 引起任务调度}
}

一般情况下,我们不会从任务中跳出。如果需要调出,一定要将任务删除。删除任务可以调用下面的函数

vTaskDelete(NULL);   // 删除任务

需要注意的是,FreeRTOS的任务函数必须是void类型。

五、任务控制块

FreeRTOS 把任务属性集合到一起,用一个结构体来表示,这个结构体就是任务控制块——TCB_t(Task Control Block)。所以总结来说,任务控制块就是描述任务属性的结构体。任务控制块可以在“task.c”文件中找到。

六、任务堆栈

上面介绍过,当正在执行任务A,需要切换到任务B时,会将当前任务的现场(CPU寄存器值等)保存到人物的任务堆栈中。等到任务A再次运行时,根据从任务A的任务堆栈中存储的值来恢复现场。

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

不管是使用函数xTaskCreatel()还是xTaskCreateStatic0创建任务,都需要指定任务堆栈大小。任务堆栈的数据类型为 StackType_t, Stackype_t 本质上是 uint32 t,在 portmacro.h 中有定义

#define portSTACK_TYPE	uint32_ttypedef portSTACK_TYPE StackType_t;

由此可见,任务堆栈StackType_t的变量类型是u32,无符号整型。

比如之前在移植测试程序中创建LED程序时,定义任务堆栈

//任务堆栈大小	
#define LED0_STK_SIZE 		50  

这里的“50”并不是指该任务的任务堆栈大小为50个字节。而是指该任务的任务堆栈大小是50个StackType_t。一个StackType_t是四个字节。因此,该任务的任务堆栈大小应该是4 * 50 = 200 字节。

任务堆栈需要根据任务的实际大小分配,如果任务所需要的内存比较大,需要调整任务堆栈大小。如果出现任务卡死不运行的情况,大多数情况是因为任务堆栈分配太小。但是如果任务卡住,将其堆栈增大到很大,依旧卡住,那应该是其他问题。

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C语言结构体字节对齐(内存对齐)之#pragma pack和__attribute__((packed)的使用

在不使用#pragma pack和__attribute__((packed) 等选项来自定义字节对齐大小的情况下,关于正常字节对齐的描述,可参考博文: C/C计算类/结构体和联合体(union)所占内存大小(内存对齐问题)_联合体…

通付盾发布WAAP白皮书,帮助企业应对数字化转型过程中日益高发的网络安全威胁

简介 企业数字化转型是数字经济发展的重要一环。面对企业数字化转型过程中的安全问题,WAAP白皮书将对攻击方式、攻击量、攻击来源、行业分布等维度对各类攻击进行详细解读,梳理传统Web应用防护能力的不足,分析日益增长的API防护,…

H5学习(三)-- CSS层叠样式表

文章目录 一、简介二、CSS的书写样式1. 行内样式(内联样式)2. 页内样式3. 外部样式 三、常见的选择器1. 标签选择器2. 类选择器3. id选择器4. 并列选择器5. 复合选择器6. 伪类选择器 一、简介 CSS(cascading style sheet)是层叠样…

奇舞周刊第497期:解锁 PDF 文件:使用 JavaScript 和 Canvas 渲染 PDF 内容

记得点击文章末尾的“ 阅读原文 ”查看哟~ 下面先一起看下本期周刊 摘要 吧~ 奇舞推荐 ■ ■ ■ 解锁 PDF 文件:使用 JavaScript 和 Canvas 渲染 PDF 内容 最近研究了 Web 的 FileSystemAccess Api,它弥补了 Web 长期以来缺少的能力:操作用户…

QT Creator上位机画波形之Qcharts使用学习

先看一个Qcharts的简单demo Qcharts是QT自带的组件,不需要另外添加文件。 打开QT Creator,新建一个工程,命名可以参考下图: 基类选择QWidget: .pro文件中添加charts模块 main.cpp源码: #include "…

蓝牙音频数据歌词提取器设计方法

v hezkz17进数字音频系统研究开发交流答疑 解决方法: 通过蓝牙接收来自手机音乐播放器的数据,能得到哪些歌曲信息? 如何获取歌曲名?歌词信息? 2023/6/27 10:21:42 通过蓝牙接收手机音乐播放器的数据,可以获取以下歌曲…

JMeter请求头添加删除方法(解决请求头类型冲突)

JMeter请求头添加删除方法(解决请求头类型冲突) 1. 为什么会有冲突 请求头的Content-Type类型在做上传和请求图片地址是,请求头类型是不一样的 请求图片地址:Content-Type: image/jpeg 一般的Restful接口:Content-Ty…

stm32 + w25qxx + EasyFlash

一,软件介绍 EasyFlash 是一款开源的轻量级嵌入式Flash存储器库,方便实现基于Flash存储器的常见应用开发。适合智能家居、可穿戴、工控、医疗等需要断电存储功能的产品,资源占用低,支持各种 MCU 片上存储器。 [1] 该库目前提供…

Qt/C++编写超精美自定义控件(历时9年更新迭代/超202个控件/祖传原创)

一、前言 无论是哪一门开发框架,如果涉及到UI这块,肯定需要用到自定义控件,越复杂功能越多的项目,自定义控件的数量就越多,最开始的时候可能每个自定义控件都针对特定的应用场景,甚至里面带了特定的场景的…

chatgpt赋能python:如何通过Python赚钱

如何通过Python赚钱 介绍 Python是一种高级编程语言,广泛用于Web开发、数据分析、机器学习等领域。Python具有简单易学、功能强大、易于维护等特点,因此非常受欢迎。而且,Python开源免费,可以在各个平台上运行,不需要…

CH543乐得瑞单C口显示器方案(LDR6020)

首先显示器的种类很多,有桌面显示器,便携显示器,智能显示器,甚至AR眼镜也可以算是一个微型显示器。以往的显示器传输视频信号多为VGA和HDMI,当然DP也有,只是占少数,再早之前还有模拟信号接口等等&#xff0…

第4章 信息系统管理

文章目录 4.1.1 管理基础1 层次结构2 系统管理 4.1.2 规划和组织1 规划模型2 组织模型1)业务战略(竞争力优势模型:差异化、总成本领先、专注 战略)2)组织机制战略(莱维特钻石模型:信息与控制、人…