CUSTS1\u VAL\u NTF\u请求上的内存溢出

⚠️
你好。。谢谢你来到论坛。令人兴奋的消息!我们现在正在迁移到新的论坛平台,该平台将提供更好的功能,并包含在主对话网站中。所有员额和帐户都已迁移。我们现在只接受新论坛的流量-请在//www.wsdof.com/support. 我们将在未来几天内修复bug/优化搜索和标记。
18个员额/0个新员额
最后一篇文章
Roie DAHAN
离线
最后一次见到:1年1周前
加入:2018-11-19 16:32
CUSTS1\u VAL\u NTF\u请求上的内存溢出

嗨,对话小组,

如果DEF_SVC1_按钮_状态_字符长度大于24(字节),而发送间隔为每20毫秒(或更短),DA14585芯片将出现内存溢出,

请告知如何正确地每20ms发送240字节。

请参见示例代码:

//更新按钮特性
结构custs1_val_ntf_ind_req*req=KE_MSG_ALLOC_DYN(custs1_val_ntf_req,
prf_get_task_from_id (TASK_ID_CUSTS1),
任务应用程序,
custs1_val_ntf_ind_req,
定义SVC1按钮状态字符);

申请- > conidx = app_env - > conidx;
申请- >通知= true;
申请- >处理= SVC1_IDX_BUTTON_STATE_VAL;
申请- >长度= DEF_SVC1_BUTTON_STATE_CHAR_LEN;
申请- >价值[0]=数+ +;

ke_msg_send(要求的);

/ / Android代码
特征变更后的公共无效(蓝牙gatt、蓝牙gatt特征特征)
{
超级。onCharacteristicChanged(关贸总协定、特点);

byte[]messageBytes=characteristic.getValue();

日志。w(TAG, " oncharacterchanged: " + messageBytes.length);//显示当前的MTU(测试到240bytes)
}

问候,

喧闹

设备:
PM_对话框
离线
最后一次见到:6天13小时前
工作人员
加入:2018-02-08 11:03
嗨,罗伊大汉,

嗨,罗伊大汉,

我假设内存溢出在DA14585端。如果是,请您指出代码卡在哪里?在平台中_reset_func()?

谢谢,下午好

Roie DAHAN
离线
最后一次见到:1年1周前
加入:2018-11-19 16:32
嗨PM_Dialog,

嗨PM_Dialog,

是,平台重置功能弹出,重置内存分配失败(0xF2F2F2F2)基本内存溢出

谢谢,

喧闹

PM_对话框
离线
最后一次见到:6天13小时前
工作人员
加入:2018-02-08 11:03
嗨,罗伊大汉,

嗨,罗伊大汉,

Τhe platform_reset_func()由platform_reset()调用,它在ROM代码中实现。产生此断言的最可能的原因是内存不足,因为您分配的消息永远不会被使用。例如,如果您正在分配通知消息,并且您有一个小的连接间隔,那么消息将被堆起来直到连接事件到达,但是如果连接间隔较大,则在连接事件到达之前就会耗尽内存。您可以增加连接间隔。在您的应用程序中,在每个连接之后可能会出现某种内存泄漏堆积,因为错误代码是RESET_MEM_ALLOC_FAIL。为此,请检查是否有任何挂起消息,并确保您正在使用在处理消息时获得的消息,或者您正在分配应该释放它们的数据。例如,如果你取样ADC,你分配消息,以便在有一个连接时通过通知发送数据,设备最终将耗尽内存,如果设备耗尽内存,这将导致设备重置。此外,尝试通过在da1458x_config_advanced.h头文件中定义DB_HEAP_SZ来增加堆大小。

谢谢,下午好

Roie DAHAN
离线
最后一次见到:1年1周前
加入:2018-11-19 16:32
你好

你好

感谢您的解释,内存溢出显然是副作用的根本原因。

我的问题是:如何每20毫秒发送240字节的通知?

谢谢,

喧闹

Roie DAHAN
离线
最后一次见到:1年1周前
加入:2018-11-19 16:32
嗨PM_Dialog,

嗨PM_Dialog,

只是为了更多清晰的关于测试代码/设置:

1)。使用ble_app_all_in_one可在SDK 6.0.10.511中找到

2). 编辑/更新用户_custs1_def.h中的define至:#define def_SVC1_ADC_VAL_1_CHAR_LEN 120

3). 编辑/更新用户\u应用\u adcval1\u计时器\u cb\u处理器间隔至20ms

4). 编译并运行

预期结果:

  • 通知事件应每隔20毫秒到达Android,并带有120字节的数据

实际结果:

  • 通知事件每20ms到达Android, 120字节的数据,持续20-30秒,然后是platform_reset_func(即内存溢出)

请告知每20毫秒向Android传输120字节数据的首选方式(首选示例代码)

*注: 120byte每20ms = 48Kbps远低于1M限制

问候,

喧闹

示例代码:

//将user_custs1_def.h中的define更新为:#define_SVC1_ADC_VAL_1_CHAR_LEN 120 void user_app_adcval1_timer_cb_handler(){static int Count=0;struct custs1_VAL_ntf ind req*req=KE_MSG ALLOC_DYN(custs1_VAL_req,prf_从任务id(task_id_def_custs1),task_app,custs1_ind VAL_,custu ADC_CHAR req);//待采样的ADC值静态uint16_t sample______属性__((节(“保留区”),zero_init));sample=(sample<=0xffff)?(sample+1):0;req->conidx=app_env->conidx;req->notification=true;req->handle=SVC1_IDX_ADC_VAL;req->length=DEF_SVC1_ADC_VAL_CHAR;//memcpy(req->value,&sample,DEF_SVC1_ADC_VAL_1_CHAR_LEN);req->value[0]=Count++;ke_msg_send(req);if(ke_state_get(TASK_APP)==APP CONNECTED){//再次设置它,直到在控制特性计时器中接收到停止命令为止使用=APP_easy_timer(2,用户_APP_adcval1_timer_cb处理器)}

PM_对话框
离线
最后一次见到:6天13小时前
工作人员
加入:2018-02-08 11:03
嗨,罗伊大汉,

嗨,罗伊大汉,

我在SDK6.0.10的clear ble_app_all_in_one项目中工作,我使用了您附带的代码片段。但是,我无法复制您的问题。变量“count”每20ms发送一次通知。你能在一个干净的ble_应用程序中进行测试吗?你做过其他的修改吗?
谢谢,下午好

Roie DAHAN
离线
最后一次见到:1年1周前
加入:2018-11-19 16:32
嗨PM_Dialog,

嗨PM_Dialog,

要重现问题,只需更改数据大小

发件人:

#定义DEF_SVC1_ADC_VAL_1_CHAR_LEN 120

致:

#定义DEF_SVC1_ADC_VAL_1_CHAR_LEN 240

问候,

喧闹

PM_对话框
离线
最后一次见到:6天13小时前
工作人员
加入:2018-02-08 11:03
嗨,罗伊,

嗨,罗伊,

刚刚测试了240字节大小,但我仍然无法复制它。您使用的堆大小是多少?默认大小是2048字节。你能不能加一点?

谢谢,下午好

Roie DAHAN
离线
最后一次见到:1年1周前
加入:2018-11-19 16:32
嗨PM_Dialog,

嗨PM_Dialog,

当使用#define DB_HEAP_SZ 2048时,在~3000-3200个数据包之后溢出occer
当使用#define DB_HEAP_SZ 2048*4时,在~6800-7200个数据包之后溢出occer

请注意Android Phone MTU为默认状态(即20)DB_HEAP_SZ 2048*4是稳定的不发生溢流在~ 300000个数据包之后(我手动停止了它)

DA14585 code: user_config.h .max_mtu = 247, Android code设置mtu: mBluetoothGatt.requestMtu(247);//设置Android App的Mtu为247 @Override public void oncharacterchanged (BluetoothGatt gatt, BluetoothGattCharacteristic characteristic) {super. value . value . value . value . value . value . value。onCharacteristicChanged(关贸总协定、特点);byte[] messageBytes = characteristic.getValue();日志。w(TAG, " oncharacterchanged: " + messageBytes. "长度+ " " + messageBytes[0]);}

请告知您是否在测试台上使用Android手机?

如果是,请分享使用的Android版本和示例测试代码。

*注:这里使用的设置是:三星A5, S9 Android版本8,两款手机都显示相同的行为

问候,
喧闹

PM_对话框
离线
最后一次见到:6天13小时前
工作人员
加入:2018-02-08 11:03
嗨,罗伊,

嗨,罗伊,

我想再问你一件事。您使用的是自定义移动应用程序吗?

谢谢,下午好

Roie DAHAN
离线
最后一次见到:1年1周前
加入:2018-11-19 16:32
嗨PM_Dialog,

嗨PM_Dialog,

是的,我正在使用一个定制的android应用程序。

还通过Play Store的少数应用程序(如LightBlue等)进行了验证

任何推荐的测试应用程序,你可以分享的例子?

问候,

喧闹

Roie DAHAN
离线
最后一次见到:1年1周前
加入:2018-11-19 16:32
嗨PM_Dialog,

嗨PM_Dialog,

任何更新吗?

问候,

喧闹

PM_对话框
离线
最后一次见到:6天13小时前
工作人员
加入:2018-02-08 11:03

嗨,罗伊,

但我还是无法复制它。我正在努力,如果有任何更新,我会让你知道。我会试着复制它。

谢谢,下午好

Roie DAHAN
离线
最后一次见到:1年1周前
加入:2018-11-19 16:32
嗨PM_Dialog,

嗨PM_Dialog,

请告知我是否可以向您发送任何信息来找出根本原因(例如:注册转储、启用一些调试printf标志等)

Regartds,

喧闹

PM_对话框
离线
最后一次见到:6天13小时前
工作人员
加入:2018-02-08 11:03
嗨,罗伊,

嗨,罗伊,

您可以使用BLE嗅探器工具来检查通过空中传输的数据包。

谢谢,下午好

Roie DAHAN
离线
最后一次见到:1年1周前
加入:2018-11-19 16:32
嗨PM_Dialog,

嗨PM_Dialog,

我没有BLE嗅探器,请建议购买/安装哪些工具

问候,

喧闹

PM_对话框
离线
最后一次见到:6天13小时前
工作人员
加入:2018-02-08 11:03
嗨,罗伊,

嗨,罗伊,

很抱歉耽搁了。我可能错过了你最后的评论。你解决这个问题了吗?如果您的问题与DA14585有关,如前所述,这是由于低效的堆大小造成的,那么您应该增加它。

谢谢,下午好