This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

【提问】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 ; 可不可以让它每次强制进入深度休眠?