任务函数
每一个任务在创建时都需要绑定一个任务函数,作为任务执行的逻辑,也就是告诉这个任务该做些什么工作。
在FreeRTOS中,任务函数需要满足以下要求:
- 函数原型固定为:void TaskFunction(void* pvParameters)
- 函数的主体流程必须是一个无限循环,不能像普通的函数一样执行完就退出,它应该永不退出,直到任务被显式地删除
void TaskFunction(void* pvParameters)
{
uint32_t a = 0; //任务函数局部变量
for( ; ; )
{
/*任务函数的主体代码*/
}
}
多个任务实例可以绑定同一个任务函数,即便如此,不同的任务实例之间是相互独立的,每个任务都有自己独立的栈空间和任务函数局部变量。但是如果任务函数局部变量定义为static,那么用这个任务函数创建的任务实例会共享这一个静态变量,通常不推荐这么做。
创建任务
在FreeRTOS中,使用xTaskCreate()系统函数来创建一个任务。这个函数的原型如下:
BaseType_t xTaskCreate(
TaskFunction_t pvTaskCode, //任务绑定的任务函数
const char * const pcName, //任务名称
uint16_t usStackDepth, //任务的栈深度