在用CC2540做一个东西,现在的测试流程是从机每隔一秒开机一次,开广播,开一个关机定时器,上位机定时广播,扫描到从机,连接,从机连接以后在GAP状态回调函数里用Indica
tion的方式上传一个数据,等待关机定时器定时时间到,断开连接,关闭广播,开一个一秒的定时器,OSAL自动进入休眠,等待一秒定时器时间到,重新这个过程。现在的问题是在开机122次之前,开关广播上传数据断连接都没问题,也比较稳定,在122次时可以连接,但是Indication没有上传数据,可以断开,123次时可以连接,没有上传数据,也不能断开,再往后就不能控制了,packet sniffer抓包看是连接状态的,开广播回的也是GAPROLE_ERROR,但是程序其他部分运行没问题。改了几天,没有效果,而且每次都是122-123次出问题,偶尔有61次就开始这种情况,今天想重现下61次的情况,却发现原来认为有问题的地方修改回去没有出现61次的问题,还是122次,感觉有点抓瞎了,没地下手了。用debugger运行到122次时没有发现自己定义的静态变量有超范围的情况。还望各位前辈给个建议或者想法,怎么去解决这种问题,有什么需要注意的地方,Thanks
程序是使用HeartRate修改的,上传操作如下
linkDB_PerformFunc( Weight_ScaleIndicateCB );
Weight_ScaleIndicateCB定义如下:
static void AppIndicateCB( linkDBItem_t *pLinkItem )
[
if ( pLinkItem->stateFlags & LINK_CONNECTED )
[
//是否开启了上传
uint16 value = GATTServApp_ReadCharCfg( pLinkItem->connectionHandle,
AppLevelClientCharCfg );
//若开启了上传,则上传数据,这里不进行判断,一直开启上传
// if ( value & GATT_CLIENT_CFG_INDICATE )
[
attHandleValueInd_t indi;
indi.handle = AppAttrTbl[APP_LEVEL_VALUE_IDX].handle;
indi.len = 2;
indi.value[0] = appLevel[0];
indi.value[1] = appLevel[1];
//通知主机数据
GATT_Indication (pLinkItem->connectionHandle, &indi, FALSE,
RegisterForAppServiceTaskID );
]
]
]