低功耗原理我可不可以这样理解,在这个函数osal_pwrmgr_powerconserve()会检测Timer时间链表中next Timeout最小的值,这个最小值就是睡眠的最小单位,假设最小的Timeout为Nms,系统检测到没有事件需要处理时,CPU则进入休眠模式N个毫秒(前提定义POWER_SAVING),等休眠时间到了就会启动检测并处理处理Timer事件需要处理,这样就可以达到省电的目的。
nextTimeout = OSAL_TIMERS_MAX_TIMEOUT;
// 寻找Timer链表中最小的值
while ( srchTimer != NULL ) {
if (srchTimer->timeout < nextTimeout) {
nextTimeout = srchTimer->timeout;
}
// Check next timer
srchTimer = srchTimer->next;
}
// 得到下一个最小时间
next = osal_next_timeout();
// 处理器进入休眠(休眠时间为next)
OSAL_SET_CPU_INTO_SLEEP( next );
再有就是 最大的睡眠时间是固定的510s 其实这也就够了。
#define MAX_SLEEP_TIME 510000 ms
现在遇到的问题是 系统可以进入睡眠模式PM2
但是逐步调试发现任务一(nwk_init( taskID++ );)中有个定时期,定时时间特别短,导致系统不断休眠与唤醒。并且这个任务还不开放 这该怎么做呢 。希望得到TI 高手给出建议。谢谢~
注:我用的版本是ZigBee2007 DZIGBEEPRO 版本(ZStack-CC2530-2.5.1a)
heng ma1:
请问你的问题解决没 我也遇到累死的问题
bo gu:
回复 heng ma1:
http://www.deyisupport.com/question_answer/wireless_connectivity/zigbee/f/104/t/75525.aspx 参考上面链接 上面说的跟清楚
bo gu:
回复 heng ma1:
http://www.deyisupport.com/question_answer/wireless_connectivity/zigbee/f/104/t/75525.aspx 上面的连接 说的很清楚哈哈
heng ma1:
回复 bo gu:
OnBoard.h
#define OSAL_SET_CPU_INTO_SLEEP(timeout) halSleep(timeout); /* Called from OSAL_PwrMgr */
这里调用了halSleep 是不是每次最新的nexttimer 在这里睡眠
Min Chen6:
回复 bo gu:
实力很清楚,可我还是不懂