0.前语
MCU完成低功耗实质而言就是中止MCU作业,经过中止的办法从头唤醒MCU,这些中止能够包括外部IO中止,UART接纳中止,定时器中止等等。假如结合嵌入式操作体系,能够在空使命或许空使命钩子函数中进入低功耗形式,在体系滴答时钟中止服务函数中从头回到正常作业形式。运用操作体系进入和退出低功耗形式,需求了解嵌入式操作体系的空使命和体系滴答时钟中止,下面结合MSP430F5438和FreeRTOS总结一下怎么运用嵌入式操作体系完成低功耗作业。
1.进入低功耗形式
大都嵌入式操作体系都包括一个空使命,空使命优先级最低且一向坚持安排妥当状况,空使命能够用于计算CPU运用率,或许让MCU进入低功耗状况。假如不想修正空使命,还能够经过空使命的钩子函数刺进完成低功耗的代码。在FreeRTOS中,若需求翻开空使命钩子函数,需求在FreeRTOSConfig.h中界说configUSE_IDLE_HOOK。
#define configUSE_IDLE_HOOK1
钩子函数中完成低功耗的代码如下
voidvApplicaTIonIdleHook(void)
{
/*CalledoneachiteraTIonoftheidletask.Inthiscasetheidletask
justentersalowpowermode.*/
__bis_SR_register(LPM3_bits+GIE);
}
在这里可翻开大局中止,若大局中止封闭那么体系或许再也“活”不过来了。
2.退出低功耗形式
在大大都嵌入式操作体系中能够在体系滴答中止函数中退出低功耗形式。因为MSP430的退出低功耗的指令只能在中止中运用,所以一旦进入体系滴答中止函数,可先退出低功耗形式。详细的代码完成如下:
#pragmavector=configTICK_VECTOR
__interrupt__rawvoidvTIckISREntry(void)
{
externvoidvPortTickISR(void);
__bic_SR_register_on_exit(SCG1+SCG0+OSCOFF+CPUOFF);
vPortTickISR();
}
该段代码坐落port.c中,在MSP430F5438分支中,体系滴答定时器选用TIMER0_A0所以configTICK_VECTOR被界说为
#define configTICK_VECTORTIMER0_A0_VECTOR
其他相关的界说能够检查FreeRTOSConfig.h文件
3.完成进程
例如某使命在t1时间调用堵塞API,例如vTaskDelay,此刻使命交出CPU运用权由OS进行使命调度。t2时间,因为没有其他安排妥当使命,OS运转空使命,在空使命的最终进入空使命钩子函数,在空使命钩子函数中MCU进入低功耗形式,此刻可进入LPM3形式。t3时间MCU进入低功耗形式之后,MCU中止作业。t4时间,因为体系滴答时钟中止服务函数中,MCU从头处于活泼状况,而且经过指令退出低功耗形式,此刻OS使命调度器再次作业,若此刻使命再次处于安排妥当状况便从头运转该使命。
以上就是怎么运用OS完成低功耗的根本办法,可是t3时间和t4时间是有重复的。例如,体系滴答时钟ISR产生之后,OS使命调度器中并没有安排妥当的使命,只能再次运转空使命,经过空使命再次进入低功耗形式,如此重复直到某使命安排妥当便执行使命代码。
经过以上的剖析,运用嵌入式操作体系和完成MCU低功耗并不矛盾,反而带来了许多便利。
来历;21ic