低功耗系統(tǒng)的一種軟件架構(gòu)是讓系統(tǒng)始終處于睡眠模式,僅在運(yùn)行單個中斷服務(wù)程序(ISR)時喚醒,然后立即返回睡眠狀態(tài)。如果嵌入式開發(fā)人員試圖從他的電池中榨出最后一點(diǎn)電,那就有一個嚴(yán)重且經(jīng)常被忽視的缺陷。運(yùn)行一個中斷會浪費(fèi)很多時間和時鐘周期。
執(zhí)行中斷的順序是一個多步驟的過程。首先,將寄存器值和其他當(dāng)前狀態(tài)信息壓入堆棧,以便以后恢復(fù)。接下來,CPU指向ISR,執(zhí)行ISR代碼,最后彈出堆棧,將寄存器恢復(fù)到原始狀態(tài)。整個序列可以用圖1中的流程圖來概括。
圖1–標(biāo)準(zhǔn)ISR操作
這樣做的問題是,即使嵌入式開發(fā)人員使用現(xiàn)代的快速處理器,將所有寄存器推到堆棧中然后再恢復(fù)它們的效率仍然很低。這可能需要很少的時間,甚至可能是幾納秒,但是在數(shù)百萬或數(shù)十億次執(zhí)行的過程中,這可能相當(dāng)于在低功率模式下花費(fèi)的大量時間。結(jié)果就是浪費(fèi)電池電量!
大多數(shù)ARM微控制器都有一個非常酷的特性,叫做退出時休眠。該特性的作用是,當(dāng)ISR完成時,使能該特性會使MCU立即進(jìn)入睡眠狀態(tài),而不是讓處理器每次都進(jìn)入和退出ISR,浪費(fèi)玩堆棧的開銷。通過這樣做,MCU仍然被配置為運(yùn)行ISR,因此當(dāng)它再次觸發(fā)時,系統(tǒng)喚醒并立即執(zhí)行ISR,開銷最小。結(jié)果如圖2所示。
圖2–退出時休眠的ISR開銷
不過,在不使用其他低功耗設(shè)計技術(shù)或設(shè)計周期中沒有時間進(jìn)行節(jié)能優(yōu)化的應(yīng)用中,這一特性的真正優(yōu)勢是顯而易見的。如果嵌入式開發(fā)人員將它內(nèi)置于軟件架構(gòu)中,并且是首批優(yōu)化之一,則可以節(jié)省幾毫安的電流。然而,如果這個特性是在大部分優(yōu)化已經(jīng)實(shí)現(xiàn)的最后實(shí)現(xiàn)的,那么很可能節(jié)省的空間非常小。