青浦信息港
美食
当前位置:首页 > 美食

微控制器的功耗调试找出能量泄漏降低嵌入式

发布时间:2020-08-13 20:12:21 编辑:笔名

微控制器的功耗调试:找出能量泄漏,降低嵌入式系统功耗 - FPGA/CPLD - 电子工程

图3:PC和功耗采样校正。

一般来说,功耗优化与速度优化是非常相似的。一个任务运行得越快,低功耗模式持续的时间就能越长。因此,将处理器的空闲时间化可以降低系统的功耗。

想要找出系统中不必要的能耗以及在何处能够降低这些能耗是有难度的。通常它们并非源代码中显而易见地暴露出来的缺陷,而更多地存在于对硬件使用方式的调整之中。

等待设备的状态

一个导致不必要能耗的常见错误是使用轮询来等待某个外设状态的改变。下面的例子中,代码一直不中断地运行,直到状态变量变为预期的值。

while (USBD_GetState() USBD_STATE_CONFIGURED);

while ((BASE_PMC- MC_SR MC_MCKRDY) != PMC_MCKRDY);

另一种类似的代码是在for或while循环中实现软件延时,例如:

i = 10000; // SW Delay

do i--;

while (i != 0);

这段代码使得CPU一直忙于执行除了计时之外没有任何作用的指令。

在上述这些情况中,可以通过改写代码来降低功耗。延时是通过硬件定时器来实现。CPU在设置好定时器中断之后就可以进入低功耗模式直到被中断唤醒。同样,对外设状态的轮询若有可能也应该通过中断来解决,或者使用定时器中断从而使得CPU在两次轮询之间可以进入休眠。

DMA vs polled I/O

传统上,DMA被用于提高传输速度。在某些架构中,CPU即使在DMA传输过程中也可以进入休眠模式。功耗调试使得开发者能够试验并通过调试器看到与传统由CPU驱动的传输方式相比,DMA技术所带来的效果。

低功耗模式

很多嵌入式应用都把大多数时间花费在等待某些事件发生。如果处理器在空闲时仍然全速运行,电池的寿命将在几乎未作任何事情的情况下被消耗。所以在很多应用中,处理器仅在总计很少的时间里才被激活。通过将处理器在空闲时间里置于低功耗模式,电池的寿命将得到数量级的延长。

一个好的方式是使用RTOS和面向任务的设计。可以定义一个优先级,仅当没有任何其他任务需要运行时才会被运行的任务。这个空闲任务将是实现功耗管理的理想场所。在实践中,当空闲任务每次被激活时,都将处理器(或其部份)置于(可能的)多种低功耗模式之一。

CPU频率 理论上,CMOS MCU的功耗可由以下公式得出: P = f x U^2 x k 上式中的f是时钟频率,U是供电电压,k是数。 功耗调试使得开发者能够验证功耗与时钟频率之间的关系。运行在50MHz且几乎不休眠的系统,当运行在100MHz时将在休眠模式下消耗约50%的时间。调试器中的功耗数据使得开发者能够检验所期望的行为,以及当如果存在与时钟频率的非线性关系时,选择功耗的工作频率。

中断处理

图4显示了一个事件驱动系统的功耗示意图,其在t0时处于非激活模式,消耗的电流为I0。在t1时系统被激活且电流上升为I1,对应于系统在激活模式下且有一个外设被使用时的功耗。在t2时,程序的运行被一个更高优先级的中断所挂起。已经被激活的外设没有被关闭,虽然高优先级的线程中并未用到它们。更多的外设被新的线程所激活,导致电流在t2和t3之间升高为I2。在t3时,控制权重又回到低优先级的线程。



克拉玛依白癜风医院
商白癜风专治医院
泰安专业治白癜风医院
淮北治白癜风较好的医院
漳州白癜风专业治疗医院
友情链接