之前问过,说是路由节点不能睡眠,但我的任务是实现路由节点睡眠。现在发现路由节点之所以不能睡眠是halSleep函数里的MAC_PwrOffReq(MAC_PWR_SLEEP_DEEP) == MAC_SUCCESS条件一直没有满足,单步跟踪发现是macSleep函数if (macRxActive || macRxOutgoingAckFlag || macTxActive || macRxEnableFlags)条件一直满足,所以返回false。
我尝试着将macRxEnableFlags条件去掉,路由节点可以睡眠,通过z-sensor monitor发现可以和协调器组网通信,但无法实现路由功能啦,即终端节点不能连路由节点啦! 我也尝试着在MAC_PwrOffReq函数之前运用if ((!(macRxActive || macRxOutgoingAckFlag || macTxActive))&&(macRxEnableFlags))对macRxEnableFlags清0,就是恢复不知道在哪里对macRxEnableFlags恢复?试了几个地方,结果还是不能路由,但能和协调器通信!
请问改了这一块,路由节点为什么能和协调器继续通信,但不能路由啦?
可以通过改别的地方来解决这个问题吗?附一篇专利文章US20130039240A1,说的是实现路由节点睡眠,但它没说明!
谢谢!
tao wu:
回复 VV:
你好,我在线调试的,先让终端节点连上路由节点,然后给路由节点发一个命令,使其if (macRxActive || macRxOutgoingAckFlag || macTxActive || macRxEnableFlags) 条件改为if (macRxActive || macRxOutgoingAckFlag || macTxActive),这样路由节点就可以睡眠啦,也可以正常连协调器,但终端节点不再连路由节点啦,而是连接协调器。节点周期性发数据,发送间隔为SAMPLEAPP_SEND_PERIODIC_MSG_TIMEOUT
我让终端节点发送数据的间隔大些,发现还是这个现象!
请问终端节点的保活时间是多少啊,在哪里赋值的?
如果我让路由节点睡眠的时间小于删除终端节点的时间,是否可以?我该修改哪些参数或代码呢?
tao wu:
回复 VV:
谢谢VV的解答,我还有一些疑问:
今天又做的实验,在线调一个路由节点1,此时未让路由节点1睡眠,拿一个路由节点2,路由节点2连接上路由节点1。此时给路由节点1发一个命令,使其if (macRxActive || macRxOutgoingAckFlag || macTxActive || macRxEnableFlags) 条件改为if (macRxActive || macRxOutgoingAckFlag || macTxActive),这样路由节点1就可以睡眠啦,这时路由节点2能继续一直连接路由节点1,但把路由节点2断电之后重新插电,发现路由节点2一直协调器,不连路由节点1啦!
我将2个路由节点同时断电,先把路由节点1连上协调器,再把路由节点2上电,发现路由节点2还是连接协调器!
实验中2个路由节点挨着,放在离协调器3米之外的地方!
实验的现象说明:路由节点睡眠之后其他节点还是可以连上它的,上面也提到,为啥终端节点就不行啊?是不是哪里的时间设的不一样,是的话您知道差别在哪里吗?
既然路由节点2连路由节点1,在重新上电之后为什么路由节点2不再连接路由节点1?
麻烦啦!