FreeRtos自学笔记3-----参考正点原子视频

FreeRtos任务的创建与删除
任务的创建与删除本质上是调用FreeRtos的API函数。
API函数:
1.xTaskGreate():动态创建任务函数;
2.xTaskGreateStatic();静态创建任务函数;
3.xTaskDelete():任务删除

动态创建任务:任务的任务控制块以及任务的栈空间所需要的内存,均由FreeRtos的管理的堆中分配,系统运行时地址随机。
静态创建任务:任务的任务控制块以及任务的栈空间所需要的内存,均由用户自己分配,系统运行时地址不会修改。
动态创建任务函数:
Basetype_t xTaskGreat
{
TaskFunction_t pxTaskCode;
//指向任务函数的指针
const charconst pcName;
//任务名字,最大长度configMAX_TASK_NAME_LEN(一般默认16即任务名最长16个字符)
const configSTACK_DEPTH_TYPE usStackDepth;
//任务堆栈的大小,以字为单位,1个字等于4个字节大小。
void
const pvParameters;
//传递给任务函数的参数,很少用,一般为NULL
UBasetype_t uxPriority;
//任务优先级,范围0–configMAX_PRIORITIES-1;一般为0-31
TaskHandle_t*const pxGreatedTask;
//任务句柄,就是任务的控制块,任务删除时候就是使用这个
}
函数返回值
pdPASS 任务创建成功
errCOULD_NOT_ALLOCATE_REQUIRED_MEMORY 任务创建失败
一般任务创建失败是创建任务所需的栈的内存太大啦。
实现动态创建任务流程:
1.将宏configSUPPORT_DYNAMIC_ALLOCATION配置为1;即允许创建动态任务。
2.定义函数入口参数
3.编写任务函数
此函数创建的任务会立刻进入就绪态,由任务调度器运行
动态创建任务函数的内部实现:
1.申请堆栈内存和任务控制块内存;(我们只写内存大小,函数内部会自动帮我们分配)
2.TCB(任务控制块)成员赋值;(即任务的特性:如名字,栈大小,优先级等等)
3.添加新任务到就绪列表中。
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;
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值