一、任务创建和删除API函数
FreeRTOS 最基本的功能就是任务管理,而任务管理最基本的操作就是创建和删除任务。
FreeRTOS的任务创建和删除API函数如下:
1、函数 xTaskCreate()
此函数用来创建一个任务,任务需要 RAM 来保存于任务有关的状态信息(任务控制块),任务也需要一定的 RAM 来作为任务堆栈。如果使用函数 xTaskCreate() 来创建任务的话,那么这些所需的 RAM 就会自动的从 FreeRTOS 的堆栈中分配,因此必须提供内存管理文件,默认我们使用的 heap_4.c 这个内存管理文件,而且宏 configSUPPORT_DYNAMIC_ALLOCATION 必须为 1。
如果使用函数 xTaskCreateStatic()创建的话这些 RAM 就需要用户来提供了。新创建的任务默认就是就绪态的,如果当前没有比它更高优先级的任务运行那么此任务就会立即进入运行态开始运行,不管在任务调度器启动前还是启动后,都可以创建任务。
参数:
- pxTaskCode 任务函数
- pcName 任务名字,一般用于追踪和调试,任务名字长度不能超过 configMAX_TASK_NAME_LEN。
- usStackDepth 任务堆栈大小,需要注意实际申请到的堆栈是 usStackDepth 的 4倍。其中空闲任务的任务堆栈大小为 configMINIMAL_STACK_SIZE。
- pvParameters 传递给任务函数的参数。
- uxPriority 任务优先级,范围 0~ configMAX_PRIORITIES-1。其中 0 是最低优先级,configMAX_PRIORITIES-1 是最高优先级。注意和 uC/OS 的区别,uC/OS 中 0 是最高优先级!宏 configMAX_PRIORITIES 不能超过 32 ! 也就是优先级不能超过 32 级。
- pxCreatedTask 任务句柄,任务创建成功以后会返回任务的任务句柄。这个句柄其实就是任务的任务堆栈。此参数就用来保存这个任务句柄。
返回值:
- pdPASS: 任务创建成功。
- errCOULD_NOT_ALLOCATE_REQUIRED_MEMORY: 任务创建失败,因为堆内存不足!
示例:
2、函数 xTaskCreateStatic()
此函数和 xTaskCreate() 的功能相同,噎死用来创建任务的。但是使用此函数创建的任务的 RAM 需要用户来提供。如果使用此函数的话需要将宏
configSUPPORT_STATIC_ALLOCATION 定义为 1。
参数:
- pxTaskCode 任务函数
- pcName 任务名字,一般用于追踪和调试,任务名字长度不能超过 configMAX_TASK_NAME_LEN。
- usStackDepth 任务堆栈大小,需要注意实际申请到的堆栈是 usStackDepth 的 4倍。其中空闲任务的任务堆栈大小为 configMINIMAL_STACK_SIZE。
- pvParameters 传递给任务函数的参数。
- uxPriority 任务优先级,范围 0~ configMAX_PRIORITIES-1。其中 0 是最低优先级,configMAX_PRIORITIES-1 是最高优先级。注意和 uC/OS 的区别,uC/OS 中 0 是最高优先级!宏 configMAX_PRIORITIES 不能超过 32 ! 也就是优先级不能超过 32 级。
- puxStackBuffer: 任务堆栈,一般为数组,数组类型要为 StackType_t 类型。
- pxTaskBuffer: 任务控制块。
返回值:
- NULL: 任务创建失败,puxStackBuffer 或 pxTaskBuffer 为 NULL 的时候会导致这个错误的发生。
- 其他值: 任务创建成功,返回任务的任务句柄。
示例: