微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > TI蓝牙设计交流 > CC2541 程序会暂停运行,3小时后自动恢复运行,什么原因啊?急!

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

时间:10-02 整理:3721RD 点击:

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 的版本?

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

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top