Telosb 低功耗模式:
Telosb Low Power Mode:
我正在做一个涉及切换 Telosb 状态的项目,我想知道如何将微尘设置为 "sleep"(低功率)以及如何唤醒微尘。
当任务队列为空时,TinyOS 调度程序会自动将 mote 置于休眠 (low-power) 模式(所以基本上是在无事可做时 - 没有代码可执行)。微尘被中断唤醒,例如定时器中断(定时器事件发生),无线电中断(无线电数据包已收到)或外部IO引脚中断(用户按下按钮)。
但是,微控制器具有各种 low-power 级别,在 wake-up 条件、可以继续工作的外围设备、wake-up 延迟和功耗方面有所不同。通常,在较低的睡眠水平下,微尘消耗的功率较少,但它们可以被少数中断唤醒,并且大多数外围设备将停止运行。休眠级别根据微尘即将休眠时正在运行的外围设备进行调整。
可以覆盖睡眠级别。这就是 drivers 所做的,根据他们的状态提供最低可接受的睡眠水平。例如,如果请求无线电数据包接收,无线电 driver 可能会阻止进入最深度睡眠级别,因为在这种情况下数据包会丢失(也就是说,无线电中断通知数据包接收不会唤醒微尘向上)。要覆盖睡眠级别,您的模块必须实现接口 PowerOverride
,以便它 returns 调用 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
是描述可能的功率级别的 chip-specific 类型。对于基于 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
};
一般的结论是,如果你只开发应用程序,你永远不必担心睡觉或醒来。
我正在做一个涉及切换 Telosb 状态的项目,我想知道如何将微尘设置为 "sleep"(低功率)以及如何唤醒微尘。
当任务队列为空时,TinyOS 调度程序会自动将 mote 置于休眠 (low-power) 模式(所以基本上是在无事可做时 - 没有代码可执行)。微尘被中断唤醒,例如定时器中断(定时器事件发生),无线电中断(无线电数据包已收到)或外部IO引脚中断(用户按下按钮)。
但是,微控制器具有各种 low-power 级别,在 wake-up 条件、可以继续工作的外围设备、wake-up 延迟和功耗方面有所不同。通常,在较低的睡眠水平下,微尘消耗的功率较少,但它们可以被少数中断唤醒,并且大多数外围设备将停止运行。休眠级别根据微尘即将休眠时正在运行的外围设备进行调整。
可以覆盖睡眠级别。这就是 drivers 所做的,根据他们的状态提供最低可接受的睡眠水平。例如,如果请求无线电数据包接收,无线电 driver 可能会阻止进入最深度睡眠级别,因为在这种情况下数据包会丢失(也就是说,无线电中断通知数据包接收不会唤醒微尘向上)。要覆盖睡眠级别,您的模块必须实现接口 PowerOverride
,以便它 returns 调用 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
是描述可能的功率级别的 chip-specific 类型。对于基于 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
};
一般的结论是,如果你只开发应用程序,你永远不必担心睡觉或醒来。