- 1、本文档共6页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
最近在搞一个实用性的zigbee网络,网络中使用到了终端节点进行传感器数据采集,因需要电池供电,因此,便用到了它的低功耗设置。在使用过程中碰到了种种疑惑和困难,从中总结出了一些经验,与大家分享,望对大家有所帮助,如有不对,请多指教。
首先在使用低功耗时(对于终端节点而言end device),
先要将TOOLS文件夹中的f8wConfig.cfg中的-DRFD_RCVC_ALWAYS_ON = FALSE,(这里本来是TURE),如果这里不改,就无法让接收器进入睡眠
在预编译中加入POWER_SAVING,这里是为了让协议栈中的节电选项预编译通过。
在完成这两项工作后,本以为已经可以了。上电试验,但是怎么才能看出来进入没进入节能模式呢?无从考证。所以我们就需要找到睡眠函数,看看它是怎样进入睡眠的,在里面加入个LED控制,进入睡觉状态前LED关闭,唤醒时LED亮起,这样我们便可以清楚的看到CPU到底有没有睡眠,睡眠了多久。
查阅资料,得知,睡眠函数是这个叫做hal_sleep(next)的函数。Halsleep(next),根据下一个要做的任务(包括用户任务和MAC任务)在多久以后需要去做(next就是表示多久以后要做),如果这个时间不为零,就说明时间未到,CPU是空闲的,所以就去睡眠。
具体代码分析:
注意,这里获取任务到期时间是要获取两个的,因为MAC任务和用户设定的周期任务是分开的。并且比较哪个比较小,就按哪个时间,举个例子,比如你再过5分钟要接个电话,再过10分钟要吃饭,你取10分钟作为任务到期时间,那么也就是说你认为可以睡10分钟,但是在你睡的这10分钟里,电话漏掉了。就是这个意思。
接下来halPwrMgtMode = (timeout == 0) ? HAL_SLEEP_DEEP : HAL_SLEEP_TIMER;
实际上是综合一下MAC到期时间和用户任务到期时间,把其中小的值给timeout
然后判断它是不是0.如果是说明有任务到期,不能进入深度睡眠,halPwrMgtMode=HAL_SLEEP_TIMER,如果timeout不等于0说明CPU空闲,可以深度睡眠。
上面这几行程序,实际上是判断timeout是不是大于系统设定的最小睡眠时间,你想,如果马上就到期了,系统才睡一小会,没有意义,所以这里做一个这样的判断。举个例子,比如你下一分钟就要去上班了,再睡1分钟也没什么意义,不如直接现在就去上班。就是这个意思。
继续往下
这里其实就是进入睡眠了,在进入睡眠前,先把LED1关掉
睡眠过程就不多说了,就是关掉RF收发器,关掉一些没用的东西。当运行到
这里,会把POWERMODE设置成上面halPwrMgtMode = (timeout == 0) ? HAL_SLEEP_DEEP : HAL_SLEEP_TIMER;也就是halPwrMgtMode的值,从而睡眠。
再到后面
这里可以看到也就是睡眠结束,恢复工作。我们可以在这里再加上LED1 ON,使LED1点亮,标志着设备唤醒了。这样我们就可以知道设备何时睡眠的,何时唤醒了。然后烧录程序,继续试验。
结果发现LED灯闪的还是挺快的。这也就是说明有任务在不断的执行,那么是哪些任务呢,
上面已经讲过了,任务无非就是用户任务和MAC任务。这样我们先从用户任务入手,一般需要不断执行的,无非就是按键扫描、传感器扫描等,我们就去修改他们的任务到期时间。这里可以推荐大家一种方法,用户任务,需要不断执行的,肯定是要用到osal_start_timerEx函数的,那么我们就可以找这些地方,然后看看是不是要修改的地方,这样定位会比较快一些,直接在edit选项卡中选择search all选项,在有哪些信誉好的足球投注网站关键词里写上这个函数名,便可以迅速定位要修改的地方。
在这里,我的任务只有两个需要不断执行的,一个是按键扫描,一个是传感器数据发送。因为子节点我可以不用按键,于是直接把按键初始化注释掉。至于传感器数据发送,暂时把时间间隔改成10秒。继续上电,结果闪动确实慢了,嗯!有效果,可是灯还是会按照一秒一次的频率闪动,因为用户任务已经修改好了,那么应该就是MAC任务在不断唤醒了。
回想一下学过的概念,节点加入网络以后,是要不断轮询数据,难道是这个东西?于是就在各大网站开始有哪些信誉好的足球投注网站关键词,最终发现果然不假。
Z-stack工程终端设备默认情况下为电源管理关闭,自动轮询消息这一功能是开启的。这里有三个轮询选项,每一个都由一个不同的时间延迟参数控制。当电源管理功能开启后(添加POWER_SAVING),任一个轮询选项的设置都会影响到睡眠模式。时间延迟的设置不能用于DEEP skeep中的轮询,因此限制了降低功耗。这三个轮询选项分别如下:
文档评论(0)