FreeRTOS函数说明

4.1.1动态创建任务函数

1)函数说明

cpp 复制代码
BaseType_t xTaskCreate
(
    TaskFunction_t pxTaskCode,                  /* 指向任务函数的指针 */
    const char * const pcName,                  /* 任务名字,最大长度configMAX_TASK_NAME_LEN */
    const configSTACK_DEPTH_TYPE usStackDepth,  /* 任务堆栈大小,默认单位4字节 */
    void * const pvParameters,                  /* 传递给任务函数的参数 */
    UBaseType_t uxPriority,                     /* 任务优先级,范围:0 ~ configMAX_PRIORITIES - 1 */
    TaskHandle_t * const pxCreatedTask          /* 任务句柄,就是任务的任务控制块 */
) 

返回值说明如下:

pdPASS:任务创建成功。

errCOULD_NOT_ALLOCATE_REQUIRED_MEMORY:任务创建失败。

2)动态创建任务步骤

(1)将宏configSUPPORT_DYNAMIC_ALLOCATION 配置为 1。

(2)定义函数入口参数。

(3)编写任务函数。

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

3)动态创建任务函数内部实现

(1)申请堆栈内存&任务控制块内存。

(2)TCB结构体成员赋值。

(3)添加新任务到就绪列表中。

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

c 复制代码
typedef struct tskTaskControlBlock       
{
    volatile StackType_t * pxTopOfStack; /* 任务栈栈顶,必须为TCB的第一个成员 */
    ListItem_t xStateListItem;                  /* 任务状态列表项 */
    ListItem_t xEventListItem;                  /* 任务事件列表项 */
    UBaseType_t uxPriority;                     /* 任务优先级,数值越大,优先级越大 */
    StackType_t * pxStack;                      /* 任务栈起始地址 */
    char pcTaskName[ configMAX_TASK_NAME_LEN ]; /* 任务名字 */  
    ...
    省略很多条件编译的成员
} tskTCB;

4.1.2静态创建任务函数

1)函数说明

cpp 复制代码
TaskHandle_t xTaskCreateStatic
( 
    TaskFunction_t pxTaskCode,          /* 指向任务函数的指针 */
    const char * const pcName,          /* 任务函数名 */
    const uint32_t ulStackDepth,        /* 任务堆栈大小,单位是4字节 */
    void * const pvParameters,          /* 传递的任务函数参数 */
    UBaseType_t uxPriority,             /* 任务优先级 */
    StackType_t * const puxStackBuffer, /* 任务堆栈,一般为数组,由用户分配 */
    StaticTask_t * const pxTaskBuffer   /* 任务控制块指针,由用户分配 */
)

返回值如下:

NULL:用户没有提供相应的内存,任务创建失败。

其他值:任务句柄,任务创建成功。

2)静态创建任务步骤

(1)将宏configSUPPORT_STATIC_ALLOCATION 配置为 1。

(2)定义空闲任务&定时器任务的任务堆栈及TCB。

(3)实现接口函数:

vApplicationGetIdleTaskMemory()

vApplicationGetTimerTaskMemory()(如果开启软件定时器)

(4)定义函数入口参数。

(5)编写任务函数。

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

3)静态创建内部实现

(1)TCB结构体成员赋值

(2)添加新任务到就绪列表中

相关推荐
张世争8 小时前
windows clion MingW cmake 编译运行 FreeRTOS
windows·freertos·mingw·cmake·clion
TangDuoduo00052 天前
【FreeRTOS推迟中断】
freertos
TangDuoduo00053 天前
【FreeRTOS空闲钩子函数、优先级函数、删除函数及调度器算法】
freertos
小曹要微笑4 天前
队列集详解
freertos·队列·队列集
wzfj123454 天前
FreeRTOS 学习方法
freertos
Zeku7 天前
20260103 - Linux平台总线LED驱动架构深度解析
stm32·freertos·linux驱动开发·linux应用开发
Zeku7 天前
20260102 - Linux驱动设计的思想
stm32·freertos·linux驱动开发·linux应用开发
Zeku7 天前
20260103 - Linux总线设备驱动模型学习笔记
stm32·freertos·linux驱动开发·linux应用开发
brave and determined8 天前
ESP32 FreeRTOS (day1)入门教程 (ESP-IDF版):从超级循环到多任务的系统化思维
操作系统·esp32·freertos·任务·任务调度器·任务控制块·嵌入式设计
森旺电子8 天前
STM32 上下文详解
stm32·单片机·嵌入式硬件·freertos