任务函数
每一个任务在创建时都需要绑定一个任务函数,作为任务执行的逻辑,也就是告诉这个任务该做些什么工作。
在FreeRTOS中,任务函数需要满足以下要求:
- 函数原型固定为:void TaskFunction(void* pvParameters)
- 函数的主体流程必须是一个无限循环,不能像普通的函数一样执行完就退出,它应该永不退出,直到任务被显式地删除
void TaskFunction(void* pvParameters)
{
uint32_t a = 0; //任务函数局部变量
for( ; ; )
{
/*任务函数的主体代码*/
}
}
多个任务实例可以绑定同一个任务函数,即便如此,不同的任务实例之间是相互独立的,每个任务都有自己独立的栈空间和任务函数局部变量。但是如果任务函数局部变量定义为static,那么用这个任务函数创建的任务实例会共享这一个静态变量,通常不推荐这么做。
创建任务
在FreeRTOS中,使用xTaskCreate()系统函数来创建一个任务。这个函数的原型如下:
BaseType_t xTaskCreate(
TaskFunction_t pvTaskCode, /
本文深入探讨了FreeRTOS中的任务管理,包括任务函数的定义、任务的创建方式、任务状态(如运行态、就绪态、阻塞态和挂起态)及其转换,以及任务优先级的设定和影响。文中通过LED闪烁的例子,展示了任务如何根据优先级进行调度,并提出了使用vTaskDelay()函数改进延时方法,避免低优先级任务被“饿死”的问题。
订阅专栏 解锁全文

1137

被折叠的 条评论
为什么被折叠?



