这里以实时系统uc/os-II为例进行说明。
利用μCOS-Ⅱ实现低功耗的原理
μCOS-Ⅱ总是运行进入就绪状态的优先级最高的任务。一旦优先级高的任务进入就绪态,就可以将CPU从低优先级任务中抢过来。在μCOS-Ⅱ初始化时,
会建立一个优先级最低的任务——空闲任务,在没有任务进入就绪态的时候,空闲任务就会开始运行。空闲任务会调用一个函数——
OSTaskIdleHook()。这是留给用户使用的内核扩展接口。空闲任务实际上并没有什么事情可做,只是一个等待中断的无限循环。因此用户可以利用
OSTaskIdleHook(),降低或者关闭系统时钟,使CPU进入低功耗模式。在实际的测试中,可修改文件OS_CPU_A.ASM,添加控制实时时钟的例程,然后在应用程序或函数OSTaskIdleHook()中调用。
低功耗方案
方案一:系统在空闲状态下关闭实时时钟,进入低功耗状态。但这种方法会使操作系统停止运行而无法进行任务调度,故需要定时器周期性地唤醒CPU。CPU被
唤醒之后重新判断是否有任务处于就绪态,如果有就执行该任务;如果没有则再次进入空闲状态并关闭实时时钟进入低功耗状态。用户任务工作在高功耗状态,空闲任务则关闭实时时钟,处于低功耗状态。
方案二:系统在空闲状态下不关闭实时时钟,而是进入最低的工作频率,此时处理器处于低功耗工作状态,操作系统仍然可以进行任务调度。当有用户任务时,由用户任务先把实时时钟频率升高,然后再运行用户代码。每次进入用户任务之前,先将实时时钟频率升高,用户任务运行结束进入空闲状态时,再将实时时钟频率降低。
详见:
阅读(2149) | 评论(0) | 转发(0) |