静态创建任务函数
TaskHandle_t xTaskCreateStatic
{
TaskFunction_t pxTaskCode, /* 指向任务函数的指针 /
const char * const pcName, / 任务函数名 /
const uint32_t ulStackDepth, / 任务堆栈大小注意字为单位 /
void * const pvParameters, / 传递的任务函数参数 /
UBaseType_t uxPriority, / 任务优先级 */
StackType_t * const puxStackBuffer, / 任务堆栈,一般为数组,由用户分配 /
StaticTask_t * const pxTaskBuffer / 任务控制块指针,由用户分配 /
}
返回值:
NULL—>用户没有提供相应的内存,任务创建失败;
其他值—>任务句柄,任务创建成功
静态创建任务使用流程:
1、需将宏configSUPPORT_STATIC_ALLOCATION 配置为 1
2、定义空闲任务&定时器任务的任务堆栈及TCB
3、实现两个接口函数:
vApplicationGetIdleTaskMemory( )//空闲任务软件内存赋值
vApplicationGetTimerTaskMemory ( )//定时器任务内存赋值
4、定义函数入口参数
5、编写任务函数
此函数创建的任务会立刻进入就绪态,由任务调度器调度运行
静态创建内部实现:
1、TCB结构体成员赋值
2、添加新任务到就绪列表中
任务删除函数:
void vTaskDelete(TaskHandle_t xTaskToDelete);
形参:
xTaskToDelete—>待删除任务的任务句柄;
用于删除已被创建的任务
被删除的任务将从就绪态任务列表、阻塞态任务列表、挂起态任务列表和事件列表中移除
注意:1、当传入的参数为NULL,则代表删除任务自身(当前正在运行的任务)
2、空闲任务会负责释放被删除任务中由系统分配的内存(针对动态任务),但是由用户在任务删除前申请的内存, 则需要由用户在任务被删除前提前释放,否则将导致内存泄露
删除任务流程:
1、使用删除任务函数,需将宏INCLUDE_vTaskDelete 配置为 1
2、入口参数输入需要删除的任务句柄(NULL代表删除本身)
删除任务内部实现过程:
1、获取所要删除任务的控制块:通过传入的任务句柄,判断所需要删除哪个任务,NULL代表删除自身。
2、将被删除任务,移除所在列表:将该任务在所在列表中移除,包括:就绪、阻塞、挂起、事件等列表。
3、判断所需要删除的任务:删除任务自身,需先添加到等待删除列表,内存释放将在空闲任务执行,删除其他任务,释放内存,任务数量–
4、更新下个任务的阻塞时间:更新下一个任务的阻塞超时时间,以防被删除的任务就是下一个阻塞超时的任务。