你好,
我无法理解da1458x_config_advanced.h文件中以下宏的目的/意义。你能解释一下它们的意思吗?
#定义DB_HEAP_SZ
#定义ENV_HEAP_SZ
#定义MSG_HEAP_SZ
#定义NON_RET_HEAP_SZ
实际上,我正在通过UART从不同的控制器发送GATT数据库,并使用TASK_APP和KE_MSG_ALLOC分配服务、特征和描述符。
添加一些后,控制转移到Wrap_platform_reset()。当我阅读对话支持的一些答案时,我发现内存低时会发生这种情况。
所以,我增加了所有这些的价值,现在我的GATT数据库正常工作。
虽然,我想了解究竟是目的或上述每个宏的目的。
谢谢,
Hrishikesh
设备:
嗨Dhrishi,
这些宏定义了用于不同用法的内存部分的大小。例如,调用ke_msg_alloc将从msg_heap_sz定义的大小定义的msg部分分配所请求的金额的内存。DB是用于GATT数据库,ENV是用于内核和BLE堆栈内部用法,而NON_RET是通用目的。
我有大量的服务和特点(6个服务和33个特点)。我最后每次服务的总大小是:
S1: 1278字节字节
S2: 570字节
S3:751字节
S4: 1455字节
S5: 745字节
S6: 214字节
每个服务的特征都是TLV8类型的,因此它们的大小更大。
你能建议可以使用的大小宏的值吗?我使用的当前值:
#定义DB_HEAP_SZ 2048
#定义ENV_HEAP_SZ 1536
#定义MSG_HEAP_SZ 2048
#define non_ret_heap_sz 1024.
使用这些值,当我添加服务S4时,DA14580变为非响应性。我认为这是一个记忆问题。
我尝试在一些组合中增加这些,但没有运气。
我最终可以使用以下值使它成为:
#定义DB_HEAP_SZ 3072
#define env_heap_sz 3584.
#define msg_heap_sz 1600.
#define non_ret_heap_sz 1024.
如果有任何问题(比如最大尺寸等),你能证明这些值并告诉我吗?
你好,
我们需要增加一些新的服务和大约10个特征。在这种情况下,宏(上面提到的)增加的大小超出了执行区域ZI_RET20的范围。正确的处理方式是什么?
编译时,我得到的错误:
错误提示:L6220E: Execution region ZI_RET20 size (9764 bytes) exceeds limit (8888 bytes) region contains 0 bytes of padding and 0 bytes of veeners
错误:L6221E:执行区域ZI_RET20 with Execution range()与执行区域ZI_RET21 with Execution range()重叠
我至少需要2kB的内存。如何增加区域大小,直到我能做多大的最大值。
你好Dhrishi,
我为耽搁道歉。
因此,为了更好地理解,你现在有多个服务,其中包括2个自定义服务(在580上允许)和rest是标准服务。
当您提到时,DA14580变得不谐波,如果它是由于堆栈问题而不是堆而调试。请验证是否存在与堆栈崩溃有关的任何问题。只需用图案填充内存并查看它被修改的部分即可执行此操作。
总存储器将根据描述,这只是每种类型中所有动态分配的总和。
最好的
信用证
不。我的所有服务和特征都是自定义的,具有128位uuid。
我们有大量的服务(8-10),特征(50-55),特征值尺寸也很大(每种特征几乎150个字节)
不,我无法调试该故障,因为DA14580是一个模块的一部分(有我们的MCU和DA14580)。所以我们无法调试它。虽然,我可以验证它与内存有关,因为当我减少输入服务和特征时,它工作得很好。只是,当我引入服务或特征时,在通过UART添加GATT数据库时,DA14580在某个命令之后不响应
你好Dhrishi,
DA14580有8kb的保留RAM。你只能在Ret ram中保存这么多数据。这可以从MAP文件监视,应用程序可以根据可用内存进行调优。请把你的MAP文件转发给我,以便我查看内存的使用情况。
此外,您的申请是否会深入睡眠?您需要保留记忆中的所有服务/字符吗?如果您没有操作深度睡眠以释放一些保留RAM,我想知道数据是否可以移动到常规RAM。
只是为了确认,您是否在HCI上使用DA14581?
最好的
信用证
你好,
非常感谢您的支持。抱歉回复晚了。
目前,我们正计划使用延长睡眠时间。根据我的理解,8kB的保留RAM以及整个系统RAM在这种睡眠模式中被保留。对吧?
所以,我认为应该可以将一些数据移到常规RAM中。我会先试着自己搬东西。如果有任何问题,我会把地图文件发送过去。你可以分享你的电子邮件id相同。
另外,我还想了解一些事情:
1.当添加一个服务时,总大小是给定的,我假设堆栈为该服务的特征值(根据大小)分配了大量的内存。那么下面,哪一种类型的堆用于存储这个:
db_heap_sz或env_heap_sz或msg_heap_sz
2.如果我们决定使用扩展睡眠,是否可以如果我保持env堆和msg堆在保留RAM(利用可用的8KB)和移动数据库堆到系统RAM(或其他一些组合)?在这种情况下会有什么问题吗?
3.如果我们决定使用DeepSleep模式,我们可以通过在值0-23之间的API SystemIt()中修改EM_MAP配置来保留超过8KB的内存。如果是,可以使用这种配置保留最大存储量量。
在不同的纸币上,您可以使用扩展睡眠模式和深度睡眠模式,让我知道标准BLE外设的当前值。我只是想了解当前评级的差异。
谢谢,
Hrishikesh
你好Dhrishi,
请提供你的电子邮件,我会转发一个安全的文件夹给你。这可以用于上传地图文件。
1.添加任何Services/Chars时,内存是从DB_HEAP_SZ分配的。但是,由于总体代码和数据增加,RAM使用(其他堆)也会相应增加。
2.在长时间睡眠中,你保留记忆的地方没有区别。因此,您可以使用适合内存组织的任何组合。
3.在深度睡眠时,你能保留的只有8kB。
4.在DA14580上,扩展睡眠电流通常在1.2 - 1.4 uA之间,深度睡眠电流约为650nA。但请记住,硬件设计和使用的组件可能会有所不同。
最好的
信用证
你好,
谢谢你的回复。因此,我假设所有的内存都保持在延长睡眠模式。我打算使用延长睡眠模式。
那么,就功能而言,延长睡眠模式和深度睡眠模式有什么区别?如果有相同的指针。这样我就能理解了。
我已经基于BLE_APP_BAREBONE示例应用程序创建了我的应用程序(SDK:5.0.4)。所以,默认情况下,其中使用的电源模式是什么?
此外,我还将指针“app_on_system_powered”设置为需要定期调用的函数。我看到它要么返回GOTO_SLEEP和KEEP_POWERED。是否与电源模式有关(在这种情况下延长睡眠时间)?
如果我从这个函数持续返回Keep_power,会发生什么?
并且,如果我返回GOTO_SLEEP,那么UART或BLE上的任何活动都会唤醒它吗?
简而言之,我需要理解这些返回值指示了什么,结果是什么。
谢谢,
Hrishikesh
嗨Dhrishi,
睡眠模式在我们的数据表和用户手册中解释。简要介绍,您可以查看安装7.1.1睡眠模式在我们的嗯- b - 051 - _da1458x_software_platform_reference文档。
类中定义了休眠模式user_config.h文件中的文件。默认in.BLE_APP_BAREBONE.是ARCH_SLEEP_OFF这通常是SDK的默认设置。这意味着它处于活动模式。
这.app_on_system_powered当应用程序希望在BLE断电后保持系统活动时调用。这旨在为应用程序提供额外的处理时间,用于某些数据/后台处理。这里调用的函数将决定应用程序是必须保持供电还是可以进入休眠状态。如果你去睡觉,那么它将在睡眠模式结束时被唤醒,以解决BLE事件。DA14580唤醒方法请参考我们的UM's。但是默认情况下,UART不会唤醒系统,而BLE可以。
最好的
信用证
你好,
谢谢你的回复。两件事情:
1.如果我修改user_config.h以使用扩展睡眠模式,但在返回repact_powered从我的app_on_system_powered回调时,会有扩展睡眠模式吗?或者BLE仍然可以扩展睡眠模式?
设置:我们的模块是一个外围解决方案,具有外部MCU和DA14580。外部MCU通过UART到DA14580通过GATT数据库和广告数据发送,以便它可以启动广告。
理想情况下,DA14580可以进入长时间睡眠。继续,它可能会收到:
i.来自MCU(通过UART)的事件,如指示(请求发送到BLE中心),更新的广告数据,断开连接请求或
2BLE中心可以将GATT读写命令发送给DA14580。
那么,我们如何恰当地处理所有这些,并保持DA14580在延长睡眠时间以节省电力呢?
2.有没有一个应用程序笔记可以帮助读取ble_app_peripheral在延长睡眠模式。配置,引脚,场景和其他细节?我们可以先在DA14580上尝试,然后在我们的模块上复制它以获取实际的当前读数。我看到Training_04_sleep_modes_current_measurement_v1.0.pdf。我会检查的。
你好Dhrishi,
1.如果将应用程序保留在活动期间app_on_system_powered过程,无论启用睡眠模式,系统都不会睡眠状态。
另外,如果你给了系统在下一个BLE事件即将发生之前进入睡眠的权限,那么它就足够智能来确定在这个时间内进入睡眠是否经济。如果不是,它将保持活跃。
对于您的申请,
根据您的解释,我明白您正在使用UART的HCI实现。在这种情况下,您可以使用外部唤醒机制从外部事件唤醒系统。要设置此操作,您将在睡眠前在特定分配的GPIO上启用中断。在睡眠期间,如果MCU在此GPIO上发送事件,系统将唤醒,您可以进行延迟处理。
注意:如果缺少GPIO,可以使用其中一个接口(UART)引脚,在睡觉前将其设置为GPIO,醒来后将其修改为UART。请参阅系统软件部分UM-B-051:DA14580进一步了解该机制如何工作。
2.是的,有一个应用程序笔记AN-B-051 SmartSnippets功率剖面仪校准指导您完成当前的测量。也指AN-B-051 SmartSnippets功率剖面仪校准用于校准开发工具,以获得准确的结果。
最好的
信用证