2016-04-26 93 views

回答

1

當任務隊列爲空時(基本上什麼都沒有做 - 沒有代碼執行),TinyOS調度程序會自動進入睡眠(低功耗)模式。例如,定時器中斷(定時器事件發生),無線電中斷(收到無線電數據包)或外部IO引腳中斷(用戶按下按鈕),中斷被喚醒。然而,微控制器具有不同的低功耗級別,這些級別在喚醒條件,可以繼續工作的外設,喚醒延遲和功耗方面有所不同。通常情況下,在較低的睡眠水平下,微件消耗較少的功率,但只能通過幾次中斷喚醒,大多數外設將停止運行。睡眠級別根據當mote即將睡眠時正在運行的外設進行調整。

睡眠水平可以被覆蓋。這是司機所做的,根據他們的狀態提供最低可接受的睡眠等級。例如,如果請求無線數據包接收,無線驅動程序可能會阻止進入最深度的睡眠級別,因爲在這種情況下數據包將丟失(即無線中斷通知數據包接收不會喚醒微塵)。要覆蓋睡眠的水平,你的模塊來實現接口PowerOverride,以便它返回的時候lowestState可接受的最低睡眠級別稱爲:

interface PowerOverride { 
    async command mcu_power_t lowestState(); 
} 

PowerOverride必須再連線到組件McuSleepC

component McuSleepC { 
    provides interface McuSleep; 
    provides interface PowerState; 
    uses interface PowerOverride; 
} 

mcu_power_t是描述可能功率級別的芯片專用類型。在TelosB,這是基於MSP430單片機的情況下,這種類型是在TOS /芯片/ MSP430/msp430hardware.h定義:

enum { 
    MSP430_POWER_ACTIVE = 0, 
    MSP430_POWER_LPM0 = 1, 
    MSP430_POWER_LPM1 = 2, 
    MSP430_POWER_LPM2 = 3, 
    MSP430_POWER_LPM3 = 4, 
    MSP430_POWER_LPM4 = 5 
}; 

總的結論是,如果你只開發應用程序,你永遠不會有擔心要睡覺或醒來。

另請參閱:Microcontroller Power Management