网站制作代理加盟,个人网站企业备案区别,如何做菠菜网站代理,淘宝推广方式FreeRtos任务的创建与删除 任务的创建与删除本质上是调用FreeRtos的API函数。 API函数#xff1a; 1.xTaskGreate():动态创建任务函数#xff1b; 2.xTaskGreateStatic();静态创建任务函数#xff1b; 3.xTaskDelete():任务删除 动态创建任务#xff1a;任务的任务控制块以…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个字节大小。 voidconst 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;