TI中文支持网
TI专业的中文技术问题搜集分享网站

CC2650 手机连上走远导致蓝牙断线后,蓝牙程序死机,原因不明

这个是周期性发送程序,50ms执行一次:

static void HeartRate_measNotify(void)
{attHandleValueNoti_t heartRateMeas;heartRateMeas.pValue = GATT_bm_alloc(gapConnHandle, ATT_HANDLE_VALUE_NOTI,HEARTRATE_MEAS_LEN, NULL);if (heartRateMeas.pValue != NULL){uint8_t *p = heartRateMeas.pValue;//返回值大于0,说明组帧完成unsigned char ret = construct_LongBleFrame(p);heartRateMeas.len = (uint8)(p - heartRateMeas.pValue);heartRateMeas.len = ret;if(ret==0)GATT_bm_free((gattMsg_t *)&heartRateMeas, ATT_HANDLE_VALUE_NOTI);// Send notification.if (HeartRate_MeasNotify(gapConnHandle, &heartRateMeas) != SUCCESS){GATT_bm_free((gattMsg_t *)&heartRateMeas, ATT_HANDLE_VALUE_NOTI);//PPG_LED_OFF;}else{//PPG_LED_ON;}}//end if pvalue != NULL
}

组帧失败,就释放内存。
发送失败,就释放内存。
发送成功,为啥不主动释放内存?

这样写有问题么,经常遇到这种死机情况。

user1388075:

void driverTable_fnSpinlock( void )
{volatile uint8 i = 1;
while(i);
}

还有,程序死在这里面是什么个意思?

Viki Shi:

回复 user1388075:

此函数的作用:This routine is used to trap calls to unpopulated indexes ofdriver function pointer tables.

user1388075:

回复 Viki Shi:

GATT_bm_free((gattMsg_t *)&heartRateMeas, ATT_HANDLE_VALUE_NOTI);

这个执行后就死机,咋回事

user1388075:

回复 Viki Shi:

此例程用于捕获对未填充索引的调用驱动程序功能指针表。

Viki Shi:

回复 user1388075:

加大发送间隔试试

user1388075:

回复 Viki Shi:

malloc然后free这个动作很耗时间么,大概要多久?

Viki Shi:

回复 user1388075:

不是耗时间,是CC2650内存有限,发送太快可能出现此问题

赞(0)
未经允许不得转载:TI中文支持网 » CC2650 手机连上走远导致蓝牙断线后,蓝牙程序死机,原因不明
分享到: 更多 (0)