摘要:在嵌入式实时操作系统中,如何在操作系统层面尽量降低系统功耗已成为一个值得研究的问题。本文以嵌入式实时操作系统μC/OSII为例,以飞思卡尔8位单片机HCS08GT60作为硬件平台www.cechina.cn,详细讨论如何实现一个低功耗的实时操作系统,如何利用μC/OSII内核扩展接口省电;详细分析如何选择一种合适的单片机低功耗模式,说明利用μC/OSII内核扩展接口实现一个低功耗系统的可行性。
关键词:μC/OS-II 内核扩展接口 HCS08GT60 低功耗模式
引 言
随着消费类电子产品的功能日益复杂CONTROL ENGINEERING China版权所有,在其中移植或固化实时操作系统已不是新鲜事了,如手机、PDA等等。对于该类产品,低功耗特性往往占有举足轻重的地位。如何在操作系统层面上,尽量降低系统功耗,是一个值得探讨的问题。一般来说,嵌入式CPU都具有低功耗的工作模式,如果在任务调度的空闲时间CONTROL ENGINEERING China版权所有,使CPU进入这种模式,就能大幅度降低系统功耗。
本文以嵌入式实时操作系统μC/OS-II在飞思卡尔8位单片机HCS
1 利用空闲任务扩展接口使CPU进入低功耗模式
实现μC/OS-II低功耗特性的方法很简单:用户可以利用μC/OS-II中空闲任务的扩展接口,使系统在空闲状态下进入某种低功耗模式,降低系统功耗;同时利用RTI信号作为时钟节拍,周期性地唤醒CPU。CPU被唤醒之后,将执行节拍中断服务程序,重新判断是否有任务处于就绪态。如果有,就执行该任务;如果没有,则重复上面的过程。
μC/OS-II最多可以管理64个任务,并为每一个任务分配一个不同的优先级。每一个任务有五种可能的状态——睡眠态、就绪态、运行态、等待态和中断服务态。μC/OS-II属于可剥夺型内核,也就是说,μC/OS-II总是运行进入就绪状态的优先级最高的任务。一旦优先级高的任务进入就绪态,就可以将CPU从低优先级任务中抢过来。
在μC/OS-II初始化时控制工程网版权所有,会建立一个优先级最低的任务——空闲任务,在没有任务进入就绪态的时候,空闲任务就会开始运行。空闲任务会调用一个函数——OSTaskIdleHook()。这是留给用户使用的内核扩展接口。空闲任务实际上并没有什么事情可做①,只是一个等待中断的无限循环。因此用户可以利用OSTaskIdleHook(),使CPU进入低功耗模式。
① 事实上,空闲任务可以为统计任务提供一个计数控制工程网版权所有,用以统计CPU的利用率,但该工作完全可以在改动OSTaskIdleHook()之前运行。
用户不必担心整个内核因为系统进入低功耗模式而停止运行。因为HCS08GT60允许RTI时钟周期性地将CPU唤醒。唤醒之后的系统会和遇到节拍中断一样,进入OSTickISR()中断服务程序,查看是否有任务进入了就绪态。如果还没有,就再次进入低功耗模式。对于HCS08GT60,允许RTI时钟的低功耗模式有WAIT模式、STOP2模式和STOP3模式三种,其功耗、系统恢复时间、唤醒中断源等各不相同。下面介绍如何选择一种合适的低功耗模式。
2 选择合适的低功耗模式
2.1 HCS08GT60的低功耗模式
考虑到后面的讨论要涉及到具体的低功耗模式,所以首先介绍一下单片机HCS08GT60的低功耗特性。HCS08GT60属于飞思卡尔(原Motorola)HCS08系列单片机。该系列单片机的低功耗特性很突出;工作电压可以在1.8~3.6 V之间选择,有WAIT和STOP两种低功耗模式。STOP模式可细分为STOP3、STOP2和STOP1三种,功耗依次降低。WAIT