FreeRTOS原理剖析:空闲任务分析

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
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值