在Zstack中实现休眠

要实现休眠机制修改如下几点即可(实际测试可用):

1.默认情况下,Z-Stack软件包中的终端设备项目被配置为没有电源管理。 启用此功能功能,在构建项目时必须指定POWER_SAVING编译选项。 如下图所示:


选项放置在C / C ++编译器选项的“预处理器”选项卡下的定义符号框中。(其中特别需要注意的是:需要在Workspace下面的勾选框选中EndDevice,我之前以为上图的对话框没有区别,其实是有所区别的。

2.需要把f8wConfig.cfg中将RFD_RCVC_ALWAYS_ON设置为FALSE。此外,可以把f8wConfig.cfg中的如下图所示4个参数均设置为0,方便测试:

/* The number of milliseconds to wait between data request polls to the coordinator. */
-DPOLL_RATE=0

/* This is used after receiving a data indication to poll immediately
 * for queued messages...in milliseconds.
 */
-DQUEUED_POLL_RATE=0

/* This is used after receiving a data confirmation to poll immediately
 * for response messages...in milliseconds
 */
-DRESPONSE_POLL_RATE=0

/* This is used as an alternate response poll rate only for rejoin request.
 * This rate is determined by the response time of the parent that the device
 * is trying to join.
 */
-DREJOIN_POLL_RATE=0

3.进入Zmain.c——osal_start_system——osal_run_system——(第一个步骤中的宏定义在这里就起作用了)osal_pwrmgr_powerconserve定位到该函数后可以看到有个if判断。为了使得进入该if判断,需要对如下代码进行更改。

void osal_pwrmgr_init( void )
{
  pwrmgr_attribute.pwrmgr_device = PWRMGR_BATTERY; // Default to no power conservation.
  pwrmgr_attribute.pwrmgr_task_state = 0;            // Cleared.  All set to conserve
}

将PWRMGR_ALWAYS_ON更改为PWRMGR_BATTERY,这样之前的代码就可以顺利进去if循环,从而实现低功耗。

4.休眠时长的理解:如何设置了休眠的话,若没有任务执行的话。那么将会一直休眠,所以休眠时长完全是取决于任务的间隔周期T。OSAL调度系统的休眠时间并不是自己随便可以设置的,而是osal调度系统每次都是以最近一次要发生事件的timeout作为本次的休眠时间,如果你的系统有一个最小的30ms事件的周期性的发生,那么你的休眠时间只能是30ms了。

5.休眠时期的电流理解: 经过测试可知 未设置休眠时:8ma(未设置休眠时的电流大小)、27ma(未设置休眠时发送数据时)

                                                        设置休眠之后:0.15ma(未设置休眠时电流大小)、8ma(设置休眠发送数据时)

       由于万用表采集电压时可能应该是1s的频率采集一次,但是发送数据就是一瞬间的事情,很有可能1ms就已经采集完了,但是万用表测的数据确是这1S的平均值,这样也就可以理解为什么27ma和8ma的差距为何如此之大了。(跟占空比的原理有点相象。)









  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值