【FreeRTOS】空闲任务及其钩子函数

目录

  1. 空闲任务
  2. 空闲任务的创建
  3. 空闲人物的钩子函数

1.空闲任务

FreeRTOS中空闲任务是开启任务调度器自动创建的一个任务,这样可以保证系统中有任务可以运行。空闲任务的优先级是最低的,优先级为0,当其他任务处于就绪态时,空闲任务会主动让出CPU的使用权。空闲任务只有两个状态:Running、Ready
空闲任务的功能:
1.保证系统有任务可以运行
2.如果某任务调用vTaskDelete(NULL)来进行自杀,而该任务的TCB和任务的堆栈不会同时释放,而是在空闲任务中释放掉,需要空闲任务来清理垃圾。
3. 空闲任务期间可以进入低功耗省电模式,因为空闲任务执行期间意味着没有其他重要的事情需要做,自然可以进入到省电模式。

2.空闲任务的创建

空闲任务是在开启任务调度器中创建的vTaskStartScheduler();
空闲任务可以按照静态函数的创建方法来创建。

3.空闲任务的钩子函数

首先需要将FreeRTOSConfig.h中的configUSE_IDLE_HOOK设置为1才可以使用空闲函数的钩子函数vApplicationIdleHook();

在任务1中创建任务2,任务2的优先级为2,任务1和空闲任务的优先级为0,任务2创建后,阻塞2个tick,任务2自杀。程序如下:

void Task2Function(void *param);
static int task1flag=0;
static int task2flag=0;
static int taskIdleflag=0;

void Task1Function(void *param)
{
	TaskHandle_t xHandleTask2;
	BaseType_t xReturn;
	
	while(1)
	{
		task1flag=1;
		task2flag=0;
		taskIdleflag=0;
		printf("1");
		xReturn = xTaskCreate(Task2Function,"Task2",100,NULL,2,&xHandleTask2);
		if(xReturn != pdPASS)
			printf("TaskCreate err\r\n");
		//vTaskDelete(xHandleTask2);
	}
}

void Task2Function(void *param)
{
	while(1)
	{
		task1flag=0;
		task2flag=1;
		taskIdleflag=0;
		printf("2");
		vTaskDelay(2);
		vTaskDelete(NULL);
	}
}

void vApplicationIdleHook(void)
{
	task1flag=0;
	task2flag=0;
	taskIdleflag=1;
	printf("0");
}

StackType_t xIdleTaskStack[100];
StaticTask_t xIdelTaskTCB;

void	vApplicationGetIdleTaskMemory(StaticTask_t ** ppxIdleTaskTCBBuffer,
									StackType_t ** ppxIdleTaskStackBuffer,
									uint32_t * pulIdleTaskStackSize)
{
	*ppxIdleTaskTCBBuffer=&xIdelTaskTCB; 
	*ppxIdleTaskStackBuffer=xIdleTaskStack;
	*pulIdleTaskStackSize=100;
}	

int main( void )
{
 	TaskHandle_t xHandleTask1;	
 	printf("Hello World!\r\n");
 	xTaskCreate(Task1Function,"Task1",100,NULL,0,&xHandleTask1);
    vTaskStartScheduler();
 }

任务1删除任务2运行结果:
在这里插入图片描述
任务2自杀运行结果:
在这里插入图片描述
感觉没有区别

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值