FreeRTOS中创建任务API

“用于自学,学到哪儿更到哪儿“

1.xTaskCreate

  • 创建一个新任务,并将其添加到准备运行的任务列表中。
  • 在内部,在 FreeRTOS 实施中,任务使用两个内存块。第一个块用于保存任务的数据结构。第二个块被任务用作其堆栈。如果使用
    xTaskCreate() 创建任务,则两个内存块都会在 xTaskCreate() 函数中自动动态分配。
  • xTaskCreate() 只能用于创建对整个微控制器内存映射具有不受限制访问权限的任务。包含 MPU 支持的系统也可以使用 xTaskCreateRestricted() 创建 MPU 约束任务。

函数原型:

static inline BaseType_t xTaskCreate(TaskFunction_t pxTaskCode, const char *const pcName, const configSTACK_DEPTH_TYPE usStackDepth, void *const pvParameters, UBaseType_t uxPriority, TaskHandle_t *const pxCreatedTask)

参数:

pxTaskCode -- 指向任务输入函数的指针。必须实现任务以永不返回(即连续循环)。

pcName -- 任务的描述性名称。这主要用于方便调试。最大长度由 configMAX_TASK_NAME_LEN 定义 - 默认值为 16。

usStackDepth -- 指定为 NUMBER OF BYTES 的任务堆栈的大小。请注意,这与原版 FreeRTOS 不同。

pvParameters -- 将用作正在创建的任务的参数的指针。

uxPriority -- 任务应运行的优先级。包含 MPU 支持的系统可以选择通过设置优先级参数的位portPRIVILEGE_BIT来在特权(系统)模式下创建任务。例如,要创建优先级为 2 的特权任务,

uxPriority 参数应设置为 ( 2 | portPRIVILEGE_BIT )。

pxCreatedTask -- 用于传回一个句柄,通过该句柄可以引用创建的任务。

返回值:

pdPASS,如果任务已成功创建并添加到就绪列表,否则会在文件 projdefs.h 中定义错误代码

2. xTaskCreateStatic

  • 创建一个新任务,并将其添加到准备运行的任务列表中。
  • 使用 xTaskCreateStatic() 创建任务,则应用程序编写器必须提供所需的内存。因此,xTaskCreateStatic()允许在不使用任何动态内存分配的情况下创建任务。

函数原型:

static inline TaskHandle_t xTaskCreateStatic(TaskFunction_t pxTaskCode, const char *const pcName, const uint32_t ulStackDepth, void *const pvParameters, UBaseType_t uxPriority, StackType_t *const puxStackBuffer, StaticTask_t *const pxTaskBuffer)

参数:

pxTaskCode -- 指向任务输入函数的指针。必须实现任务以永不返回(即连续循环)。

pcName -- 任务的描述性名称。这主要用于方便调试。字符串的最大长度由 FreeRTOSConfig.h 中的configMAX_TASK_NAME_LEN定义。

ulStackDepth -- 指定为 NUMBER OF BYTES 的任务堆栈的大小。请注意,这与原版 FreeRTOS 不同。

pvParameters -- 将用作正在创建的任务的参数的指针。

uxPriority -- 任务运行的优先级。

puxStackBuffer -- 必须指向至少具有 ulStackDepth 索引的 StackType_t 数组 - 然后该数组将用作任务的堆栈,无需动态分配堆栈。

pxTaskBuffer -- 必须指向 StaticTask_t 类型的变量,然后该变量将用于保存任务的数据结构,无需动态分配内存。

返回值:
如果 puxStackBuffer 和 pxTaskBuffer 均不为 NULL,则将创建任务并返回已创建任务的句柄。如果 puxStackBuffer 或 pxTaskBuffer 为 NULL,则不会创建任务并返回 NULL。

  • 8
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值