嗨,对话小组,
如果DEF_SVC1_BUTTON_STATE_CHAR LEN大于24(字节),而发送间隔为每20ms(或更短),则DA14585芯片会导致内存溢出,
请告知如何正确发送240字节每20毫秒。
请参见示例代码:
//更新按钮特性
结构custs1\u val\u ntf\u ind\u req*req=KE\u MSG\u ALLOC\u DYN(custs1\u val\u ntf\u req,
prf\u get\u task\u from\u id(task\u id\u CUSTS1),
任务应用程序,
客户需求,
定义\u SVC1 \u按钮\u状态\u字符\u长度);
需求->conidx=应用环境->conidx;
请求->通知=真;
req->handle=SVC1\u IDX\u BUTTON\u STATE\u VAL;
请求->长度=DEF\u SVC1\u BUTTON\u STATE\u CHAR LEN;
请求->值[0]=count++;
发送消息(请求);
//Android代码
公共void onCharacteristicChanged(BluetoothGatt gatt,BluetoothGatt特征)
{
超级特性改变(关贸总协定,特性);
byte[]messageBytes=characteristic.getValue();
Log.w(TAG,“onCharacteristicChanged:”+messageBytes.length)//packget显示当前MTU(测试高达240字节)
}
当做,
Roie公司
设备:
嗨Roie DAHAN,
我假设内存溢出在DA14585端。如果是的话,你能指出代码卡在哪里吗?在平台_reset _func()中?
谢谢,下午好
嗨,PM\U对话,
是的,带有reset MEM ALLOC FAIL(0xf2f2f2)的platform\u reset func弹出一个基本内存溢出
谢谢,
Roie公司
嗨Roie DAHAN,
platform\u reset\u func()由platform\u reset()调用,后者在ROM代码中实现。得到此断言的最可能原因是内存不足,因为您分配的消息从未使用过。例如,如果正在分配通知消息,并且连接间隔很小,则消息会堆积起来,直到连接事件到达,但是如果连接间隔很大,则在连接事件到达之前内存就会耗尽。您可以增加连接间隔。可能,在您的应用程序中,每次连接后都会出现某种内存泄漏,因为错误代码是RESET\u MEM\u ALLOC\u FAIL。为此,请检查是否有任何挂起的消息,并确保正在使用处理消息时收到的消息,或者如果正在分配数据,则应该释放这些消息。例如,如果您对ADC进行采样并分配消息以便在有连接时通过通知发送数据,则设备最终将耗尽内存,如果设备耗尽内存,则会导致设备重置。此外,尝试通过在da1458x\u config\u advanced.h头文件中定义DB\u heap\u SZ来增加堆大小。
谢谢,下午好
你好,
感谢您的解释,内存溢出显然是副作用的根本原因。
我的问题是:如何每20毫秒发送240字节的通知?
谢谢,
Roie公司
嗨,PM\U对话,
只是为了更多清楚的关于测试代码/设置:
1). 使用ble\u应用程序\u all\u in \u one在SDK 6.0.10.511中找到
2). 编辑/更新user_custs1_def.h中的define to:#define def_SVC1_ADC_VAL_1_CHAR LEN 120
3). 编辑/更新用户应用程序adcval1计时器cb处理器间隔为20ms
4). 编译和运行
预期结果:
实际结果:
请告知每20毫秒向Android传输120字节数据的首选方式(首选示例代码)
*注意:每20ms 120字节=48Kbps远低于1M限制
当做,
Roie公司
示例代码:
嗨Roie DAHAN,
我在SDK6.0.10的一个项目中开发了一个清晰的ble应用程序all,并使用了您附带的代码片段。但是,我无法复制您的问题。变量“count”每20毫秒发送一次通知。你能在一个干净的ble应用程序中测试一个项目吗?你做过其他的修改吗?
谢谢,下午好
嗨,PM\U对话,
要重现问题,只需更改数据大小
发件人:
收件人:
#定义定义\u SVC1 \u ADC \u VAL \u CHAR \u LEN 240
当做,
Roie公司
嗨,罗伊,
刚刚测试了240字节的大小,但我仍然无法复制它。您使用的堆大小是多少?默认大小为2048字节。你能加点吗?
谢谢,下午好
嗨,PM\U对话,
当使用#define DB#u HEAP_SZ 2048时,在~3000-3200个数据包之后溢出occer
使用#define DB_HEAP_SZ 2048*4时,在~6800-7200个数据包之后溢出occer
请注意,当Android手机MTU处于默认状态(即20)DB_HEAP_SZ 2048*4稳定没有溢出大约30万包后(我手动停止)
请告知您是否在测试台上使用安卓手机?
如果是,请分享Android版本和使用的示例测试代码。
*注意:此处使用的设置是:三星A5、S9 Android版本8,两款手机都显示相同的behivior
当做,
Roie公司
嗨,罗伊,
我想问你一个额外的问题。您正在使用自定义移动应用程序吗?
谢谢,下午好
嗨,PM\U对话,
是的,我正在使用一个定制的android应用程序。
还通过Play Store的一些应用程序进行了验证(例如,LightBlue等)
任何推荐的测试应用程序,你可以分享的例子?
当做,
Roie公司
嗨,PM\U对话,
有更新吗?
当做,
Roie公司
嗨,罗伊,
我仍然无法复制它。我正在努力,我会让你知道,如果有任何更新。我将尝试复制它。
谢谢,下午好
嗨,PM\U对话,
请告诉我是否有什么我可以发送给你,以找出根本原因(例如:注册转储,启用一些调试printf标志,等等)
皇室,
Roie公司
嗨,罗伊,
您可以使用BLE嗅探器工具来检查通过空中传输的数据包。
谢谢,下午好
嗨,PM\U对话,
我没有BLE嗅探器,请建议购买/安装什么工具
当做,
Roie公司
嗨,罗伊,
抱歉耽搁了。很可能我错过了你最后的评论。您解决了这个问题吗?如果您的问题与DA14585有关,如前所述,这是由于堆大小效率低下,所以您应该增加它。
谢谢,下午好