cc2640r2,运行到osal_memcpy这个函数程序就跑飞了。
时间:10-02
整理:3721RD
点击:
我想要从SIMPLEPROFILE_CHAR4发送数据,但是发现程序执行到osal_memcpy这一句就停了,是我的参数不对吗?
unsigned char A_TX_DATA[12]; . . . GetData(A_TX_DATA); SimpleProfile_SetParameter(SIMPLEPROFILE_CHAR4, 12,A_TX_DATA); . . . bStatus_t SimpleProfile_SetParameter( uint8 param, uint8 len, void *value ) { bStatus_t ret = SUCCESS; switch ( param ) { . . . case SIMPLEPROFILE_CHAR4: if ( len == sizeof ( uint8 ) ) { simpleProfileChar4 = *((uint8*)value); // See if Notification has been enabled GATTServApp_ProcessCharCfg( simpleProfileChar4Config, &simpleProfileChar4, FALSE, simpleProfileAttrTbl, GATT_NUM_ATTRS( simpleProfileAttrTbl ), INVALID_TASK_ID, simpleProfile_ReadAttrCB ); } else if(len == 12) { uint8 client_gate_open; uint16 notify_Handle; GAPRole_GetParameter(0x30E,¬ify_Handle); client_gate_open = GATTServApp_ReadCharCfg(notify_Handle,simpleProfileChar4Config); if(client_gate_open & GATT_CLIENT_CFG_NOTIFY) { static attHandleValueNoti_t pReport; pReport.handle = simpleProfileAttrTbl[11].handle; pReport.len = len; osal_memcpy( pReport.pValue,(uint8 *)value,len); GATT_Notification(notify_Handle,&pReport,FALSE); } }
哎哟,格式没搞好。
已解决,因为这个版本的attHandleValueNoti_t结构体不一样,需要先分配空间,加上GATT_bm_alloc这个函数分配空间就好了。
pReport.handle = simpleProfileAttrTbl[11].handle;
pReport.len = len;
pReport.pValue = GATT_bm_alloc(notify_Handle, ATT_HANDLE_VALUE_NOTI, len, NULL);
osal_memcpy( pReport.pValue,value,len);