CC2541 程序会暂停运行,3小时后自动恢复运行,什么原因啊?急!
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 的版本?
几小时很长,而且不应该出现类似问题,我曾经试过更长的时间测试,当然是其他应用的测试,只要应用程序逻辑正确,应该不会有类似情况。。。