任务创建和删除API
API函数 | 描述 |
xTaskCreate() | 动态方式创建任务 |
xTaskCreateStatic() | 静态方式创建任务 |
xTaskDelete() | 删除任务 |
动态:任务控制块以及任务栈空间所需内存由FreeRTOS自动分配;
静态:任务控制块以及任务栈空间所需内存由用户自己定义;
返回值 | 描述 |
pdPASS | 任务创建成功 |
err....MEMORY | 任务创建失败 |
动态任务创建流程
1.宏#define configSUPPORT_DYNAMIC_ALLOCATION 1 /* 1: 支持动态申请内存, 默认: 1 */
2.定义函数入口参数
3.编写任务函数
完成以上步骤就会进入就绪态,任务调度器调度运行
详细内部实现
1.申请堆栈和任务控制块内存
2.TCB结构体成员赋值
3.添加新任务到就绪列表中
Tips
任务控制块:任务的“身份证”
typedef struct tskTaskControlBlock
{
volatile StackType_t *pxTopOfStack; /*任务栈栈顶,TCB第一个成员*/
Listltem_t xStateListltem; /*任务状态列表项*/
Listltem_t xEventListltem; /*任务状态列表项*/
UBaseType_t uxPriority; /*任务优先级*/
StackType_t *pxStack; /*任务栈起始地址*/
char pcTaskName[configMAX_TASK_NAME_LEN];/*任务名字*/
}tskTCB;
静态任务创建流程
1.将宏#define configSUPPORT_STATIC_ALLOCATION配置为1
2.定义空闲任务&定时器任务的任务堆栈及PCB
3.实现两个接口函数
4.定义函数入口参数
5.编写任务函数
任务删除函数
void vTaskDelete(TaskHandle_t xTaskToDelete);
1.#define INCLUDE_vTaskDelete 配置为1
2.入口参数输入要删除的任务句柄(NULL代表删除本身)