在CUSTS1_VAL_NTF_REQ内存溢出

⚠️
嗨,...感谢您来论坛。令人兴奋的消息!我们现在正在迁至我们的新论坛平台,将提供更好的功能,并包含在主对话框网站中。所有帖子和帐户都已迁移。我们现在只接受新论坛上的流量 - 请发布任何新线程https://www.dialog-seminile.com/support.。我们将在未来几天修复错误/优化搜索和标记。
18个员额/ 0新
最后一篇
Roie DAHAN
离线
最后一次露面:11个月1周前
加入:2018-11-19 16:32
在CUSTS1_VAL_NTF_REQ内存溢出

嗨对话团队,

所述DA14585芯片到达存储器溢出如果DEF_SVC1_BUTTON_STATE_CHAR_LEN越大则24(字节)而发送间隔是每20ms(或更少),

请指教如何正确发送240每20ms字节。

请参阅示例代码:

//更新按钮的特性
结构custs1_val_ntf_ind_req * REQ = KE_MSG_ALLOC_DYN(CUSTS1_VAL_NTF_REQ,
prf_get_task_from_id (TASK_ID_CUSTS1),
TASK_APP,
custs1_val_ntf_ind_req,
DEF_SVC1_BUTTON_STATE_CHAR_LEN);

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

ke_msg_send(REQ);

/ / Android代码
公共无效onCharacteristicChanged(BluetoothGatt关贸总协定,BluetoothGattCharacteristic特性)
{
超级。onCharacteristicChanged(关贸总协定、特点);

字节[] messageBytes = characteristic.getValue();

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

问候,

Roie

设备:
PM_DIALOG.
离线
最后一次露面:6天17小时以前
职员
加入:2018年2月8日11:03
嗨Roie大汉,

嗨Roie大汉,

我假设内存溢出是DA14585侧。如果是的话,可以请你指明代码卡?在platform_reset_func()?

谢谢,PM_DIALOG.

Roie DAHAN
离线
最后一次露面:11个月1周前
加入:2018-11-19 16:32
嗨PM_Dialog,

嗨PM_Dialog,

是的,platform_reset_func与RESET_MEM_ALLOC_FAIL(0xF2F2F2F2)一CLASIC内存溢出流行

谢谢,

Roie

PM_DIALOG.
离线
最后一次露面:6天17小时以前
职员
加入:2018年2月8日11:03
嗨Roie大汉,

嗨Roie大汉,

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

谢谢,PM_DIALOG.

Roie DAHAN
离线
最后一次露面:11个月1周前
加入:2018-11-19 16:32
你好,

你好,

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

我的问题是:如何发送240byte通知每20ms?

谢谢,

Roie

Roie DAHAN
离线
最后一次露面:11个月1周前
加入:2018-11-19 16:32
嗨PM_Dialog,

嗨PM_Dialog,

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

1)。使用ble_app_all_in_one在SDK 6.0.10.511发现

2)。编辑/更新的user_custs1_def.h定义了:#定义DEF_SVC1_ADC_VAL_1_CHAR_LEN 120

3)。编辑/更新user_app_adcval1_timer_cb_handler间隔为20ms

4)。编译和运行

预期结果:

  • 通知事件应到达每20ms的Android与数据的120Byte

实际结果:

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

请告知什么是120字节每20ms的数据传送到Android(示例代码是优选的)的优选方式

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

问候,

Roie

示例代码:

//更新在user_custs1_def.h限定于:#定义DEF_SVC1_ADC_VAL_1_CHAR_LEN 120空隙user_app_adcval1_timer_cb_handler(){静态诠释计数= 0;结构custs1_val_ntf_ind_req * REQ = KE_MSG_ALLOC_DYN(CUSTS1_VAL_NTF_REQ,prf_get_task_from_id(TASK_ID_CUSTS1),TASK_APP,custs1_val_ntf_ind_req,DEF_SVC1_ADC_VAL_1_CHAR_LEN);// ADC值要被采样的静态uint16_t样品__attribute __((部分( “retention_mem_area0”),zero_init));样本=(样品<= 0xFFFF的)?(样品+ 1):0;req-> conidx = app_env-> conidx;req->通知= TRUE;req->手柄= SVC1_IDX_ADC_VAL_1_VAL;req->长度= DEF_SVC1_ADC_VAL_1_CHAR_LEN;//的memcpy(req->值,&样品,DEF_SVC1_ADC_VAL_1_CHAR_LEN); req->value[0] = Count++; ke_msg_send(req); if (ke_state_get(TASK_APP) == APP_CONNECTED) { // Set it once again until Stop command is received in Control Characteristic timer_used = app_easy_timer(2, user_app_adcval1_timer_cb_handler); } }

PM_DIALOG.
离线
最后一次露面:6天17小时以前
职员
加入:2018年2月8日11:03
嗨Roie大汉,

嗨Roie大汉,

我的工作是SDK6.0.10的清晰ble_app_all_in_one项目,我用你的连接代码段。但是,我不能够复制您的问题。变量“计数”发送通知的思想每20ms。能否请您测试在一个干净ble_app_all_in_one项目?你做任何其他修改?
谢谢,PM_DIALOG.

Roie DAHAN
离线
最后一次露面:11个月1周前
加入:2018-11-19 16:32
嗨PM_Dialog,

嗨PM_Dialog,

要重现该问题简单地改变数据的大小

从:

#定义DEF_SVC1_ADC_VAL_1_CHAR_LEN 120

到:

的#define DEF_SVC1_ADC_VAL_1_CHAR_LEN 240

问候,

Roie

PM_DIALOG.
离线
最后一次露面:6天17小时以前
职员
加入:2018年2月8日11:03
嗨Roie,

嗨Roie,

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

谢谢,PM_DIALOG.

Roie DAHAN
离线
最后一次露面:11个月1周前
加入:2018-11-19 16:32
嗨PM_Dialog,

嗨PM_Dialog,

当使用的#define DB_HEAP_SZ 2048溢出occer〜3000后 - 3200包
当使用的#define DB_HEAP_SZ 2048 * 4溢出occer〜6800后 - 7200包

请注意Android Phone MTU为默认状态(即,20)DB_HEAP_SZ 2048 * 4是稳定的无溢出occered在~ 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,两款手机都显示相同的行为

问候,
Roie

PM_DIALOG.
离线
最后一次露面:6天17小时以前
职员
加入:2018年2月8日11:03
嗨Roie,

嗨Roie,

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

谢谢,PM_DIALOG.

Roie DAHAN
离线
最后一次露面:11个月1周前
加入:2018-11-19 16:32
嗨PM_Dialog,

嗨PM_Dialog,

是的,我使用的是定制的Android应用程序。

也有一些应用程序verifiyed从Play商店(例如,LightBlue等)

任何recommneded测试应用程序,例如,你可以分享?

问候,

Roie

Roie DAHAN
离线
最后一次露面:11个月1周前
加入:2018-11-19 16:32
嗨PM_Dialog,

嗨PM_Dialog,

任何更新吗?

问候,

Roie

PM_DIALOG.
离线
最后一次露面:6天17小时以前
职员
加入:2018年2月8日11:03

嗨Roie,

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

谢谢,PM_DIALOG.

Roie DAHAN
离线
最后一次露面:11个月1周前
加入:2018-11-19 16:32
嗨PM_Dialog,

嗨PM_Dialog,

请告知,如果有什么我可以送你到数字的根本原因(例如:寄存器转储,使一些调试的printf标志等)

Regartds,

Roie

PM_DIALOG.
离线
最后一次露面:6天17小时以前
职员
加入:2018年2月8日11:03
嗨Roie,

嗨Roie,

你可以为了使用BLE嗅探工具来检查这是在空中传输的数据包。

谢谢,PM_DIALOG.

Roie DAHAN
离线
最后一次露面:11个月1周前
加入:2018-11-19 16:32
嗨PM_Dialog,

嗨PM_Dialog,

我没有BLE嗅探器,请告知买什么工具/安装

问候,

Roie

PM_DIALOG.
离线
最后一次露面:6天17小时以前
职员
加入:2018年2月8日11:03
嗨Roie,

嗨Roie,

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

谢谢,PM_DIALOG.