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.

CC2541 程序会暂停运行,3小时后自动恢复运行,什么原因啊?急!

Other Parts Discussed in Thread: CC2541

CC2541运行一个简单的程序,1秒钟LED闪烁一次,同时以1秒间隔广播不间断。过了几个小时后,程序停止运行(LED不再闪烁,OSAL内部秒计时停止),分析有两个原因,一个是程序进入了PM3状态,一个是在某个地方死循环。

我加看门狗验证了一下,程序会复位,因此很可能程序是在某个地方死循环。奇怪的是死的时间随机,但死之后可以自动恢复运行和广播,均是死后3小时自动恢复,连相关变量都似乎没有被改变。

查了下自己代码,没有发现特别的循环及异常,如果是因为开了不间断广播协议栈死掉了我就没办法了。如果不开广播无此问题。

广播设置代码如下:

    uint8 initial_advertising_enable = TRUE;

    uint16 gapRole_AdvertOffTime = 0; 

    GAPRole_SetParameter( GAPROLE_ADVERT_OFF_TIME, sizeof( uint16 ), &gapRole_AdvertOffTime );
    GAPRole_SetParameter( GAPROLE_SCAN_RSP_DATA, sizeof ( scanResponseData ), scanResponseData );
    GAPRole_SetParameter( GAPROLE_ADVERT_DATA, sizeof( advertData ), advertData );
    
    //1秒间隔广播1次
    /*
    GAP_SetParamValue( TGAP_LIM_DISC_ADV_INT_MIN, 320 );
    GAP_SetParamValue( TGAP_LIM_DISC_ADV_INT_MAX, 320 );
    GAP_SetParamValue( TGAP_LIM_ADV_TIMEOUT, 1 );
    8*/
    GAP_SetParamValue( TGAP_GEN_DISC_ADV_INT_MIN, 1600 );
    GAP_SetParamValue( TGAP_GEN_DISC_ADV_INT_MAX, 1600 );
    GAP_SetParamValue( TGAP_GEN_DISC_ADV_MIN, 0 );
    //GAPRole_SetParameter( GAPROLE_ADVERT_ENABLED, sizeof( uint8 ), &initial_advertising_enable );

另外为了每次更新广播数据内容,在peripheral.c加了:

    case GAPROLE_ADVERT_DATA:
      if ( len <= B_MAX_ADV_LEN )
      {
        VOID osal_memset( gapRole_AdvertData, 0, B_MAX_ADV_LEN );
        VOID osal_memcpy( gapRole_AdvertData, pValue, len );
        gapRole_AdvertDataLen = len;
       
        //20140523
        // Update the advertising data
        GAP_UpdateAdvertisingData( gapRole_TaskID,
                              TRUE, gapRole_AdvertDataLen, gapRole_AdvertData );

是1.3.2的版本,实在不行就只能试试高版本了。请高手帮忙分析一下,谢谢!

  • CHARLIE,

    有试过1.4 的版本?

    几小时很长,而且不应该出现类似问题,我曾经试过更长的时间测试,当然是其他应用的测试,只要应用程序逻辑正确,应该不会有类似情况。。。