1

我正在做一个涉及切换 Telosb 状态的项目,我想知道如何让微尘进入“睡眠”(低功耗)状态以及如何唤醒微尘。

4

1 回答 1

1

当任务队列为空时,TinyOS 调度程序会自动将 mote 置于睡眠(低功耗)模式(因此基本上是在无事可做时 - 没有要执行的代码)。微尘被中断唤醒,例如定时器中断(发生定时器事件)、无线电中断(已接收到无线电数据包)或外部 IO 引脚中断(用户按下按钮)。

但是,微控制器具有不同的低功耗级别,它们在唤醒条件、可以继续工作的外围设备、唤醒延迟和功耗方面有所不同。通常,在较低的睡眠水平下,mote 消耗的功率较少,但它们只需几个中断即可唤醒,并且大多数外围设备将停止运行。睡眠级别根据节点即将进入睡眠时正在运行的外围设备进行调整。

睡眠级别可以被覆盖。这就是驱动程序所做的,根据他们的状态提供可接受的最低睡眠水平。例如,如果请求接收无线电数据包,无线电驱动程序可能会阻止进入最深睡眠级别,因为在这种情况下数据包会丢失(即,通知数据包接收的无线电中断不会唤醒 mote)。要覆盖睡眠级别,您的模块必须实现 interface 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是一种特定于芯片的类型,描述了可能的功率水平。对于基于 MSP430 微控制器的 TelosB,此类型在tos/chips/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
};

一般的结论是,如果你只开发应用程序,你永远不必担心睡觉或醒来。

另请参阅:微控制器电源管理

于 2016-04-27T18:41:17.373 回答