各位好!
我使用一个100ms的定时器,在每次溢出事件中利用下面这个函数发送一个248字节的数组,发现程序在显示几个 Send Notification Success之后就崩溃了,其间并没有 Send Notification Failure。
不知道应该如何分析与解决呢?
已经设置 PHY(2M),连接间隔(100),MAX_PDU_SIZE(255)。
感激不尽!
附:
static bStatus_t ServApp_SendNotiInd( uint8_t *nvalue,uint16_t nlen) {attHandleValueNoti_t noti;uint16_t slen;bStatus_t status;slen = nlen;if ( connHandleMap[lastConnIndex].connHandle != INVALID_CONNHANDLE ){noti.pValue = (uint8 *)GATT_bm_alloc( connHandleMap[lastConnIndex].connHandle, ATT_HANDLE_VALUE_NOTI,slen,&slen);if ( noti.pValue != NULL ){noti.handle = 0x2C;noti.len = slen;memcpy(noti.pValue, nvalue, slen);status = GATT_Notification( connHandleMap[lastConnIndex].connHandle, ¬i, FALSE );if ( status != SUCCESS ){display("\r\nSend Notification Failure");switch(status){case INVALIDPARAMETER:display("\r\nINVALIDPARAMETER");break;case MSG_BUFFER_NOT_AVAIL:display("\r\nMSG_BUFFER_NOT_AVAIL");break;case bleNotConnected:display("\r\nbleNotConnected");break;case bleMemAllocError:display("\r\nbleMemAllocError");break;case bleInvalidMtuSize:display("\r\nbleInvalidMtuSize");break;case bleTimeout:display("\r\nbleTimeout");break;}GATT_bm_free( (gattMsg_t *)¬i, ATT_HANDLE_VALUE_NOTI );}else{display("\r\nSend Notification Success");GATT_bm_free( (gattMsg_t *)¬i, ATT_HANDLE_VALUE_NOTI );}}else{display("\r\nbleNoResources");GATT_bm_free( (gattMsg_t *)¬i, ATT_HANDLE_VALUE_NOTI );status = bleNoResources;}return ( status );} }
Viki Shi:
增大GATT_Notification()的发送间隔试试
user5353527:
抱歉,各位!格式没调整好。如何重新编辑或者删除帖子知道的话也烦请告知。
user5353527:
回复 Viki Shi:
你好!
我将发送间隔调至200ms,然后运行时发送的次数增加了,但是一段时间后程序仍然会崩溃。不知道应该如何修改?
谢谢!
Viki Shi:
回复 user5353527:
怀疑是发送频次太高导致的死机,你可以多改几个值实验看看