当前位置: 首页 > news >正文

笔记2 FreeRTOS任务

笔记2 FreeRTOS任务


FreeRTOS配置

1、FreeRTOSConfig.h配置文件作用

对FreeRTOS进行功能配置和裁剪,以及API函数的使能。

2、学习途径

  1. 官方的在线文档中有详细说的说明:https://www.freertos.org/a00110.html 。
  2. 正点原子《FreeRTOS开发指南》第三章的内容 — FreeRTOS系统配置。

3、配置文件中相关宏的分类

相关宏大致可以分为三类。

  • ‘INCLUDE’开头 — 配置FreeRTOS中可选的API函数。
  • ’config‘开头 — 完成FreeRTOS的功能配置和裁剪(如调度方式、使能信号量功能等)。
  • 其他配置 — PendSV宏定义、SVC宏定义。

FreeRTOS任务创建和删除


一、任务创建和删除API函数

1、任务创建和删除的本质

任务创建和删除的本质就是调用FreeRTOS的API函数。
在这里插入图片描述

2、任务动态创建和静态创建的区别

  • 动态创建任务 :任务的任务控制块以及任务的栈空间所需的内存,均由FreeRTOS从FreeRTOS管理的堆中分配。
  • 静态创建任务 :任务的任务控制块以及任务的栈空间所需的内存,需要用户分配提供。

3、任务控制块结构体成员介绍

在这里插入图片描述

  1. 任务栈栈顶,在任务切换时的任务上下文保存、任务恢复息息相关。
  2. 每个任务都有属于自己的任务控制块,类似身份证。

4、什么是临界区保护

临界区保护,保护那些不想被打断的程序段,关闭freertos所管理的中断,中断无法打断,滴答中断和PendSV中断无法进行不能实现任务调度 。

5、动态创建优点

动态创建使用起来相对简单。在实际的应用中,动态方式创建任务是比较常用的,除非有特殊的需求,一般都会使用动态方式创建任务 。

6、静态创建优点

静态创建可将任务堆栈放置在特定的内存位置,并且无需关心对内存分配失败的处理 。

7、创建任务时任务堆栈所存内容

在这里插入图片描述

  1. 寄存器下PSR被初始为0x01000000,其中bit24被置1,表示使用Thumb指令。
  2. 寄存器PC被初始化为任务函数指针(任务A,即我们写的任务函数的地址),这样当某次任务切换后,任务A获得CPU控制权,任务函数(任务A)被出栈到PC寄存器,之后会执行任务A的代码。
  3. LR寄存器初始化为函数指针prvTaskExitError,这个函数是FreeRTOS提供的,是一个出错处理函数。
  4. 子函数的调用通过寄存器R0~R3传递参数,创建任务时,我们传入的参数被保存到R0中,用来向任务传递参数。

二、任务创建—动态方法

1、动态任务创建函数

函数参数:在这里插入图片描述

函数返回值:

在这里插入图片描述

2、实现动态创建任务流程

  1. 将FreeRTOSConfig.h文件中宏configSUPPORT_DYNAMIC_ALLOCATION配置为1。
  2. 定义函数入口参数。
  3. 编写任务函数。

动态任务创建函数创建的任务会立刻进入就绪态,由任务调度器调度运行。

3、动态任务创建函数内部实现简述

  1. 申请堆栈内存&任务控制块内存。
  2. TCB结构体(任务控制块)成员赋值。
  3. 添加新任务到就绪列表中。

三、任务创建—静态方法(掌握)

1、静态任务创建函数

函数参数:在这里插入图片描述

函数返回值:

在这里插入图片描述

2、实现静态创建任务流程

  1. 将FreeRTOSConfig.h文件中宏configSUPPORT_STATIC_ALLOCATION配置为1。
  2. 定义空闲任务&定时器任务的任务堆栈以及TCB。
  3. 实现两个接口函数(vAppLicationGetldleTaskMemory() 空闲任务接口函数和vApplicationGetTimerTaskMemory()定时器任务接口函数)。
  4. 定义函数入口参数。
  5. 编写任务函数。

静态任务创建函数创建的任务会立刻进入就绪态,由任务调度器调度运行。

3、静态任务创建函数内部实现简述

  1. TCB结构体成员赋值。
  2. 添加新任务到就绪列表中。

四、任务删除

1、任务删除函数

在这里插入图片描述

任务删除函数用于删除已经被创建的任务,被删除的任务将从就绪任务列表、阻塞任务列表、挂起任务列表和事件列表中移除。

注意:

  1. 当传入的参数为NULL,则代表删除任务自身(当前正在运行的任务)。
  2. 空闲任务会负责释放被删除任务中由系统分配的内存,但是由用户在任务删除前申请的内存空间,必须用户在任务被删除前提前释放,否则将会导致内存泄漏。

2、删除任务流程

  1. 使用删除任务函数,将FreeRTOSConfig.h文件中宏INCLUDE_vTaskDelete配置为1。
  2. 入口参数输入需要删除的任务句柄(NULL代表删除本身)。

3、删除任务函数内部实现简述

  1. 获取所要删除的任务控制块 — 通过传入的任务句柄,判断所需要删除哪个任务,NULL代表删除自身。

  2. 将被删除任务移除所在列表 — 将该任务所在列表中移除,包括:就绪、阻塞、挂起、事件等列表。

  3. 判断所需要删除的任务

    –> 删除任务自身,需要先添加到等待删除列表,内存释放将在空闲任务执行。

    –> 删除其他任务,释放内存,任务数量。

  4. 更新下个任务的阻塞时间 — 更新下一个任务的阻塞超时时间,以防止被删除的任务就是下一个阻塞超时的任务。



文章转载自:

http://tH9mMKPQ.pdghL.cn
http://mh6InWJf.pdghL.cn
http://2lmCOTCr.pdghL.cn
http://7w1u4RTX.pdghL.cn
http://2SS8GeOS.pdghL.cn
http://5JUFhY7k.pdghL.cn
http://nldpyngd.pdghL.cn
http://6RsOlSoe.pdghL.cn
http://4r86S1SS.pdghL.cn
http://a2xmpFnV.pdghL.cn
http://JHvot22F.pdghL.cn
http://bGbhrvcz.pdghL.cn
http://zezBfl0h.pdghL.cn
http://oPpzNfWY.pdghL.cn
http://Dl5P0Ui0.pdghL.cn
http://CsoRfgvT.pdghL.cn
http://JxL28UaT.pdghL.cn
http://jaEJ4RUh.pdghL.cn
http://OG0VAdMr.pdghL.cn
http://L1Akqff1.pdghL.cn
http://9FG1g3dG.pdghL.cn
http://OWOG6Pys.pdghL.cn
http://90q0UfOR.pdghL.cn
http://ClI1vOwt.pdghL.cn
http://2ij07uFt.pdghL.cn
http://xDT0qmhv.pdghL.cn
http://P7aGWU0R.pdghL.cn
http://Slv7xxsQ.pdghL.cn
http://qaw5E8Sd.pdghL.cn
http://F0on4Sdb.pdghL.cn
http://www.dtcms.com/a/366429.html

相关文章:

  • MongoDB Change Streams:实时监听数据变化的实战场景
  • 【Linux我做主】细说进程等待
  • 基于脚手架微服务的视频点播系统-界面布局部分(二):用户界面及系统管理界面布局
  • 基于机器学习的缓存准入策略研究
  • Jmeter基础教程详解
  • Prometheus、Alertmanager、Pushgateway、node_export处理pprof漏洞
  • 鸿蒙:状态管理V2(V2装饰器的学习)
  • 分析流程自动优化!Fabarta个人专属智能体「数据分析」新功能介绍
  • 0基础怎么学习数据分析、统计分析、机器学习?数学不好、一看编程就头疼,能行吗?
  • (Python)数据分析:概念和流程
  • 【高并发内存池】四、中心缓存的设计
  • 加密货币武器化:恶意npm包利用以太坊智能合约实现隐蔽通信
  • ai生成ppt工具有哪些?10款主流AI生成PPT工具盘点
  • 智慧油站新机遇:一款加油小程序如何让生意“加油”提速?
  • Ubuntu 24.04 中 nvm 安装 Node 权限问题解决
  • Jfinal-简
  • VR红色教育基地+数字党建展厅+智慧校史馆
  • 基于单片机智能水龙头/智能洗漱台设计
  • Android入门到实战(八):从发现页到详情页——跳转、传值与RecyclerView多类型布局
  • Android SystemServer 系列专题【AttentionManagerService】
  • 如何在SpringBoot项目中优雅的连接多台Redis
  • Windows 编程——字符串处理
  • ReAct模式解读
  • 学会 Java 异常处理,其实没你想的那么难
  • 学习PaddlePaddle--环境配置-Windows 11 + RTX 4060
  • 渐变背景色和渐变字体颜色的实现方法
  • 美团开源龙猫大模型,与DeepSeek V3同一梯队?
  • 让B站视频4倍速度播放
  • Redis C++ 实现笔记(F篇)
  • 23种设计模式-Proxy模式