2016-04-26 10 views
1

Ich arbeite an einem Projekt, bei dem ich den Zustand des Telosb umschalte, ich würde gerne wissen, wie man die Masten zum "Schlaf" bringt (niedrige Leistung) und wie man die Mote aufweckt.Telosb Low-Power-Modus:

Antwort

1

Ein Mote wird automatisch vom TinyOS-Scheduler in den Energiesparmodus versetzt, wenn die Taskwarteschlange leer ist (also im Grunde, wenn nichts zu tun ist - kein Code auszuführen). Der Alarm wird durch einen Interrupt ausgelöst, z. B. Timer-Interrupt (Timer-Ereignis aufgetreten), Radio-Interrupt (Funkpaket wurde empfangen) oder externe IO-Pin-Interrupt (ein Benutzer drückte eine Taste).

Mikrocontroller haben jedoch verschiedene niedrige Leistungspegel, die sich in Weckbedingungen, Peripheriegeräten, die weiterarbeiten können, Wake-up-Verzögerung und Stromverbrauch unterscheiden. Typischerweise verbrauchen Staus in niedrigeren Schlafniveaus weniger Energie, aber sie können durch nur einige Unterbrechungen aufgeweckt werden und die meisten Peripheriegeräte hören auf zu arbeiten. Der Schlafpegel wird abhängig davon eingestellt, welche Peripheriegeräte in dem Moment in Betrieb sind, in dem der Schlafmodus kurz vor dem Schlafengehen steht.

Schlaflevel kann außer Kraft gesetzt werden. Dies tun die Treiber, indem sie basierend auf ihrem Status das niedrigste akzeptable Schlafniveau bereitstellen. Wenn zum Beispiel ein Funkpaketempfang angefordert wird, kann der Funktreiber verhindern, dass er in die tiefsten Schlafniveaus eintritt, da in diesem Fall ein Paket verloren gehen würde (das heißt, Funkunterbrechung, die über Paketempfang benachrichtigt, würde das Mote nicht aufwecken). Um Schlaf Ebene außer Kraft setzen, hat das Modul-Schnittstelle implementieren PowerOverride, so dass es die niedrigste annehmbare Schlaf Niveau zum Zeitpunkt kehrt lowestState genannt wird:

interface PowerOverride { 
    async command mcu_power_t lowestState(); 
} 

PowerOverride muss dann auf die Komponente verdrahtet werden McuSleepC:

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

mcu_power_t ist ein chipspezifischer Typ, der mögliche Leistungspegel beschreibt.

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 
}; 

Die allgemeine Schlussfolgerung ist, dass, wenn Sie Anwendungen entwickeln, die Sie nie haben: Bei TelosB, die auf MSP430 Mikrocontroller basiert, ist diese Art in tos/Chips/msp430/msp430hardware.h definiert sich Sorgen machen, schlafen zu gehen oder aufzuwachen.

Siehe auch: