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

⚠️
你好。。谢谢你来到论坛。令人兴奋的消息!我们现在正在迁移到新的论坛平台,该平台将提供更好的功能,并包含在主对话网站中。所有员额和帐户都已迁移。我们现在只接受新论坛的流量-请在//www.wsdof.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
#定义NON_RET_HEAP_SZ

实际上,我通过UART从不同的控制器发送GATT数据库,并使用TASK_APP和KE_MSG_ALLOC分配服务、特征和描述符。
添加一些后,控件将转移到wrap_platform_reset()。当我阅读一些关于对话框支持的答案时,我发现当内存不足时会发生这种情况。
所以,我增加了所有这些的值,现在我的GATT数据库运行良好。
尽管如此,我还是想确切地了解上述每个宏的用途或用途。

谢谢,
Hrishikesh

设备:
LT_Dialog(未验证)
嗨,德里希,

嗨,德里希,
这些宏定义用于不同用途的内存段的大小。例如,调用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
#定义ENV_HEAP_SZ 1536
#定义MSG_HEAP_SZ 2048
#定义非RET_堆_SZ 1024

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

dhrishi
离线
最后看到:3年5个月前
加入:2017-02-10 09:56
我终于可以搞定它了

我最终可以使用以下值使其工作:

#定义DB_HEAP_SZ 3072
#定义ENV_HEAP_SZ 3584
#定义MSG_HEAP_SZ 1600
#定义非RET_堆_SZ 1024

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

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

你好

我们需要添加一些新服务和大约10个特性。这样做的结果是,宏(上面提到的)的大小增加超出了执行区域ZI_RET20的范围。正确的处理方法是什么?
当编译时,我得到的错误:

执行区域ZI_RET20大小(9764字节)超过限制(8888字节
错误:L6221E:执行区域ZI_RET20的执行范围()与执行区域ZI_RET21的执行范围()重叠

我至少需要2kB的内存。如何增加区域的大小直到我能达到多大的最大值。

LC_Dialog
离线
最后看到:1个月3周前
工作人员
加入:2016-09-19 23:20
你好,德里希,

你好,德里希,

我为耽搁道歉。

所以,为了更好地了解,你现在有多种服务,包括2个定制服务(580允许),其余是标准服务。

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

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

最好的
信用证

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

不。我所有的服务和特性都是自定义的,有128位uuid。
我们有大量的服务(8-10个)、特性(50-55个)和特性值大小也非常大(每个特性大约150字节)

不,我不能调试失败,因为DA14580是一个模块的一部分(其中有我们的MCU和DA14580)。所以我们不能调试它。虽然,我可以验证它与记忆有关,当我减少输入服务和特征,它工作得很好。只是,当我引入一个服务或特性时,DA14580在通过UART添加GATT数据库时不会响应某个命令

LC_Dialog
离线
最后看到:1个月3周前
工作人员
加入:2016-09-19 23:20
你好,德里希,

你好,德里希,

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

此外,您的应用程序是否进入深度睡眠状态?您是否需要保留内存中的所有服务/字符?我想知道,如果您不使用深度睡眠来释放一些保留RAM,是否可以将数据移动到常规RAM。

只是确认一下,您是否在HCI上使用DA14581?

最好的
信用证

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

你好

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

目前,我们计划延长睡眠时间。根据我的理解,8kB的保留RAM连同整个系统RAM在这种睡眠模式下被保留。对吧?
所以,我认为将一些数据移到普通内存应该没问题。我会试着先自己搬东西。如果有任何问题,我会发送地图文件。你能分享一下你的电子邮箱吗?
另外,我还想了解一些事情:

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

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

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

另一方面,请告诉我使用扩展睡眠模式和深度睡眠模式的标准BLE外设的当前值。我只是想了解当前评级的差异。

谢谢,
Hrishikesh

LC_Dialog
离线
最后看到:1个月3周前
工作人员
加入:2016-09-19 23:20
你好,德里希,

你好,德里希,

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

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和KEEP_POWERED。是否与电源模式有关(这里是延长睡眠时间)?
如果我持续返回此函数以保持_通电,会发生什么情况?
如果我返回GOTO_SLEEP,那么UART或BLE上的任何活动都会唤醒它吗?
简而言之,我需要理解这些返回值指示什么以及结果是什么。

谢谢,
Hrishikesh

LC_Dialog
离线
最后看到:1个月3周前
工作人员
加入:2016-09-19 23:20
嗨,德里希,

嗨,德里希,

我们的数据表和用户手册中解释了睡眠模式。要获得简短的参考,您可以查看安装7.1.1睡眠模式在我们的嗯- b - 051 - _da1458x_software_platform_reference文件。

中定义了休眠模式user_config.h项目中的文件。默认的光秃秃的ARCH_SLEEP_OFF这通常是我们SDK中的默认值。这意味着它处于活动模式。

这个.app_on_system_powered当应用程序希望在BLE断电后保持系统活动时调用。这旨在为应用程序提供额外的处理时间,以进行一些数据/后台处理。根据这里调用的函数将决定应用程序是否必须保持供电或可以进入睡眠。如果你进入睡眠状态,那么它将在睡眠模式结束时被唤醒以处理BLE事件。关于唤醒DA14580的方法,请参考我们的UM。但是默认情况下,UART不会唤醒系统,而BLE会。

最好的
信用证

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

你好

谢谢你的回复。两件事:

1.如果我修改了user_config.h以使用扩展睡眠模式,但在整个返回过程中,通过我的应用程序在系统上保持供电,是否会使用扩展睡眠模式?或者BLE仍然可以进入延长睡眠模式?
设置:我们的模块是一个外围解决方案,具有外部MCU和DA14580。外部MCU通过GATT数据库和UART向DA14580发送广告数据,以便开始广告。
现在,理想情况下DA14580可以延长睡眠时间。继续,它可能会收到:
i.来自MCU的事件(通过UART),如指示(请求发送到BLE中央),更新的广告数据,断开连接请求或
2BLE中央可能会向DA14580发送GATT读写命令。
那么,我们如何恰当地处理所有这些问题,并保持DA14580在长时间休眠以节省电力呢?

2.是否有一个应用程序笔记,以帮助读取ble_app_peripheral在扩展睡眠模式。配置、引脚、场景和其他细节?我们可以首先在DA14580上尝试,然后在我们的模块上复制它以获取实际的当前读数。我看到Training_04_sleep_modes_current_measurement_v1.0.pdf。我会查清楚的。

LC_Dialog
离线
最后看到:1个月3周前
工作人员
加入:2016-09-19 23:20
你好,德里希,

你好,德里希,

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功率谱仪校准用于校准开发工具包,以获得准确的结果。

最好的
信用证