微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 硬件工程师文库 > 一种利用实时时钟降低嵌入式系统功耗的方法

一种利用实时时钟降低嵌入式系统功耗的方法

时间:08-16 来源:飞思卡尔 点击:

为系统delay队列上的最小delay时间点的delay时间。这样可以利用硬件计数器来准确控制delay的准确性,并且利用中断来及时调度任务。

  3.在I.MX51上的解决方案:

  ECOS是一款优秀的轻量级嵌入式操作系统,它的内核微小,紧凑,支持多任务,优先级和时间片调度机制。飞思卡尔的多媒体芯片i.mx51基于ARM Cortex-A8核,具有很高的性能,同时支持了ARM提供的低功耗功能。ARM提供低功耗模式,即睡眠模式。ARM执行指令WFI后,会进入睡眠状态。在睡眠模式下,ARM的时钟被关闭,ARM只消耗极低的功耗来维护自身的状态,即启用SRPG(State retaining power gate)。当有中断发生时,ARM会被唤醒,恢复时钟,重新开始执行。MX51提供了多个硬件计数器,本文采用其中的GPT作为实时时钟。GPT是一个循环计数器,可以设置最大为0xffffffff的计数值,每个时钟计数值减1,当计数值减到0时触发中断,时钟为32KHz。GPT的计数值可以在任意时刻被ARM读取,读取是不影响计数的。当IDLE任务运行时,IDLE就执行WFI指令,让ARM进入低功耗模式。如果有设备产生中断,ARM就会被唤醒,处理中断以及所需的任务调度,任务运行。基于前面的分析,本文对ECOS的时间片调度和实时时钟系统进行了修改。对于时间片调度机制,在ECOS的配置文件中将其关闭。对于实时时钟,则延长了它的中断间隔。系统tick在两种情况下会被更新,一种是当调用ECOS API去读系统tick的时候,另一种就是GPT产生中断。当ECOS启动后,将GPT的计数值设为最大,这样GPT就需要很长时间才会产生一次中断。在这期间,系统tick只会在ECOS API主动读取时才会更新。系统tick的更新是通过读取硬件计数器的计数值计算出来的。在ECOS系统的实时时钟类中增加一个变量pre_hardware_count用于记录上一次读取的硬件计数器的值。当每次系统API读取tick时,当前硬件计数器的值与上一次读取时硬件计数器的值的差值就是两次读取之间已经过去的tick数。当实时时钟产生中断时,即硬件计数器计到0,将此变量清零。这样,就可以保证每次读取系统tick 时,能得到一个准确的系统tick值。当有任务要主动延时一段时间,即调用系统delay API时。ECOS的API函数会计算出该任务的delay时间点,然后将该任务挂入系统delay队列。然后遍历系统delay队列,找出队列中的最小delay时间点,把该delay时间点对应的delay时间写入GPT,让GPT来控制delay时间。delay时间到后,GPT会产生中断,ECOS将中断处理程序分为两部分,ISR和DSR。在ISR中将硬件计数器设为最大值。然后在DSR中增加系统tick,将超时的任务重新挂入就绪队列,并且再次找出系统delay队列上的最小delay时间点,写入硬件计数器。如果系统delay队列为空,则不对硬件计数器再进行操作,保持ISR 中写入的最大值。最后ECOS会运行调度器,如果超时的任务具有最高优先级,那么它就会得到运行,也就是醒过来。这样也就可以保证系统delay的准确性与及时性。下图是修改后实时时钟后系统tick, delay以及调度器相关的流程图。

  下图是修改后实时时钟后系统tick, delay以及调度器相关的流程图。

  图1. 实时时钟修改流程图

  下面是在飞思卡尔公司i.mx51上的实验数据。

  可以看出,修改了时间片调度和实时时钟后,不论ARM工作在哪个电压点,系统IDLE时的功耗降低了差不多10倍。因此,延长实时时钟中断间隔能极大的降低系统功耗。

 

  4.其他系统的类似方法

  当前流行的嵌入式操作系统Linux和WinCE也都在讨论修改系统实时时钟中断方式以求降低系统功耗。对于Linux系统,有一个Less Watts项目,实现tickless idle,即无tick的idle,其实就是修改实时时钟的中断方式。WinCE则提供了可变系统时钟节拍Variable Tick Scheduler,在进入idle状态前改变系统时钟节拍,这样在预期的时间段里,idle状态不会被无谓的系统时钟中断唤醒。

  5.结论

  可以看出,通过修改实时时钟中断方式,可以使CPU在idle状态下长时间处于低功耗模式,极大的降低系统功耗。而且当前流行的嵌入式操作系统都在积极的探讨此方法。相信今后这项功能会成为嵌入式操作系统必备的一个功能。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top