1. 空闲任务相关API函数
函数 | 描述 |
---|---|
portTASK_FUNCTION() | 宏定义,真正函数原型为void prvIdleTask(void * pvParameters) |
任务挂起中其它重要的API函数(介绍过的函数不列出,请参考前面的文章):
函数 | 描述 |
---|---|
prvCheckTasksWaitingTermination() | 回收等待列表xTasksWaitingTermination中任务的堆栈和任务控制块内存 |
vApplicationIdleHook() | 任务钩子函数,由用户提供 |
prvGetExpectedIdleTime() | 获取下一个唤醒任务的时钟节拍数,即获取了处理器进入低功耗模式的时长 |
2. 空闲任务基本概念
在RTOS调度器开启后,为了确保至少有一个任务执行,FreeRTOS中会在开启调度器时自动创建空闲任务。
动态方式创建任务:
//动态方式创建空闲任务
xReturn = xTaskCreate( prvIdleTask,
"IDLE",
configMINIMAL_STACK_SIZE,
( void * ) NULL,
( tskIDLE_PRIORITY | portPRIVILEGE_BIT ),
&xIdleTaskHandle );
如果使用静态方式创建任务,需要用户自己定义空闲任务所需要的内存空间,如下:
//空闲任务
static StackType_t IdleTaskStack[configMINIMAL_STACK_SIZE];
static StaticTask_t IdleTaskTCB;
//空闲任务所需内存
void vApplicationGetIdleTaskMemory( StaticTask_t **ppxIdleTaskTCBBuffer,
StackType_t **ppxIdleTaskStackBuffer,
uint32_t *pulIdleTaskStackSize )
{
*ppxIdleTaskTCBBuffer=&IdleTaskTCB;
*ppxIdleTaskStackBuffer=IdleTaskStack;
*pulIdleTaskStackSize=configMINIMAL_STACK_SIZ