2016-04-26 58 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