《電子技術(shù)應(yīng)用》
您所在的位置:首頁(yè) > 嵌入式技術(shù) > 解決方案 > 微控制器的功耗調(diào)試:找出能量泄漏,降低嵌入式系統(tǒng)功耗

微控制器的功耗調(diào)試:找出能量泄漏,降低嵌入式系統(tǒng)功耗

2011-06-29

  功耗" title="功耗">功耗調(diào)試技術(shù)使軟件工程師得以了解嵌入式系統(tǒng)的軟件對(duì)系統(tǒng)功耗的影響。通過(guò)建立源代碼和功耗之間的聯(lián)系,使得測(cè)試和調(diào)整系統(tǒng)功耗成為可能,即所謂功耗調(diào)試。傳統(tǒng)上,降低功耗僅是硬件工程師的設(shè)計(jì)目標(biāo);然而在實(shí)際運(yùn)行的系統(tǒng)中,功耗不僅取決于硬件的設(shè)計(jì),而且還與硬件如何被使用有關(guān),而后者則是由系統(tǒng)軟件來(lái)控制的。

<a class=

圖1:IAR Systems的C-SPY調(diào)試器" title="調(diào)試器">調(diào)試器能夠在不同的視圖中顯示靜態(tài)和動(dòng)態(tài)的功耗數(shù)據(jù)。

  功耗調(diào)試技術(shù)基于對(duì)功耗進(jìn)行采樣,并建立每個(gè)采樣數(shù)據(jù)與程序的指令序列(以及源代碼)之間的關(guān)聯(lián)。其中的難點(diǎn)之一在于實(shí)現(xiàn)高精度的采樣。理想情況下,對(duì)功耗的采樣頻率應(yīng)該與系統(tǒng)時(shí)鐘相同,但系統(tǒng)中的電容性元件會(huì)降低此類測(cè)量的可靠性。從軟件工程師的角度來(lái)看,更感興趣的是功耗與源代碼以及程序運(yùn)行期間的各種事件之間的聯(lián)系,而非個(gè)別的指令,因此所需的采樣分辨率將大大低于對(duì)每個(gè)指令進(jìn)行采樣的頻率。

  對(duì)功耗的測(cè)量由調(diào)試工具完成。例如,IAR Embedded Workbench所支持的調(diào)試工具是IAR J-Link Ultra。它能夠測(cè)量芯片的供電電源經(jīng)過(guò)一個(gè)串聯(lián)小電阻之后的壓降,見(jiàn)圖2。該壓降是使用差分放大器進(jìn)行測(cè)量,并通過(guò)模數(shù)轉(zhuǎn)換器進(jìn)行采樣的。 

IAR J-Link Ultra能夠測(cè)量芯片的供電電源經(jīng)過(guò)一個(gè)串聯(lián)小電阻之后的壓降

圖2:IAR J-Link Ultra能夠測(cè)量芯片的供電電源經(jīng)過(guò)一個(gè)串聯(lián)小電阻之后的壓降。

  要提高功耗調(diào)試的精確性,關(guān)鍵在于建立指令跟蹤與功耗采樣之間的良好關(guān)聯(lián)。最佳的關(guān)聯(lián)僅當(dāng)能夠進(jìn)行完全的指令跟蹤時(shí)才能實(shí)現(xiàn),但其缺點(diǎn)在于并非所有芯片都能支持這一功能;即便支持,也通常需要特殊的調(diào)試工具。

  要在較低的精確性下達(dá)到較好的關(guān)聯(lián)度,可以使用一些現(xiàn)代片上調(diào)試架構(gòu)所支持的PC采樣功能。該功能周期性地對(duì)PC進(jìn)行采樣,并給出每個(gè)采樣的時(shí)間戳。與此同時(shí),調(diào)試工具使用模數(shù)轉(zhuǎn)換器對(duì)芯片的功耗進(jìn)行采樣。通過(guò)比對(duì)功耗采樣值和PC采樣值的時(shí)間戳,調(diào)試器就能夠在同一根時(shí)間軸上顯示功耗數(shù)據(jù)以及中斷紀(jì)錄、變量監(jiān)控等圖形,并且將功耗數(shù)據(jù)與源代碼關(guān)聯(lián)起來(lái),見(jiàn)圖3。 

PC和功耗采樣校正

圖3:PC和功耗采樣校正。

  一般來(lái)說(shuō),功耗優(yōu)化與速度優(yōu)化是非常相似的。一個(gè)任務(wù)運(yùn)行得越快,低功耗模式持續(xù)的時(shí)間就能越長(zhǎng)。因此,將處理器的空閑時(shí)間最大化可以降低系統(tǒng)的功耗。

  想要找出系統(tǒng)中不必要的能耗以及在何處能夠降低這些能耗是有難度的。通常它們并非源代碼中顯而易見(jiàn)地暴露出來(lái)的缺陷,而更多地存在于對(duì)硬件使用方式的調(diào)整之中。

  等待設(shè)備的狀態(tài)

  一個(gè)導(dǎo)致不必要能耗的常見(jiàn)錯(cuò)誤是使用輪詢來(lái)等待某個(gè)外設(shè)狀態(tài)的改變。下面的例子中,代碼一直不中斷地運(yùn)行,直到狀態(tài)變量變?yōu)轭A(yù)期的值。

  while (USBD_GetState() < USBD_STATE_CONFIGURED);

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

  另一種類似的代碼是在for或while循環(huán)中實(shí)現(xiàn)軟件延時(shí),例如:

   i = 10000; // SW Delay

  do i--;  

  while (i != 0);

  這段代碼使得CPU一直忙于執(zhí)行除了計(jì)時(shí)之外沒(méi)有任何作用的指令。

  在上述這些情況中,可以通過(guò)改寫代碼來(lái)降低功耗。延時(shí)最好是通過(guò)硬件定時(shí)器來(lái)實(shí)現(xiàn)。CPU在設(shè)置好定時(shí)器中斷之后就可以進(jìn)入低功耗模式直到被中斷喚醒。同樣,對(duì)外設(shè)狀態(tài)的輪詢?nèi)粲锌赡芤矐?yīng)該通過(guò)中斷來(lái)解決,或者使用定時(shí)器中斷從而使得CPU在兩次輪詢之間可以進(jìn)入休眠。

  DMA" title="DMA">DMA vs polled I/O  

  傳統(tǒng)上,DMA被用于提高傳輸速度。在某些架構(gòu)中,CPU即使在DMA傳輸過(guò)程中也可以進(jìn)入休眠模式。功耗調(diào)試使得開發(fā)者能夠試驗(yàn)并通過(guò)調(diào)試器看到與傳統(tǒng)由CPU驅(qū)動(dòng)的傳輸方式相比,DMA技術(shù)所帶來(lái)的效果。  

  低功耗模式  

  很多嵌入式應(yīng)用都把大多數(shù)時(shí)間花費(fèi)在等待某些事件發(fā)生。如果處理器在空閑時(shí)仍然全速運(yùn)行,電池的壽命將在幾乎未作任何事情的情況下被消耗。所以在很多應(yīng)用中,處理器僅在總計(jì)很少的時(shí)間里才被激活。通過(guò)將處理器在空閑時(shí)間里置于低功耗模式,電池的壽命將得到數(shù)量級(jí)的延長(zhǎng)。

  一個(gè)好的方式是使用RTOS和面向任務(wù)的設(shè)計(jì)??梢远x一個(gè)最低優(yōu)先級(jí),僅當(dāng)沒(méi)有任何其他任務(wù)需要運(yùn)行時(shí)才會(huì)被運(yùn)行的任務(wù)。這個(gè)空閑任務(wù)將是實(shí)現(xiàn)功耗管理的理想場(chǎng)所。在實(shí)踐中,當(dāng)空閑任務(wù)每次被激活時(shí),都將處理器(或其部份)置于(可能的)多種低功耗模式之一。

  CPU頻率理論上,CMOS MCU的功耗可由以下公式得出: P = f x U^2 x k 上式中的f是時(shí)鐘頻率,U是供電電壓,k是數(shù)。功耗調(diào)試使得開發(fā)者能夠驗(yàn)證功耗與時(shí)鐘頻率之間的關(guān)系。運(yùn)行在50MHz且?guī)缀醪恍菝叩南到y(tǒng),當(dāng)運(yùn)行在100MHz時(shí)將在休眠模式下消耗約50%的時(shí)間。調(diào)試器中的功耗數(shù)據(jù)使得開發(fā)者能夠檢驗(yàn)所期望的行為,以及當(dāng)如果存在與時(shí)鐘頻率的非線性關(guān)系時(shí),選擇功耗最低的工作頻率。

 

  中斷處理   

  圖4顯示了一個(gè)事件驅(qū)動(dòng)系統(tǒng)的功耗示意圖,其在t0時(shí)處于非激活模式,消耗的電流為I0。在t1時(shí)系統(tǒng)被激活且電流上升為I1,對(duì)應(yīng)于系統(tǒng)在激活模式下且有一個(gè)外設(shè)被使用時(shí)的功耗。在t2時(shí),程序的運(yùn)行被一個(gè)更高優(yōu)先級(jí)的中斷所掛起。已經(jīng)被激活的外設(shè)沒(méi)有被關(guān)閉,雖然高優(yōu)先級(jí)的線程中并未用到它們。更多的外設(shè)被新的線程所激活,導(dǎo)致電流在t2和t3之間升高為I2。在t3時(shí),控制權(quán)重又回到低優(yōu)先級(jí)的線程。

顯示了一個(gè)事件驅(qū)動(dòng)系統(tǒng)的功耗示意圖

圖4:顯示了一個(gè)事件驅(qū)動(dòng)系統(tǒng)的功耗示意圖。

  該系統(tǒng)的功能可以非常出色,并且能夠在運(yùn)行速度和代碼尺寸兩方面進(jìn)行優(yōu)化。然而在功耗方面,還有更多的優(yōu)化可以實(shí)現(xiàn)。圖中黃色的區(qū)域表示如果在t2和t3之間關(guān)閉不需要的外設(shè),或者對(duì)調(diào)這兩個(gè)線程的優(yōu)先級(jí),所能夠節(jié)省的能量。

  使用功耗調(diào)試,能夠更容易地發(fā)現(xiàn)當(dāng)中斷發(fā)生時(shí)功耗的額外上升,并將其標(biāo)識(shí)為異常。

  查找有沖突的硬件初始化  

  為了避免輸入端浮動(dòng),在通常的設(shè)計(jì)中會(huì)將未使用的MCU I/O管腳接地。如果軟件錯(cuò)誤地將某個(gè)接地管腳配置為輸出邏輯“1”,高達(dá)25mA的電流會(huì)流向該管腳。這種非期望的高電流在功耗采樣圖形上很容易觀測(cè)到;同時(shí)還可以通過(guò)觀察系統(tǒng)啟動(dòng)過(guò)程中的圖形來(lái)查找相關(guān)的初始化錯(cuò)誤代碼。

  模擬干擾也可能對(duì)功耗調(diào)試產(chǎn)生影響。模數(shù)混合電路板有其自身的特性。板級(jí)的布局和走線對(duì)于抑制模擬噪聲、保證對(duì)低電平模擬信號(hào)的精確采樣十分重要。良好的混合信號(hào)電路需要對(duì)硬件進(jìn)行仔細(xì)的考量和認(rèn)真的設(shè)計(jì)。

  總結(jié)

  功耗調(diào)試使得嵌入式系統(tǒng)的開發(fā)者能夠深入了解他們的應(yīng)用,并發(fā)現(xiàn)程序的代碼對(duì)功耗有何影響?;谶@些信息,可以通過(guò)調(diào)整和優(yōu)化源代碼以最大限度地降低功耗。使用這種方法,工程師們能夠確保他們的設(shè)計(jì)已經(jīng)盡可能地節(jié)省能量,而又不會(huì)對(duì)系統(tǒng)性能產(chǎn)生不利的影響。

本站內(nèi)容除特別聲明的原創(chuàng)文章之外,轉(zhuǎn)載內(nèi)容只為傳遞更多信息,并不代表本網(wǎng)站贊同其觀點(diǎn)。轉(zhuǎn)載的所有的文章、圖片、音/視頻文件等資料的版權(quán)歸版權(quán)所有權(quán)人所有。本站采用的非本站原創(chuàng)文章及圖片等內(nèi)容無(wú)法一一聯(lián)系確認(rèn)版權(quán)者。如涉及作品內(nèi)容、版權(quán)和其它問(wèn)題,請(qǐng)及時(shí)通過(guò)電子郵件或電話通知我們,以便迅速采取適當(dāng)措施,避免給雙方造成不必要的經(jīng)濟(jì)損失。聯(lián)系電話:010-82306118;郵箱:aet@chinaaet.com。