Chinaunix首页 | 论坛 | 博客
  • 博客访问: 96817
  • 博文数量: 12
  • 博客积分: 1400
  • 博客等级: 上尉
  • 技术积分: 485
  • 用 户 组: 普通用户
  • 注册时间: 2009-06-12 22:46
文章分类

全部博文(12)

文章存档

2011年(1)

2009年(11)

我的朋友

分类: 嵌入式

2009-07-06 00:06:48

这里以实时系统uc/os-II为例进行说明。

利用μCOS-Ⅱ实现低功耗的原理
    μCOS-Ⅱ总是运行进入就绪状态的优先级最高的任务。一旦优先级高的任务进入就绪态,就可以将CPU从低优先级任务中抢过来。在μCOS-Ⅱ初始化时, 会建立一个优先级最低的任务——空闲任务,在没有任务进入就绪态的时候,空闲任务就会开始运行。空闲任务会调用一个函数—— OSTaskIdleHook()。这是留给用户使用的内核扩展接口。空闲任务实际上并没有什么事情可做,只是一个等待中断的无限循环。因此用户可以利用 OSTaskIdleHook(),降低或者关闭系统时钟,使CPU进入低功耗模式。在实际的测试中,可修改文件OS_CPU_A.ASM,添加控制实时时钟的例程,然后在应用程序或函数OSTaskIdleHook()中调用。

低功耗方案
方案一:系统在空闲状态下关闭实时时钟,进入低功耗状态。但这种方法会使操作系统停止运行而无法进行任务调度,故需要定时器周期性地唤醒CPU。CPU被 唤醒之后重新判断是否有任务处于就绪态,如果有就执行该任务;如果没有则再次进入空闲状态并关闭实时时钟进入低功耗状态。用户任务工作在高功耗状态,空闲任务则关闭实时时钟,处于低功耗状态。

方案二:系统在空闲状态下不关闭实时时钟,而是进入最低的工作频率,此时处理器处于低功耗工作状态,操作系统仍然可以进行任务调度。当有用户任务时,由用户任务先把实时时钟频率升高,然后再运行用户代码。每次进入用户任务之前,先将实时时钟频率升高,用户任务运行结束进入空闲状态时,再将实时时钟频率降低。

详见:
阅读(2136) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~