2024-02-01
Z-stack提供了两种sleep模式,LITE和DEEP(PM2/PM3)。当系统需 要唤醒去执行一些周期性的事件时,使用LITE sleep;当系统没有被定制周期事件而是通过外部中断(如按键)来唤醒设备,使用DEEP sleep。例如带有传感器的终端设备,它需要周期性的唤醒发送采集的数据,又如远程控制终端设备通过按键唤醒来发送一信息,它们的大部分时间都是处于 sleep,以降低功耗。
第一步:添加编译选项:POWER_SAVING
默认情况下,Z-stack里终端设备的电源管理是关闭的。添加编译选项POWER_SAVING以开启此功能
第二步:在f8wConfig.cfg里设置:-DRFD_RCVC_ALWAYS_ON = FALSE
-DRFD_RCVC_ALWAYS_ON=FALSE
第三步:根据需要,在f8wConfig.cfg里设置三个参数:
-DPOLL_RATE=1000
-DQUEUED_POLL_RATE=100
-DRESPONSE_POLL_RATE=100
Z-stack工程终端设备默认情况下为电源管理关闭,自动轮询消息这一功能是开启的。这里 有三个轮询选项,每一个都由一个不同的时间延迟参数控制。当电源管理功能开启后(添加POWER_SAVING),任一个轮询选项的设置都会影响到睡眠模 式。时间延迟的设置不能用于DEEP skeep中的轮询,因此限制了降低功耗。这三个轮询选项分别如下:
Data Request Polling—周期性向父节点发送数据请求来轮询消息队列。轮询的时间间隔由NLME_SetPollRate()或gNWK_POLL_RATE设定,如果事先没有使能它,那么在调用时就立即进行轮询。
Queued Data Polling—在收到数据指示后,就会向父节点请求消息。这个时间间隔可由NLME_SetQueuedPollRate()或gQUEUED_POLL_RATE设定。
Response Data Polling—在收到数据确认指示后,就会向父节点请求响应消息,这个时间间隔可由NLME_SetResponsePollRate()或gRESPONSE_POLL_RATE设定。
函数说明:
NLME_SetPollRate()——设置/改变网络检测速率,仅终端设备可用。
NLME_SetQueuedPollRate()——设置/改变队列检测速率,仅终端设备可用。
NLME_SetPollRate()——设置/改变响应检测速率,仅终端设备可用。
如果只是使用默认的轮询频率进入睡眠态,则只能进入LITE sleep。为了进入DEEP sleep则必须将gNWK_POLL_RATE设为0,不让它反复轮询。
设置这个三个选项可以实现多种轮询方式,例如,对于一个不需要接收消息的设备,在它加入网络后,就将这三个选项都设为0。如果APS层使用了ACK,则必需确保在消息发送后到收到ACK这一段时间内,轮询是使能的。
在有的系统中,可能需要使用可变的轮询频率,根据具体应用而进行设置。
评论3
楼主 2024/2/1 9:21:10
学习了
楼主 2024/2/1 9:21:46
楼主 2024/2/1 9:22:14
感谢楼主的分享