μCOS-II实时操作系统在μ′nSPTM中的低功耗研究
扫描二维码
随时随地手机看文章
0 引 言
在当今普遍使用的手持式移动设备中,如何降低嵌入式系统的功耗、延长电池使用的时间等问题一直是困扰开发人员的一个难题。大量的功耗不仅导致移动设备的待机时间缩短,还会导致芯片热量增加,降低可靠性,而且也会增加散热系统的成本。待机时间问题虽然可以通过提高电池容量解决,但实际情况是嵌入式系统的功耗增长超过电池技术的发展,因此单纯依靠电池技术的发展是不可能在短期内解决现在正遇到的功耗问题。
CMOS逻辑电路被认为是现今最通用的大规模集成电路技术,因为CMOS可以高度集成,并具有低功耗、输入电流小等特性,而且从理论上,理想的CMOS电路的静态功耗可以认为是零,是一种“理想”的逻辑器件。但实际的CMOS器件依然需要消耗功率,而且频率越高,消耗的动态功耗越高。虽然芯片的封装、使用散热片和风扇能够散掉芯片和系统所产生的热量,然而随着芯片和系统尺寸持续地增加,要提供充分的散热就必须付出更多的代价,而且系统的尺寸也会增加,散热系统的机械部分也会降低系统的可靠性。
嵌入式系统由硬件和软件共同组成,因此降低嵌入式系统功耗的方法也有硬件方法和软件方法。本文以移植到凌阳16位处理器μ′nSPTM上的嵌入式实时操作系统μCOS-Ⅱ为例,使用凌阳公司提供的SPCE061A开发板,讨论如何利用μCOS-Ⅱ给出的内核扩展接口,实现一个低功耗的嵌入式系统。
1 嵌入式系统的功耗
嵌入式系统的平均功耗和电池容量共同决定待机时间,平均功耗越小、电池容量越大则待机时间越长。而嵌入式系统的功耗可以分为静态功耗和动态功耗,静态功耗是由CMOS电路的漏电流形成,现在的技术已经使漏电流减少到尽可能小,因此静态功耗一般占总功耗的比例很小;动态功耗是由CMOS电路的分布电容充放电形成,该功耗占总功耗的比例很大,因此也是主要的研究对象。动态功耗的大小可由式PD=CL×VDD2×f表示,CL是CMOS电路的分布电容,与芯片尺寸和工艺有关;VDD是电源电压;f是系统的工作频率,降低工作频率有助于降低系统功耗,但会使系统工作速度下降。
由上述分析可知,降低嵌入式系统的功耗主要有两种途径。第一种是动态频率调节(DFS),它可以改变不同电压域上的时钟频率。虽然这种方法可以消除空闲等待的时间,但是却不能减少能量的消耗。比如将一个任务以通常情况的一半频率来运行,意味着完成这个任务要通常的两倍时间。DFS有用的地方在于,它可以降低峰值功耗。第二种方式是动态地电压和频率调节(DVFS)。DVFS是建立在DFS基础之上的,它既要降低频率,又要降低电压。由于电压对动态功耗二次方的关系,DVFS确实能将能量的消耗节省下来。为此ARM公司的Faisal M.Goriawalla先生提出IEM(智能能量管理)方案,该方案采用步进策略、前瞻策略或平均数策略等算法调节系统的频率和电压,对于最终产品来说,则可以节省15%~20%的能量消耗(来源于ARM公司OEM合作伙伴的数据)。
2 实时操作系统μCOS-Ⅱ和凌阳处理器μ′nSPTM简介
μCOS-Ⅱ是一个简单、高效的嵌入式实时操作系统内核,具有可抢占的实时多任务调度系统功能。μCOS-Ⅱ提供很多系统服务,例如邮箱、消息队列、信号量、块大小固定的内存的申请与释放、时间相关函数等。μCOS-Ⅱ2.5版本支持64个任务,每个任务一个特定的优先级。优先级越高,数字越小。系统占用了8个任务,保留优先级为0,1,2,3,OS LOWEST_PRIO-3,OS_LOWEST_PRIO_2,OS_LOWEST_PRIO_1,OS_LOWEST_PRIO_0。
凌阳16位处理器μ′nSPTM被广泛应用在家用电器控制器、仪器仪表、工业控制、娱乐和语音控制等场合。在功耗控制方面,μ′nSPTM采用CMOS制造工艺,同时增加了软件激发的弱振方式、空闲方式和掉电方式,极大地降低了其功耗。可以通过对P SystemClock的设置进行选择CPU的时钟可以在O.32~49.152 MHz范围内可编程调节。当系统处于备用状态下(时钟处于停止状态),耗电仅为2μA@3.6 V。μ′nSPTM处理器满足μCOS-Ⅱ实时操作系统移植的条件。
凌阳16位处理器μ′nSPTM的时钟有多种选择。系统采用32 768 Hz的实时时钟,实时时钟经过PLL倍频电路以后,产生系统时钟频率FOSC,FOSC再经过分频得到CPU时钟频率。其工作原理如图1所示。
由图1可知:μ′nSPTM的时钟有多种选择,从O.32~49.152 MHz范围内可编程调节,另外还可以关闭32 768 Hz实时时钟进入睡眠状态。在3.6 V电源电压下,处理器的工作电流见表1。
3 μCOS-Ⅱ实现低功耗的原理
μCOS-Ⅱ总是运行进入就绪状态的优先级最高的任务。一旦优先级高的任务进入就绪态,就可以将CPU从低优先级任务中抢过来。在μCOS-Ⅱ初始化时,会建立一个优先级最低的任务——空闲任务,在没有任务进入就绪态的时候,空闲任务就会开始运行。空闲任务会调用一个函数—— OSTaskIdleHook()。这是留给用户使用的内核扩展接口。空闲任务实际上并没有什么事情可做,只是一个等待中断的无限循环。因此用户可以利用 OSTaskIdleHook(),降低或者关闭系统时钟,使CPU进入低功耗模式。在实际的测试中,可修改文件OS_CPU_A.ASM,添加控制实时时钟的例程,然后在应用程序或函数OSTaskIdleHook()中调用,这样更便于程序阅读。
在本文中采用的具体方法有两种:
方案一:系统在空闲状态下关闭实时时钟,进入低功耗状态。但这种方法会使操作系统停止运行而无法进行任务调度,故需要定时器周期性地唤醒CPU。CPU被唤醒之后重新判断是否有任务处于就绪态,如果有就执行该任务;如果没有则再次进入空闲状态并关闭实时时钟进入低功耗状态。其工作时序见图2。其中用户任务工作在高功耗状态,空闲任务则关闭实时时钟,处于低功耗状态。
方案二:系统在空闲状态下不关闭实时时钟,而是进入最低的工作频率,此时处理器处于低功耗工作状态,操作系统仍然可以进行任务调度。当有用户任务时,由用户任务先把实时时钟频率升高,然后再运行用户代码。其工作时序见图3。其中每次进入用户任务之前,先将实时时钟频率升高,用户任务运行结束进入空闲状态时,再将实时时钟频率降低。[!--empirenews.page--]
测试和方案对比:
首先在处理器μ′nSPTM处理器上移植μCOS-Ⅱ实时操作系统。运行正常后测试用的用户任务是以1 Hz的频率点亮LED指示灯。表2是测试数据(外电源电压4.82 V,稳压后处理器电压3.3 V)。
测试结论:
虽然以整机电流进行测试不能完全反映处理器的工作情况,但从以上数据可以知道,采用两种方案确实可以降低系统功耗,而且方案一的效果更好,但需要占用一个定时器,在测试中发现当任务增加后功耗很快达到方案二水平,且有时不能正常唤醒;方案二很稳定,而且不需要定时器,用户可以根据任务的运算量设定不同的时钟频率,如需要大的运算任务,可在进入用户任务之前将时钟频率设置为较高值,反之设置为较低值。以上采用的方法只是动态地改变系统的频率,没有动态地改变电压水平,因此在降低嵌入式系统功耗方面依然有进一步的潜力。但动态改变电压水平需要更多硬件支持,在目前广泛使用的中低端处理器中,通过扩展实时操作系统内核动态地改变系统的频率对降低嵌入式系统功耗是大有裨益的。
4 结 语
在嵌入式系统设计中,由于普遍存在CPU高速运行功能和有限任务处理要求的巨大差异,会形成系统在时间与空间上巨大的无效操作。如果能够根据系统的工作状态自动地进行功耗管理,使系统工作于系统状态相适应的功耗模式,故能极大地降低系统功耗,延长电池待机时间。这些工作对嵌入式开发有重大的意义。