FreeRTOS

任务创建和删除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代表删除本身)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值