da1458x_config_advanced.h中与内存相关的宏的目的/意义

⚠️
大家好. .谢谢你来到论坛。令人兴奋的消息!我们现在正在转移到新的论坛平台,它将提供更好的功能,包含在主对话网站中。所有岗位和账户都已迁移。我们现在只接受新论坛的流量-请在上面发布任何新帖子//www.xmece.com/support.我们将在未来几天修复bug /优化搜索和标记。
14个帖子/ 0新
最后发表
dhrishi
离线
最后看到:3年5个月前
加入:2017-02-10 09:56
da1458x_config_advanced.h中与内存相关的宏的目的/意义

你好,

我无法理解da1458x_config_advanced.h文件下宏的目的/含义。你能解释一下每个人的意思吗?

#定义DB_HEAP_SZ
#定义ENV_HEAP_SZ
#定义MSG_HEAP_SZ
#define non_ret_heap_sz.

实际上,我正在通过UART从不同的控制器发送GATT数据库,并使用TASK_APP和KE_MSG_ALLOC分配服务、特征和描述符。
在添加了一些控件之后,控件传输到wrap_platform_reset()。当我阅读对话框支持的一些答案时,我发现这发生在内存不足的时候。
我增加了所有这些的值现在我的GATT数据库工作正常。
尽管如此,我还是想确切地了解上面每个宏的用途或用途。

谢谢,
hrishikesh.

设备:
LT_Dialog(未验证)
嗨dhrishi,

嗨dhrishi,
这些宏定义了用于不同用途的内存段的大小。例如,调用KE_MSG_ALLOC将从MSG段中分配请求数量的内存,其大小由MSG_HEAP_SZ定义。DB是GATT数据库,ENV是内核和BLE堆栈内部使用,而NON_RET是通用用途。

dhrishi
离线
最后看到:3年5个月前
加入:2017-02-10 09:56
我有一大批

我有大量的服务和特点(6个服务33个特点)。我这边每个服务的总大小是:
S1: 1278字节字节
S2: 570字节
S3: 751字节
S4: 1455字节
S5:745字节
S6: 214字节

每项服务的特征都是TLV8类型,因此它们的尺寸更大。

您可以建议可以使用的大小宏的值。我使用的当前值:
#定义DB_HEAP_SZ 2048
#define env_heap_sz 1536.
#定义MSG_HEAP_SZ 2048
#定义NON_RET_HEAP_SZ 1024

有了这些值,当我添加服务S4时,DA14580就变得无响应了。我认为这是一个记忆问题。
我试过在一些组合中增加这些,但没有运气。

dhrishi
离线
最后看到:3年5个月前
加入:2017-02-10 09:56
我终于能成功了

我终于可以让它与以下值工作:

#定义DB_HEAP_SZ 3072
#定义ENV_HEAP_SZ 3584
#定义MSG_HEAP_SZ 1600
#定义NON_RET_HEAP_SZ 1024

如果有任何问题(比如最大尺寸等),你能证明这些值并告诉我吗?

dhrishi
离线
最后看到:3年5个月前
加入:2017-02-10 09:56
你好,

你好,

我们需要增加一些新的服务和大约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的内存。如何增加区域大小,直到我能做多大的最大值。

LC_Dialog
离线
最后看到:4周14小时前
工作人员
加入:2016-09-19 23:20
你好dhrishi,

你好dhrishi,

我为延迟道歉。

因此,为了获得更好的主意,您现在拥有多个服务,包括2个自定义服务(允许在580上),并且REST是标准服务。

当你提到,DA14580变得无响应,你是否尝试调试,如果它是由于堆栈问题而不是堆的问题。请确认是否有任何与堆栈崩溃相关的问题。您可以通过简单地用一个模式填充内存,然后查看修改了哪个部分来实现这一点。

根据描述,总内存将是每种类型中所有动态分配的总和。

最好的
信用证

dhrishi
离线
最后看到:3年5个月前
加入:2017-02-10 09:56
不。我所有的服务

不可以。我的所有服务和特征都是自定义具有128位UUID的。
我们有大量的服务(8-10),特征(50-55)和特征值大小也相当大(每个特征大约150字节)

不,我无法调试该故障,因为DA14580是一个模块的一部分(有我们的MCU和DA14580)。所以我们无法调试它。虽然,我可以验证它与内存有关,因为当我减少输入服务和特征时,它工作得很好。只是,当我引入服务或特征时,在通过UART添加GATT数据库时,DA14580在某个命令之后不响应

LC_Dialog
离线
最后看到:4周14小时前
工作人员
加入:2016-09-19 23:20
你好dhrishi,

你好dhrishi,

DA14580有8kb的保留RAM。你只能在Ret ram中保存这么多数据。这可以从MAP文件监视,应用程序可以根据可用内存进行调优。请把你的MAP文件转发给我,以便我查看内存的使用情况。

另外,你的应用程序是否进入深度睡眠状态?你需要所有的服务/字符在保留记忆?我想知道,如果不是深度睡眠,数据是否可以转移到常规RAM,以释放一些保留RAM。

确认一下,你在HCI上使用DA14581吗?

最好的
信用证

dhrishi
离线
最后看到:3年5个月前
加入:2017-02-10 09:56
你好,

你好,

非常感谢您的支持。抱歉回复晚了。

目前,我们正计划使用延长睡眠时间。根据我的理解,8kB的保留RAM以及整个系统RAM在这种睡眠模式中被保留。对吧?
所以,我认为应该可以将一些数据移到常规RAM中。我会先试着自己搬东西。如果有任何问题,我会把地图文件发送过去。你可以分享你的电子邮件id相同。
此外,我还想了解一些事情:

1.当添加一个服务时,总大小是给定的,我假设堆栈为该服务的特征值(根据大小)分配了大量的内存。那么下面,哪一种类型的堆用于存储这个:
DB_HEAP_SZ或ENV_HEAP_SZ或MSG_HEAP_SZ

2.如果我们决定使用扩展睡眠,是否可以如果我保持env堆和msg堆在保留RAM(利用可用的8KB)和移动数据库堆到系统RAM(或其他一些组合)?在这种情况下会有什么问题吗?

3.如果我们决定使用深度睡眠模式,我们可以通过在API SystemInit()的值0-23之间修改EM_MAP配置来保留超过8kB的内存。如果是,那么使用这种配置可以保留的最大内存量是多少。

另外,你能告诉我使用延长睡眠模式和深度睡眠模式的标准BLE外设的当前值吗?我只是想了解当前收视率的不同。

谢谢,
hrishikesh.

LC_Dialog
离线
最后看到:4周14小时前
工作人员
加入:2016-09-19 23:20
你好dhrishi,

你好dhrishi,

请提供您的电子邮件,我将转发安全文件夹TP。这可以用于上传地图文件。

1.添加任何Services/Chars时,内存是从DB_HEAP_SZ分配的。但是,由于总体代码和数据增加,RAM使用(其他堆)也会相应增加。

2.在长时间睡眠中,你保留记忆的地方没有区别。因此,您可以使用适合内存组织的任何组合。

3.在深度睡眠时,你能保留的只有8kB。

4.在DA14580上,扩展睡眠电流通常在1.2 - 1.4 uA之间,深度睡眠电流约为650nA。但请记住,硬件设计和使用的组件可能会有所不同。

最好的
信用证

dhrishi
离线
最后看到:3年5个月前
加入:2017-02-10 09:56
你好,

你好,

谢谢你的回复。因此,我假设所有的内存都保持在延长睡眠模式。我打算使用延长睡眠模式。
那么,就功能而言,延长睡眠模式和深度睡眠模式有什么区别?如果有相同的指针。这样我就能理解了。

我已经创建了我的应用基于ble_app_barebone样例应用程序(SDK: 5.0.4)。默认的电源模式是什么?

此外,我已经将指针“app_on_system_powered”设置为定期呼叫的函数。我看到它要么返回goto_sleep和leep_powered。它与电源模式有关(在这种情况下延长睡眠)吗?
如果我连续地从这个函数返回KEEP_POWERED会发生什么?
而且,如果我返回goto_sleep,那么UART上的任何活动都会唤醒它吗?
简而言之,我需要了解这些返回值的表明和结果。

谢谢,
hrishikesh.

LC_Dialog
离线
最后看到:4周14小时前
工作人员
加入:2016-09-19 23:20
嗨dhrishi,

嗨dhrishi,

我们的数据表和用户手册解释了睡眠模式。你可以查阅一下7.1.1睡眠模式在我们的嗯- b - 051 - _da1458x_software_platform_reference文档。

类中定义了休眠模式user_config.h.在项目中归档。默认的ble_app_bareboneArch_sleep_off.这通常是SDK的默认设置。这意味着它处于活动模式。

.app_on_system_powered当应用程序电源关闭后,应用程序想要保持系统活动状态。这旨在为应用程序提供一些数据/背景处理的额外处理时间。基于此处调用的函数将确定应用程序是否必须保持供电或可以睡眠。如果你去睡觉,那么它将在睡眠模式的末尾唤醒,以寻址BLE事件。有关唤醒DA14580的方法,请参阅我们的UM。但默认情况下,UART不会唤醒系统,而BLE则不会唤醒系统。

最好的
信用证

dhrishi
离线
最后看到:3年5个月前
加入:2017-02-10 09:56
你好,

你好,

谢谢你的回复。两件事:

1.如果我修改user_config.h以使用扩展睡眠模式,但在从我的app_on_system_powered回调返回KEEP_POWERED期间,会使用扩展睡眠模式吗?或者BLE仍然可以进入长时间睡眠模式?
设置:我们的模块是一个外围解决方案,有一个外部MCU和DA14580。外部MCU将GATT数据库和广告数据通过UART发送到DA14580,从而可以开始广告。
理想情况下,DA14580可以进入长时间睡眠。继续,它可能会收到:
i.来自MCU(通过UART)的事件,如指示(请求发送到BLE中心),更新的广告数据,断开连接请求或
2BLE中心可以将GATT读写命令发送给DA14580。
因此,我们如何适当地处理所有这些,并且仍然保持DA14580在延长睡眠中进行省电。

2.是否有一个应用笔记,有助于在扩展睡眠模式下读取BLE_APP_PERITELAL的读数。配置,引脚,方案和其他细节?我们可以先尝试在DA14580上,然后在模块上复制它以取实际读数。我看到training_04_sleep_modes_current_measurement_v1.0.pdf。我会通过这个检查。

LC_Dialog
离线
最后看到:4周14小时前
工作人员
加入:2016-09-19 23:20
你好dhrishi,

你好dhrishi,

1.如果您保持应用程序在app_on_system_powered步骤,系统将不会进入睡眠,不管启用了什么睡眠模式。
此外,如果假设您在下一个BLE事件即将发生在下一个BLE事件即将发生的情况下,我们提供了睡眠的许可,它是足够智能的,以确定它是否经济睡眠。如果它不是它会保持活跃。

对于您的应用程序,
从你的解释中,我了解到你在UART上使用HCI实现。在这种情况下,您可以使用外部唤醒机制将系统从外部事件中唤醒。要设置这个,您将在进入睡眠之前在一个专门分配的GPIO上启用中断。在休眠期间,如果单片机在这个GPIO上发送一个事件,系统将被唤醒,您可以做所需的处理。
注意:如果短缺GPIO,则可以使用其中一个接口(UART)引脚,您将在睡眠状态之前将其作为GPIO使其成为GPIO,并在唤醒之后修改为UART。请参考系统软件部分嗯- b - 051: DA14580为了进一步了解这种机制是如何工作的。

2.是的,有一个应用程序笔记AN-B-051 SmartSnippets功率剖面仪校准指导您完成当前的测量。也指AN-B-051 SmartSnippets功率剖面仪校准用于校准开发工具,以获得准确的结果。

最好的
信用证