嵌入式应用中的能耗调试
时间:04-17
来源:21ic
点击:
时的另一种常见错误。
图4 带有LEUART TX轮询的LEUART RX中断(a),在接收字节之间处于睡眠模式下的EFM32(b),以及深睡眠模式下的EFM32(c)
void pollLEUARTTX(void)
{while ( !( LEUART0 -> STATUS & LEUART_STATUS_TXC) );}
在发送数据之后,用户会设置一个while循环以等待传输完成。无疑,这会使处理器过长时间保持在运行模式之下。这段循环可以被中断所取代,一旦传输完成,中断就会唤醒处理器。通过这样做,就将再次降低电流消耗量(见图4b)。
现在,在每个接收到的字节之间,处理器都进入睡眠模式,降低了电流。字节传输的完成无须处理器的干预,所以就不需要轮询缓冲区以获知传输何时完成。将循环替换为中断例程是一种更优雅、更节能的解决方案,正如这两种方法的不同剖析图所示。
深睡眠
EFM32 MCU的LEUART模块可以在深睡眠模式下工作。在这种模式下,高频振荡器被关闭,但低频振荡器(RC或晶振)仍在运行并给LEUART提供时钟。如果将EFM32置于深睡眠模式并重复上述例子,能耗将降至微安量级。
为了能够直观地显示这些电流数值,剖析程序从线性坐标切换到对数坐标。在深睡眠模式下,电流现在是1μA,而接收到帧时的尖峰值是80μA(见图4c)。从第一种方法到最后一种配置,节能倍数超过了1000。
- DSP智能电机控制提高能量效率(02-09)
- 使PLC的设计实现更高的效率和生产力(12-21)
- 助力机械手的应用及系统功能分析(12-19)
- μIPM实现低成本高效率电机驱动(12-13)
- 最高效率使用单片机,放弃程序中的延时函数(11-29)
- 关于 while(1)和for(;;)效率问题的一点想法(11-29)