FreeRTOS_空闲任务

前言

总结整理下freertos中空闲任务的作用,加深下理解。


一、执行过程

1.检查是否有已自宫任务的内存需要释放
2.检查是否使用抢占式内核,若没使用就调用taskYIELD()函数(此函数用于自主放出cpu控制权,给其他已就绪的用户任务)
3.若使用了抢占式内核,并且configIDLE_SHOULD_YIELD等于1,那么空闲任务就把CPU使用权让给同优先级的其他任务。
4.是否使能钩子任务,若使能,则调用。
5.看是否使能了Tickless(低功耗)模式,若使能,则配置为低功耗模式。


二、 作用

1.确保内核一直有任务能够执行
空闲任务是由内核在调用函数vTaskStartScheduler()启动任务调度时自动创建的一个优先级最低的函数,当用户任务都处于阻塞状态时,内核就可以去运行空闲任务。空闲任务只有两个状态:运行和就绪。

2.清除已销毁任务所占的内存空间
当我们调用vTaskDelete()函数将任务销毁后,该任务的TCB和栈不会同时释放,只有运行空闲任务时,空闲任务会去清理内存。

3.执行空闲任务钩子函数
使能后的空闲任务的钩子函数在每个空闲任务执行周期内都会被调用,此函数常用于,执行低优先级功能代码;测试系统处理裕量;将处理器配置到低功耗模式。
要想执行空闲任务的钩子函数,还需要先将FreeRTOSConfig.h文件中的宏configUSE_IDLE_HOOK配置为1

4.空闲任务期间进入低功耗省电模式
因为没有用户任务需要执行占用CPU,所以在被使能的情况下可以配置进入低功耗模式。

三、使用空闲任务的钩子函数打印所有任务的栈信息

/* Hook prototypes */
void vApplicationIdleHook(void);

/* USER CODE BEGIN 2 */
void vApplicationIdleHook( void )
{
   /* vApplicationIdleHook() will only be called if configUSE_IDLE_HOOK is set
   to 1 in FreeRTOSConfig.h. It will be called on each iteration of the idle
   task. It is essential that code added to this hook function never attempts
   to block in any way (for example, call xQueueReceive() with a block time
   specified, or call vTaskDelay()). If the application makes use of the
   vTaskDelete() API function (as this demo application does) then it is also
   important that vApplicationIdleHook() is permitted to return to its calling
   function, because it is the responsibility of the idle task to clean up
   memory allocated by the kernel to any task that has since been deleted. */
	int i;
	/*将任务列表的信息写入一个缓冲区pcWriteBuffer。*/
	vTaskList(pcWriteBuffer);
	for (i = 0; i < 16; i++)
		printf("-");
	printf("\n\r");
	/*通过printf函数将任务列表信息打印出来,格式为”%s\n\r"*/
	printf("%s\n\r", pcWriteBuffer);
}
/* USER CODE END 2 */

注意:
要使用vTaskList()函数,需要使能FreeRTOSConfig.h 中如下两个宏:
configUSE_TRACE_FACILITY 和 configUSE_STATS_FORMATTING_FUNCTIONS
要使用空闲任务的钩子函数,也需要使能宏USE_IDLE_HOOK

串口输出信息:

[15:57:47.800] ----------------
               任务名称     任务状态   优先级   栈剩余空间          任务号
[15:57:47.803] IDLE           	X		0		60					5
[15:57:47.806] GameTask       	B		24		14					2
[15:57:47.810] ColorTask      	B		24		91					4
[15:57:47.817] LightTask      	B		24		59					3	
[15:57:47.820] Tmr Svc        	B		2		165					6
[15:57:47.822] MPU6050Task    	B		24		54					8
[15:57:47.826] platform_task  	B		24		58					10
[15:57:47.826] InputTask      	B		24		90					9
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值