这个是周期性发送程序,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内存有限,发送太快可能出现此问题