FreeRTOS 创建第一个任务

创建第一个任务

概述

创建任务的函数为:

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 版本

  • 4
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

物联网老王

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值