CC2530休眠模式高频被激活问题
osal_run_system是循环执行,一旦没有了task events 就会进入休眠:osal_pwrmgr_powerconserve();,但是很快又离开休眠模式,osal_pwrmgr_powerconserve();中有段这个代码:
next = osal_next_timeout();
OSAL_SET_CPU_INTO_SLEEP( next );
现在的问题是,osal_pwrmgr_powerconserve();是在OSAL主循环中的,看到的现象就是当人工没有任何操作后,遥控器(开发板)不断地进入休眠并离开休眠,频率很高(开发板的led灯闪烁)。那么问题来了:
1. 假设,感觉是某些系统的事件不断被触发去做事情,导致不断离开休眠又进入休眠。而这个事情我又找不到在哪,如果假设成立怎么解决?
2. 现在想要让它稳定的进入休眠模式(不可以高频被触发激活),即通过一个自定的定时来让它进入休眠。怎么做?
3. 关于2的问题我的理解: 可不可以把主循环中的osal_pwrmgr_powerconserve();移到zll_sampleremote.c或者zll_initiator.c中,自定义一个event,定个时触发休眠模式。这么做可以吗?
我好像找到问题了http://www.deyisupport.com/question_answer/wireless_connectivity/zigbee/f/104/t/75525.aspx
v v说的,我这个休眠高频被唤醒是不是MAC层会有一个任务?
因为我在进行ZDApp_StopJoiningCycle( void )让节点停止搜寻网络后,遥控器就能稳定进入休眠了。
还有osal_pwrmgr_powerconserve();好像不能乱动,必须放在osal系统循环中调用。
现在应该就是休眠时间的问题,太短了,想把那些没用的任务去掉,求大神解答,在线等
不建议去修改休眠相关的机制。
休眠时间短,肯定是协议栈中还有短时间的事件在发生。
是否有具体测过,唤醒的周期是多少
另外节点在入网以后,poll rate是多少?
首先谢谢vv的回答。
1. 我在f8wConfig.cfg中,按照之前别人的例子这么配置:
-DRFD_RCVC_ALWAYS_ON=FALSE
/* The number of milliseconds to wait between data request polls to the coordinator. */
-DPOLL_RATE=0
所以你说的poll rate在这里调成0了,原来是1000。
2. 然后我在预编译里:
是不是要加ISR_KEYINTERRUPT?
3. 还有我在hal_sleep.c里:
halPwrMgtMode = (timeout == 0) ? HAL_SLEEP_DEEP : HAL_SLEEP_TIMER;
改成 halPwrMgtMode = HAL_SLEEP_DEEP ; 可不可以让它每次强制进入深度休眠?