任务创建和删除API函数
函数 | 描述 |
---|---|
xTaskCreate() | 使用动态的方法创建一个任务。 |
xTaskCreateStatic() | 使用静态的方法创建一个任务。 |
xTaskCreateRestricted() | 创建一个使用 MPU 进行限制的任务,相关内存使用动态内存分配。 |
vTaskDelete() | 删除一个任务。 |
xTaxkCreate()动态创建任务
1.此函数用来创建一个任务,自动的从 FreeRTOS 的堆中分配任务堆栈,管理方式为我们前文提到选用的heap4.c
。
2.宏 configSUPPORT_DYNAMIC_ALLOCATION 必须为 1
函数原型
c
BaseType_t xTaskCreate( TaskFunction_t pxTaskCode,//任务函数
const char * const pcName,//任务函数名称,字符串
const uint16_t usStackDepth,//堆栈深度
void * const pvParameters,//可能的其他参数
UBaseType_t uxPriority,//优先级
TaskHandle_t * const pxCreatedTask )//任务句柄
参数 :
pxTaskCode
: 任务函数。
pcName
: 任务名字,一般用于追踪和调试,任务名字长度不能超过。configMAX_TASK_NAME_LEN。
usStackDepth
: 任务堆栈大小,注意实际申请到的堆栈是 usStackDepth 的 4 倍。其中空闲任务的任务堆栈大小为 configMINIMAL_STACK_SIZE。
pvParameters
: 传递给任务函数的参数。
uxPriotiry
: 任务优先级,范围 0~ configMAX_PRIORITIES-1。
pxCreatedTask
: 任务句柄,任务创建成功以后会返回此任务的任务句柄,这个句柄其实就是任务的任务堆栈。此参数就用来保存这个任务句柄。其他 API 函数可能会使用到这个句柄。
xTaskCreateStatic()静态创建任务
1.使用此函数创建的任务所需的RAM(任务堆栈也就是任务句柄,任务控制块)由用户自行实现(实际上就是声明定义一块内存)。
2.宏configSUPPORT_STATIC_ALLOCATION 定义为 1。
函数原型
c
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 )//控制块
参数 :
pxTaskCode
: 任务函数。
pcName
: 任务名字,一般用于追踪和调试,任务名字长度不能超过。configMAX_TASK_NAME_LEN。
usStackDepth
: 任务堆栈大小,由于本函数是静态方法创建任务,所以任务堆栈由用户给出,一般是个数组,此参数就是这个数组的大小。
pvParameters
: 传递给任务函数的参数。
uxPriotiry
: 任务优先级,范围 0~ configMAX_PRIORITIES-1。
puxStackBuffer
: 任务堆栈,一般为数组,数组类型要为 StackType_t 类型。
pxTaskBuffer
: 任务控制块。
xTaskCreateRestricted() 创建任务
此函数也是用来创建任务的,只不过此函数要求所使用的 MCU 有 MPU(内存保护单元),用此函数创建的任务会受到 MPU 的保护。其他的功能和函数 xTaxkCreate()一样。
函数原型
c
BaseType_t xTaskCreateRestricted( const TaskParameters_t * const pxTaskDefinition,
TaskHandle_t * pxCreatedTask )
参数 :
pxTaskDefinition
: 指向一个结构体 TaskParameters_t,这个结构体描述了任务的任务函数、堆栈大小、优先级等。此结构体在文件 task.h 中有定义。
pxCreatedTask
: 任务句柄。
vTaskDelete() 删除任务
删除一个用函数 xTaskCreate()或者 xTaskCreateStatic()创建的任务。由系统自动分配的内存会释放掉。用户分配给任务的内存需要用户自行释放。