第9课 任务创建、删除和API函数
任务创建和删除本质是调用FreeRTOS的API函数
API函数 | 描述 |
---|---|
xTaskCreate() | 动态方式创建任务 |
xTaskCreateStatic() | 静态方式创建任务 |
xTaskDelete() | 删除任务 |
- 动态创建任务:
任务的任务控制块以及任务的栈空间所需的内存,均由FreeRTOS自动从系统管理的堆中分配(自动)
- 静态创建任务:
任务的任务控制块以及任务的栈空间所需的内存,需要用户分配提供(人为)
2、实现动态创建任务的流程
- 将宏configSUPPORT_DIYAMIC_ALLOCATION配置为1
- 定义入口参数
- 编写任务函数
此函数创建的任务会立刻进入就绪态,由任务调度器运行
3、实现静态创建任务的流程
- 将宏configSUPPORT_DIYAMIC_ALLOCATION配置为1
- 定义空闲任务&定时器任务的任务堆栈及TCB
- 实现两个接口函数
- vApplicationGetldleTaskMemory()
- vApplicationGetTimerTaskMemory()
- 定义函数入口参数
- 编写任务函数
此函数创建的任务会立刻进入就绪态,由任务调度器运行
4、任务删除函数
被删除的任务将从就绪任务列表、阻塞态任务列表、挂起态任务列表和事件列表中移除
注意:
1.当传入的参数为NULL,则代表删除任务自身(当前正在运行的任务)
2.空闲任务会负责释放被删除任务中由系统分配的内存,但是由用户在任务删除前申请的内存;对于静态任务由用户在删除前由用户在任务被删除前提前释放内存,否则将导致内存泄漏
删除任务流程
1、获取所要删除任务的控制块
2、将被删除任务,移除所在列表
3、判断所需要删除的任务
4、更新下个任务的阻塞时间