FreeRTOS空闲任务与阻塞延时

1. 空闲任务

	RTOS 中的延时叫阻塞延时,即任务需要延时的时候,任务会放弃 CPU 的使用权,CPU 可以去干其它的事情,当任务延时时间到,重新获取 CPU 使用权,任务继续运行。当任务需要延时,进入阻塞状态,CPU 就运行空闲任务。在FreeRTOS 中,空闲任务是系统在【启动调度器】的时候创建的优先级最低的任务,空闲任务主体主要是做一些系统内存的清理工作,也可以进入休眠或者低功耗等操作。
	定义空闲任务栈,空闲任务的栈是一个定义好的数组,大小由 宏 configMINIMAL_STACK_SIZE 控制,默认为 128,单位为字,即 512个字节。定义空闲任务的任务控制块,任务控制块是每一个任务必须的,空闲任务的的任务控制块我们在 main.c 中定义,是一个全局变量。创建空闲任务,空闲任务在调度器启动函数 vTaskStartScheduler() 中创建。将空闲任务插入到就绪列表的开头,空闲任务默认的优先级是最低的,即排在就绪列表的开头。

2. 阻塞延时

阻塞延时的阻塞是指任务调用该延时函数后,任务会被剥离 CPU 使用权,然后进入阻塞状态,直到延时结束,任务重新获取 CPU 使用权才可以继续运行。在任务阻塞的这段时间,CPU 可以去执行其它的任务,如果其它的任务也在延时状态,那么 CPU 就将运行空闲任务。阻塞延时函数vTaskDelay ()函数,通过 xTicksToDelay 设置当前任务的延时时间,切换任务。xTicksToDelay 是任务控制块的一个成员,用于记录任务需要延时的时间,单位为 SysTick 的中断周期。

3. SysTick 中断服务函数

操作系统里面的最小的时间单位就是SysTick 的中断周期,我们称之为一个 tick,xTicksToDelay 就是以这个周期在递减。
 xTaskIncrementTick()函数,更新系统时基计数器 xTickCount,加一操作,扫描就绪列表中所有任务的 xTicksToDelay,如果不为 0,则减 1,执行一次任务切换。
 SysTick 的中断服务函数要想被顺利执行,则 SysTick 必须先初始化。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值