FreeRTOS函数说明
4.1.1动态创建任务函数
1)函数说明
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)添加新任务到就绪列表中。
任务控制块结构体成员介绍。
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)函数说明
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)添加新任务到就绪列表中
