我使用2.5.1版本的Zstack进行低功耗实验。正常联网时,使用halSleep函数能够进入PM2模式。当协调器断电后,为了减少功耗,在SampleApp_ProcessEvent函数中对网络状态进行了10次判断,仍不能联网时则使用halSleep函数进入休眠。可是从软件调试和测试工作电流中发现完全没有进入休眠模式。请教一下应该怎么配置以达到这种效果:协调器断电后终端设备无法联入网络,在休眠半小时重新尝试连入网络。
YiKai Chen:
可以參考Z-Stack Home 1.2.2a的ZDApp.c中REJOIN_BACKOFF/REJOIN_SCAN的作法
Alvin Chen:
建议你更新SDK到1.22a或者更高的3.0.2上,在新的SDK里面包含了REJOIN_BACKOFF的rejoin事件,你可以通过计算进入几次该时间进行判读添加自己的逻辑。
user5301222:
回复 Alvin Chen:
好的谢谢
user5301222:
回复 YiKai Chen:
好的我学习一下
user5301222:
回复 Alvin Chen:
你好,尝试后发现问题出在能够检测到rejoin事件,但是使用halSleep还是未进休眠状态,请问一下halsleep这个函数的使用需要什么特定条件吗,在应用层中,我收到一条指令是可以正常进入休眠状态的谢谢!
Alvin Chen:
回复 user5301222:
你要关掉REJOIN_BACKOFF的定时器任务才能进入休眠。
YiKai Chen:
回复 user5301222:
如果你使能POWER_SAVING,osal task queue里沒有工作需要執行,設備應該會自動進入休眠,並不需要另外呼叫halsleep这个函数
user5301222:
回复 Alvin Chen:
突然想起来,会不会是因为我设置了一个每隔5秒发送一次数据的timer导致的呢
user5301222:
回复 YiKai Chen:
突然想起来,会不会是因为我设置了一个每隔5秒发送一次数据的timer导致的呢
YiKai Chen:
回复 user5301222:
如果是這樣至少也要休眠5秒