我像問一下,修改ch579config中的BLE_BUFF_MAX_LEN為250??BLE_BUFF_NUM為10??BLE_TX_NUM_EVENT為40 會對藍牙發(fā)送有影響嗎
我現(xiàn)在遇到的問題: 在第一次連接上藍牙之后,發(fā)送命令等都正常,發(fā)送240字節(jié)的包也正常,但是斷開連接再連接,發(fā)送命令后,
mcu就掛了。我不確定是不是因為改了這幾個參數(shù),因為之前的工程只是發(fā)json 串,沒有發(fā)過大包,是正常的
我像問一下,修改ch579config中的BLE_BUFF_MAX_LEN為250??BLE_BUFF_NUM為10??BLE_TX_NUM_EVENT為40 會對藍牙發(fā)送有影響嗎
我現(xiàn)在遇到的問題: 在第一次連接上藍牙之后,發(fā)送命令等都正常,發(fā)送240字節(jié)的包也正常,但是斷開連接再連接,發(fā)送命令后,
mcu就掛了。我不確定是不是因為改了這幾個參數(shù),因為之前的工程只是發(fā)json 串,沒有發(fā)過大包,是正常的
static bStatus_t simpleProfile_WriteAttrCB( uint16 connHandle, gattAttribute_t *pAttr,
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?uint8 *pValue, uint16 len, uint16 offset,uint8 method? )
{
? bStatus_t status = SUCCESS;
//uint8 notifyApp = 0xFF;
??
? // If attribute permissions require authorization to write, return error
? if ( gattPermitAuthorWrite( pAttr->permissions ) )
? {
? ? // Insufficient authorization
? ? return ( ATT_ERR_INSUFFICIENT_AUTHOR );
? }
??
? if ( pAttr->type.len == ATT_BT_UUID_SIZE )
? {
? ? // 16-bit UUID
? ? uint16 uuid = BUILD_UINT16( pAttr->type.uuid[0], pAttr->type.uuid[1]);
? ? switch ( uuid )
? ? {
? ? ? case SIMPLEPROFILE_CHAR1_UUID:
? ? ? ? //Validate the value
? ? ? ? // Make sure it's not a blob oper
? ? ? ? if ( offset == 0 )
? ? ? ? {
? ? ? ? ? if ( len > SIMPLEPROFILE_CHAR1_LEN )
? ? ? ? ? {
? ? ? ? ? ? status = ATT_ERR_INVALID_VALUE_SIZE;
? ? ? ? ? }
? ? ? ? }
? ? ? ? else
? ? ? ? {
? ? ? ? ? status = ATT_ERR_ATTR_NOT_LONG;
? ? ? ? }
? ? ? ??
? ? ? ? //Write the value
? ? ? ? if ( status == SUCCESS )
? ? ? ? {
? ? ? ? ? tmos_memcpy( pAttr->pValue, pValue, SIMPLEPROFILE_CHAR1_LEN );
? ? ? ? ? //notifyApp = SIMPLEPROFILE_CHAR1;? ? ? ??
? ? ? ? }? ? ? ? ? ??
? ? ? ? break;
? ? ? ??
case SIMPLEPROFILE_CHAR2_UUID:
? ? ? ? //Validate the value
? ? ? ? // Make sure it's not a blob oper
? ? ? ? if ( offset == 0 )
? ? ? ? {
? ? ? ? ? if ( len > SIMPLEPROFILE_CHAR2_LEN )
? ? ? ? ? {
? ? ? ? ? ? status = ATT_ERR_INVALID_VALUE_SIZE;
? ? ? ? ? }
? ? ? ? }
? ? ? ? else
? ? ? ? {
? ? ? ? ? status = ATT_ERR_ATTR_NOT_LONG;
? ? ? ? }
? ? ? ??
? ? ? ? //Write the value
? ? ? ? if ( status == SUCCESS )
? ? ? ? {
? ? ? ? ? tmos_memcpy( pAttr->pValue, pValue, SIMPLEPROFILE_CHAR2_LEN );
tmos_memcpy( pAppValue, pValue, SIMPLEPROFILE_CHAR2_LEN );
? ? ? ? ? deal_json(pAppValue);
? ? ? ? ? //notifyApp = SIMPLEPROFILE_CHAR2;? ? ? ??
? ? ? ? }? ? ? ? ? ??
? ? ? ? break;
? ? ? ??
? ??
? ? ? case GATT_CLIENT_CHAR_CFG_UUID:
? ? ? ? status = GATTServApp_ProcessCCCWriteReq( connHandle, pAttr, pValue, len,
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?offset, GATT_CLIENT_CFG_NOTIFY );
? ? ? ? break;
? ? ? ??
? ? ? default:
? ? ? ? // Should never get here! (characteristics 2 and 4 do not have write permissions)
? ? ? ? status = ATT_ERR_ATTR_NOT_FOUND;
? ? ? ? break;
? ? }
? }
if (app_cmd == CMD2_START_MEASURE1){
if(Page_OPT.Page_ID ==? PAGE_ID_WaitForPipe){
// 清除流量
sensor_clear_flow(&GAS);
sensor_set_samlpe_interval(&GAS, 1);
sensor_data.time = 0;
//清除存儲值
time_display = 0;
TMR0_init();
tmos_start_task(SYSTEM_TaskID, RUN_EVENT_MSG, MS1_TO_SYSTEM_TIME(100));
tmos_start_task(SYSTEM_TaskID,V_Q_CHANGE_MSG,MS1_TO_SYSTEM_TIME(100));
tmos_start_task(SYSTEM_TaskID,BLE_SEND_FIRST_MEASURE_DATA,MS1_TO_SYSTEM_TIME(50));
time_inver = time_count;
}
LCD_KEY_PAGE_START();
我像問一下config中BLE_BUFF_MAX_LEN 改為250??BLE_BUFF_NUM改為10?BLE_TX_NUM_EVENT改為40 對藍牙連接的穩(wěn)定性有沒有關(guān)系,我改完之后,會偶爾出現(xiàn)發(fā)包卡死的問題
我遇到的問題:
改完包后,第一次連接發(fā)送讀取數(shù)據(jù)的指令,可以讀到數(shù)據(jù),并且循環(huán)發(fā)送也都能收到數(shù)據(jù),但是斷開連接后,再發(fā)送讀取數(shù)據(jù)的指令,整個就會卡死,這個斷開連接再連接的過程可能兩到三次,就會出現(xiàn)卡死的問題
在之前的工程中,我只是發(fā)送一些json串,沒有改過這些參數(shù),是沒有出現(xiàn)問題的
您好,BLE從機默認代碼中char1~char4默認通信數(shù)據(jù)長度都是1,char5是5。
如要修改MTU,BLE從機例程中注意修改如下幾處
1.config.h中BLE_BUFF_MAX_LEN改為最大值251
2.gattprofile.h中SIMPLEPROFILE_CHARn_LEN(n=1~5)改為最大值243(char4默認使用notify,協(xié)議開銷少一個字節(jié),故char4的MTU可以配置244)
3. 如果需要使用notify且發(fā)包負載大于20個字節(jié),則CH58xBLE_LIB.h中的ATT_MTU_SIZE也需要擴大為最大負載+3
BLE主機如果是手機APP,要看APP的是否對MTU有調(diào)整。如果手機APP是BLE調(diào)試助手,每次連接后要在APP右上角修改MTU為251(最大值視情況而定,與config.h中的BLE_BUFF_MAX_LEN一致就好)