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.

请教Zstack2.5.1a休眠配置后并且App层里没任何定时任务,为啥还是有每秒一次是闪灯?

Other Parts Discussed in Thread: CC2530

VV大神,能帮忙解答这个疑问吗?量了电流,有段时间是1点多uA,有个瞬间是12mA的变动,就是闪灯引起的吧,闪灯就是休眠被唤醒了。为什么呢?大概每秒闪一下。奇怪了,是那个系统任务影响的?

  • try to change this setting,

    /* The number of milliseconds to wait between data request polls to the coordinator. */
    -DPOLL_RATE=1000

  • 从这句话来看,好像是修改节点向协调器的数据请求时间间隔,这样理解对吗?还有,这个设置做什么用?节点还得每秒对协调器做数据请求?把这个值调多大合适,我试过调成0,结果还是一样,还是每秒闪灯一次。

  • 这是调整轮询时间的,就是终端每隔一段时间向协调器轮询一次看有没有发送数据。设置为0节点就不会向协调器查询数据了。你DQUEUED_POLL_RATE,DRESPONSE_POLL_RATE设置的多少?

  • 都是设置为0了,还是一样的结果,每秒闪一次

  • 把按键改成中断方式

    ISR_KEY_INTERRUPT

  • 我的按键中断是在OnBorad.c文件里把InitBoard函数里HalKeyConfig(HAL_KEY_INTERRUPT_DISABLE, OnBoard_KeyCallback);这句换成HalKeyConfig(HAL_KEY_INTERRUPT_ENABLE, OnBoard_KeyCallback);来的,没找到ISR_KEY_INTERRUPT这个宏或变量。请问又是如何设置的呢?设置按键为中断模式为什么能解决掉休眠问题?

  • void InitBoard( uint8 level )
    {
    if ( level == OB_COLD )
    {
    // IAR does not zero-out this byte below the XSTACK.
    *(uint8 *)0x0 = 0;
    // Interrupts off
    osal_int_disable( INTS_ALL );
    // Check for Brown-Out reset
    ChkReset();
    }
    else // !OB_COLD
    {
    /* Initialize Key stuff */
    #if defined (ISR_KEYINTERRUPT)
    HalKeyConfig(HAL_KEY_INTERRUPT_ENABLE , OnBoard_KeyCallback);
    #else
    HalKeyConfig(HAL_KEY_INTERRUPT_DISABLE, OnBoard_KeyCallback);
    #endif
    }
    }

  • 谢谢回复,这个修改和我的修改是一样的,但,还是没能解决每秒醒来一次的问题。还有哪里要注意的呢?

  • 1. Maybe you can search all osal_start_timerEx() API of your project to check it?

    2. Why don't your use the new zstack like home 1.2.2? It may solve your problem.

  • CC2530 can using home 1.2.2?

    I have try search, and I find the code as follow

    /**************************************************************************************************
    * @fn halProcessKeyInterrupt
    *
    * @brief Checks to see if it's a valid key interrupt, saves interrupt driven key states for
    * processing by HalKeyRead(), and debounces keys by scheduling HalKeyRead() 25ms later.
    *
    * @param
    *
    * @return
    **************************************************************************************************/
    void halProcessKeyInterrupt (void)
    {
    bool valid=FALSE;

    if (HAL_KEY_SW_6_PXIFG & HAL_KEY_SW_6_BIT) /* Interrupt Flag has been set */
    {
    HAL_KEY_SW_6_PXIFG = ~(HAL_KEY_SW_6_BIT); /* Clear Interrupt Flag */
    valid = TRUE;
    }
    if (HAL_KEY_SW_7_PXIFG & HAL_KEY_SW_7_BIT) /* Interrupt Flag has been set */
    {
    HAL_KEY_SW_7_PXIFG = ~(HAL_KEY_SW_7_BIT); /* Clear Interrupt Flag */
    valid = TRUE;
    }

    if (HAL_KEY_JOY_MOVE_PXIFG & HAL_KEY_JOY_MOVE_BIT) /* Interrupt Flag has been set */
    {
    HAL_KEY_JOY_MOVE_PXIFG = ~(HAL_KEY_JOY_MOVE_BIT); /* Clear Interrupt Flag */
    valid = TRUE;
    }

    if (valid)
    {
    osal_start_timerEx (Hal_TaskID, HAL_KEY_EVENT, HAL_KEY_DEBOUNCE_VALUE);
    }
    }

    This looks like the interrupt handler, if removing key interrupt can solve the problem?

  • 每隔1s醒来是不是你的POLL_RATE=1000

  • 这个设置0的话,是不起作用的,但是修改成10000,10秒的值,可以把每秒起来改成10秒,起作用。可是这样是否就会导致子节点取父节点数据时间间隔变大,会丢失在休眠期间发给子节点的数据呢?

  • 是的,默认父设备为子设备保存数据的时间是7.5s,所以10秒的话,数据在父节点就丢弃了。

  • 现在有个需求疑问就是一个纽扣电池100mA/h的,能让低功耗状态下的cc2530跑多久呢?并如何在协议栈代码里设置?