FreeRTOS 创建第一个任务

2023-05-16

创建第一个任务

概述

创建任务的函数为:

BaseType_t xTaskCreate(    TaskFunction_t pvTaskCode,
                            const char * const pcName,
                            configSTACK_DEPTH_TYPE usStackDepth,
                            void *pvParameters,
                            UBaseType_t uxPriority,
                            TaskHandle_t *pxCreatedTask
                          );

除 FreeRTOS 标准的上述函数外,ESP-IDF 提供另增的 函数:

BaseType_t xTaskCreatePinnedToCore(TaskFunction_t pvTaskCode, 
									const char *const pcName, 
									const uint32_t usStackDepth, 
									void *const pvParameters, 
									BaseType_t uxPriority, 
									TaskHandle_t *const pvCreatedTask, 
									const BaseType_t xCoreID)

是的,后者相比前者多了一个传参 xCoreID,因为一些 ESP32 是双核 CPU,这个参数用于指示创建的 task 运行在哪个 CPU 核心上。

需求及功能解析

任务创建的几个参数分别是:

pvTaskCode–任务要执行的代码。通常是个循环代码块。注意,TaskCode 是下述概念的核心。

pcName–任务的描述性名称。这主要是为了便于调试。

usStackDepth–任务堆栈的大小,指定为字节数,上述 TaskCode 中的局部变量将从该空间分配空间。请注意,这与标准的 FreeRTOS 不同,标准的 FreeRTOS 中这里以字(一个字可能是4个字节)为单位。

pvParameters– 指向传递给 TaskCode 中的参数。

uxPriority–任务运行的优先级。值越大,优先级越高,越容易获取 CPU 的使用权而得到执行。

pvCreatedTask–任务句柄,用于标识该任务,后续可以通过该句柄管理、删除任务、获取任务的信息等。

xCoreID–指定该任务运行的CPU 核心。如果你使用的不是双核的设备,请不要使用 xTaskCreatePinnedToCore(),必须使用的情况下,即便指定为 CPU1,也会默认在 CPU0 上创建任务。

示例解析

示例输出:

I (10) TASK1: task1_flag = 0, arg1 = 1
I (336) TASK2: task2_flag = 0, arg2 = 2
I (346) TASK3: task3_flag = 0, arg3 = 3

任务创建后,将自动运行,每隔一段时间(通过 vTaskDelay(pdMS_TO_TICKS(1000));实现延时)打印任务的 flag 和 传递到任务中的参数。

请注意,ESP-IDF 提供了一些高级的打印函数,如 ESP_LOGI()、ESP_LOGW(),它们是 printf() 的变体,像使用 printf() 一样去使用它们就可以了,后续不再说明。

讨论

任务创建函数中的几个参数对任务运行的影响,建议随时使用上篇博客中介绍的相关资源,通过网络查询使用到的相关 API。

总结

1)ESP32 启动后将自动启用 FreeRTOS,并运行 void app_main(void) 中的代码

2)创建任务使用 xTaskCreate()、xTaskCreatePinnedToCore(),任务被创建后将自动被 FreeRTOS 管理,自动加载运行任务中的 TaskCode.

3)任务中的延时使用 vTaskDelay(),延时 1000ms 的示例为 vTaskDelay(pdMS_TO_TICKS(1000));

资源链接

1)Learning-FreeRTOS-with-esp32 系列博客介绍
2)对应示例的 code 链接 (点击直达代码仓库)
3) 下一篇: FreeRTOS 创建任务的 Static 版本

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

FreeRTOS 创建第一个任务 的相关文章

随机推荐

  • Writable接口

    在org apache hadoop io中 xff0c hadoop使用自己的序列化格式Writables接口 xff0c 具有紧凑 xff0c 快速的特点 xff0c 不过目前只有用Java才能较容易扩展 在hadoop中 xff0c
  • 解决数据库连接慢问题

    解决数据库连接慢问题方法 xff1a 方法一 连接数据库时 xff0c 使用localhost xff0c 不要使用明确的IP地址 xff08 远程数据库除外 xff09 xff1b 方法二 在my cnf配置文件里 xff0c 添加ski
  • 难忘的2011

    前言 xff1a 这些年 xff0c 每到年终之时 xff0c 我都会写个总结 2009年的 优化生活 规划未来 记录了一位初级网络优化工程师09年的所想与所做以及对10年的规划与展望 xff1b 2010年的 今天的2010 xff0c
  • QT从字体名获取字库文件路径(从宋体获取到simsun.ttc)

    MFC版本的从字体名获取字库文件路径点击此处 最近弄的一份项目需要裁剪ttf字库 xff0c 故需要用到此功能 xff01 用了几年QT xff0c 个人感觉类库是非常强大的 xff01 QT相比VS的话亮点在开源的类库非常的丰富 xff0
  • C++编写分形问题

    目的 xff1a 递归是基本的算法思想和设计方法之一 xff0c 也是数据结构重点讲授的部分 xff0c 是许多算法的基础 xff0c 对它们的理解和运用直接关系着其他算法的理解和应用 因此 xff0c 熟练掌握递归是十分重要的 通过本题
  • MFC从字体名获取字库文件路径(从宋体获取到simsun.ttc)

    上一篇有讲到在QT中从字体名获取文字的路径 xff0c 这个是MFC版本的 xff1a QT从字体名获取字库文件路径 include lt string gt using namespace std void wcharTochar con
  • 如何在 IntelliJ IDEA 中快速生成 JavaDoc 注释模板

    笔者的工作环境 xff1a IntelliJ IDEA 2021 2 2 Ultimate Edition JDK 17 使用 IntelliJ IDEA 中的实时模块可以快速生成 JavaDoc 注释 方法如下 xff1a xff08 I
  • FYI,PFA

    FYI For Your Information 供您参考 PFA please find attached 请参看附件
  • ArcGISEngine10.0安装后因为授权问…

    ArcGISEngine10 0 安装后因为授权问题无法使用 xff0c 添加控件提示错误 例如 xff1a 创建组件 ToolbarControl 失败 错误消息为 xff1a System ComponentModel LicenseE
  • 关于transition-group报错children must be keyed: div

    学习项目时遇到了这个报错 原来的写法 lt div v for 61 34 ball in balls 34 v show 61 34 ball show 34 class 61 34 ball 34 gt lt div class 61
  • 为什么老板对项目时间安排的永远是那么的紧?

    简单分析一下 xff0c 原因基本上也就这么两点 xff0c 一方面 xff0c 可以压缩你的时间 xff0c 大家都知道时间就是公司的最大成本 xff0c 用的时间越少 xff0c 带来的价格也就越高 1年完成的项目 半年提前完成 xff
  • GCC NOT FOUNT

    错误提示 xff1a arm linux gcc Command not found 原因 xff1a 1 xff09 没有在 bashrc 或者 etc environment中添加交叉编译工具链bin文件路径 解决方法 xff1a 使用
  • 记录个人编译DCNv2的过程(windows 10,vs2019, torch1.7.0)

    小白一个 xff0c 因为配FairMOT环境需要用到DCNv2 xff0c 就简单记录一下自己遇到的问题和解决方法 如有错误 xff0c 请多指教 首先主要参考了博客https blog csdn net Ningmoua article
  • 初识CMMI2.0

    初识 CMMI2 0 xff08 以下内容根据网络知识学习和整理而成 xff09 正式发布与获取 xff1a 2018 年 3 月 8 日 xff0c CMMI2 0 正式版本正式上线全新的主页 xff08 https cmmiinstit
  • C++编写杨辉三角

    xff08 1 xff09 美观很重要 xff0c 哈哈哈 include lt iostream gt include lt iomanip gt using namespace std int YangHuiData int n n是杨
  • IP地址的分类及范围详解:A、B、C、D、E五类是如何划分的

    IP地址类型 最初设计互联网络时 xff0c 为了便于寻址以及层次化构造网络 xff0c 每个IP地址包括两个标识码 ID xff0c 即网络ID和主机ID 同一个物理网络上的所有主机都使用同一个网络ID xff0c 网络上的一个主机 包括
  • iscsiadm命令基本用法

    发现目标 iscsiadm m discovery t sendtargets p 192 168 1 1 3260 m discovery 指定模式为discovery p 192 168 1 1 3260 指定目标ip和端口 登入节点
  • linux内核中的睡眠函数*delay、*sleep

    目录 一 睡眠函数种类 1 原子上下文 2 非原子上下文 二 使用环境 1 使用环境的不同 xff0c 选择不同的延时 2 驱动机制不同 3 内核中的计算函数执行的函数 三 实测两类函数的延时以及原因 1 测试系统中的睡眠函数 2 输出结果
  • RTOS 和裸机系统的异同-基于 ESP32 学习双核 FreeRTOS 的使用

    Learning FreeRTOS with esp32 什么是 RTOS 其本质上是运行在小型嵌入式设备上的特殊软件 系统软件 如同手机的安卓系统软件 windows 系统软件 RTOS VS 裸机系统 传统的裸机系统 xff08 无操作
  • FreeRTOS 创建第一个任务

    创建第一个任务 概述 创建任务的函数为 xff1a BaseType t span class token function xTaskCreate span span class token punctuation span TaskFu