1.嵌入式CPU低功耗形式介绍
众所周知,低功耗已经是衡量一个嵌入式体系的重要目标。而作为嵌入式体系的中心,嵌入式CPU的功耗则对整个体系起着重要的效果。当时盛行的嵌入式体系CPU,根本都供给低功耗特性。一般来说,当嵌入式CPU都会有作业形式与低功耗形式,而低功耗形式又可进一步分为闲暇形式,休眠形式,睡觉形式等。进入低功耗形式后,CPU的功耗会下降许多。而外部中止发生时,能够将CPU唤醒。一个嵌入式体系运转起来后,当体系进入idle状况时,就能够让CPU进入低功耗形式,而当外部中止发生时,再唤醒CPU,从头回到作业形式。让CPU尽或许多的处于低功耗形式,能够大大下降体系的功耗。但是,即便体系处于idle而且没有其他作业要做,体系实时时钟的中止,也会不断的唤醒CPU,然后添加体系功耗。因而,能够考虑对体系实时时钟的中止进行修正,然后削减对体系功耗的影响。
2.体系实时时钟与功耗的联系剖析
在现在的嵌入式体系中,体系实时时钟一般是一个硬件循环计数器。当硬件计数器计到必定数值时会向CPU宣布中止。体系实时时钟是现代多使命嵌入式操作体系的重要组成部分,因而咱们需求先讨论一下嵌入式操作体系与体系实时时钟的联系。当今的嵌入式操作体系一般都支撑多使命,优先级和时刻片调度。
当嵌入式OS运转起来后,一般都有一个IDLE使命,它的优先级最低,而其他使命的优先级都应该比它高。在优先级调度机制中,只有当体系中其他高优先级使命都处于堵塞状况时,它才有时机运转。时刻片调度机制只对同优先级的使命有用。也便是说,不同优先级的使命之间是不会按时刻片调度轮转的,而是按优先级来调度的。因而当体系进入IDLE使命时,能够以为体系中没有作业要CPU来做,体系为idle状况。当时刻片调度机制敞开后,嵌入式OS就会依据时刻片来调度使命。
也便是当一个时刻片用完后,要运转调度器来决议下一个时刻片的归属。时刻片的根本单位是体系tick,而体系tick是以体系实时时钟为根底的。当体系实时时钟中止发生时,CPU会将体系tick加1。每逢体系tick添加n(一个时刻片)时,嵌入式OS将启用调度器进行时刻片调度。因而,当时刻片调度机制敞开后,就需求体系tick的实时更新和调度器的守时运转,也就需求实时时钟中止以很高的频率守时发生。假如封闭时刻片调度机制,则使命之间只需求依照优先级来调度,这样就不需求核算时刻片,也便是体系tick不必实时更新,实时时钟的中止不必以很高的频率发生,调度器也不必守时运转。这样就有或许考虑延伸实时时钟的中止距离。
一起调度器不需求进行时刻片调度,能够节约体系开支。但封闭时刻片调度后,体系就只有优先级调度。这就要求体系的一切使命要自动堵塞,而不要等待调度器把同优先级的其他使命调度出CPU而让自己运转。在现在盛行的嵌入式操作体系中,一般都供给了许多自动堵塞的机制,因而要做到这一点并不难。延伸实时时钟的中止距离,能够让CPU长时刻处于低功耗状况,直到有设备中止唤醒CPU。这样将大大减低体系在闲暇时的功耗。
延伸实时时钟中止距离后,需求考虑的问题有两个,一是体系tick,另一个是体系delay。体系tick是实时时钟和操作体系之间的接口,操作体系与时刻相关的模块和API,根本都是根据tick的。在一般体系中,实时时钟的中止是每个tick一次。因而tick是操作体系最小的计时单位。延伸实时时钟中止距离后,体系tick就会长时刻不添加,因而怎样确保体系tick的精确性,便是最根本的问题。处理了tick的精确性,就能够阻隔实时时钟对操作体系的影响。体系delay是操作体系一种重要的堵塞机制,它首要用于让一个使命自动让出CPU一段时刻。
一般体系delay是根据体系实时时钟的,体系delay的根本单位便是tick。当调用delay时,API函数会首先得到当时体系tick,然后加上需求delay的时刻,构成一个未来的delay时刻点,再将使命挂到体系的delay行列上。因而delay行列上的一切使命都对应一个自己的delay时刻点。当体系tick超越某个使命的delay时刻点时,该使命就应该醒来。这就需求实时时钟的中止来唤醒CPU,并运转调度器让delay的使命从头进入安排妥当行列。
假如实时时钟中止距离延伸,体系tick就会很长时刻不添加,就很难确保delay的精确性。一起delay时刻抵达后,也无法唤醒使命。要确保体系tick的精确性,就要求每次自动取得体系tick时,需求经过实时时钟硬件计数器的值核算出当时的体系tick。
一起,需求确保自动获取和实时时钟中止之间的同步。而关于体系delay,则需求修正硬件计数器的计数值,使其为体系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的更新是经过读取硬件计数器的计数值核算出来的。