⚠️
大家好. .谢谢你来到论坛。令人兴奋的消息!我们现在正在转移到新的论坛平台,它将提供更好的功能,包含在主对话网站中。所有岗位和账户都已迁移。我们现在只接受新论坛的流量-请在上面发布任何新帖子//www.wsdof.com/support.我们将在未来几天修复bug /优化搜索和标记。
14个帖子/ 0个新
最后发表
节食者粉笔
离线
最后看到:5个月前
加入:2019-10-12 33
RetRAM0溢出

你好,

我正在使用eval板上的DA14683设备与实际的SDK和工具。

似乎我对内存布局有问题,编译器告诉我在需要更多的32千字的RAM时耗尽内存。以下将显示:
App.elf section ' RETENTION_RAM0'将不适合区域' RetRAM0'
retram0'溢出32字节

下面是我的实际配置(来自custom_config_qspi.h)

#定义dg_configOPTIMAL_RETRAM (0) # define dg_configMEM_RETENTION_MODE (0 x1f) # define dg_configQSPI_CACHED_RAM_SIZE_AE (61 * 1024) # define dg_configQSPI_CACHED_RETRAM_0_SIZE_AE (67 * 1024) # define dg_configQSPI_CACHED_RAM_SIZE_BB (62 * 1024) # define dg_configQSPI_CACHED_RETRAM_0_SIZE_BB (66 * 1024)

我从一个例子中使用了这个,我希望至少有64kbyte的RAM。

即使摆弄数字,我也解决不了这个问题。

我需要配置什么才能得到最大值。以QSPI缓存模式运行的BLE应用程序的RAM大小?我想保留完整的内存。

顺便问一下,在项目设置中使用以下配置是否正确:

dg_configBLACK_ORCA_IC_REV = BLACK_ORCA_IC_REV_B dg_configBLACK_ORCA_IC_STEP = BLACK_ORCA_IC_STEP_B

致以最亲切的问候
节食者

关键词:
设备:
节食者粉笔
离线
最后看到:5个月前
加入:2019-10-12 33
你好,

你好,

我刚刚认识到,这与FreeRTOS Heap的调整有关

/*************************************************************************************************\ * FreeRTOS特定配置* / # define OS_FREERTOS / *定义这个使用FreeRTOS * / # define configTOTAL_HEAP_SIZE 16384 / *这是FreeRTOS总堆大小* /

所以当我越来越多的时候,那么我就会得到这个问题。

它不会发生,当我增加一些其他缓冲区,例如Segger RTT(只是为了测试):

#define BUFFER_SIZE_UP(45000) //目标终端输出缓冲区的大小,直到主机(默认:1k)

然后编译器/链接器输出看起来是OK的:

调用:Cross ARM GNU创建Flash映像调用:Cross ARM GNU打印尺寸文本数据BSS DEC十六进制文件名187380 216 75552 403152 403152 403152 40352

这有助于回答我的问题吗?

致以最亲切的问候

节食者

bobspam@free.fr
离线
最后看到:两个月三个星期前
加入:2018-06-20 08:07
你好

你好

DA14683的内存映射相当复杂。

请在编译器生成的地图文件上找到一个小awk脚本,以找到各个部分


开始= 0;
= 1;
total_size = 0;
First_address = (2^32) - 1;
last_address = 0;
printf(";开始;规模;结束;规模;\ n”);
{做
if($ 0〜/ memory地图/)
开始= 1;
如果(0 ~ / ^输出/美元)
再次= 0;
if(已启动== 1 && $ 0〜/ ^ [:alnum:] \。] /){
地址= strtonum(2美元);
大小= strtonum(3美元);
if(address != 0 && size != 0){/ /地址
如果(大小! = 0){
如果(地址< first_address)
first_address =地址;
如果(地址> last_address)
last_address =地址;
printf(“%s; 0x%x; 0x%x; 0x%x;%u; \ n”,$ 1,地址,大小,地址+大小,大小);
total_size + =大小;


If (getline <= 0)
再次= 0;
} while(再次> 0);
printf("总和;;0 X %;; % u; \ n”,total_size, total_size);
printf("range;0x%X;0x%X; %u;\n", first_address, last_address - first_address, last_address, last_address - first_address);
退出;

将此写入脚本.AWK文件然后运行

#呆呆- f脚本。awk yoursoftware.map

目的是分析二进制文件的整体结构,确定哪一部分占用太多空间,应该减少。

然后,下一步是识别哪个堆/堆栈是这样,所以您有机会设置每个每个堆栈。

在我这边,我在custom_config_qspii .h文件中使用以下配置

#define dg_configRAM_RETRAM_0_SIZE_BB(64 * 1024) //保留内存块是8k, 24k或32k。包含os_heap
#define dg_configRAM_RAM_SIZE_BB(64 * 1024) //和。bss, .heap, .stack
#define __HEAP_SIZE (24 * 1024)
#定义__STACK_SIZE (16 * 1024)

#define configTOTAL_HEAP_SIZE(48* 1024) /*这是FreeRTOS总堆大小*/

请记住,物理RAM尺寸为144k,其中保留RAM为64K。

关于Flash部分,固件分区为0x7F000大小(〜500kb),因此您的二进制文件不得超过此。

祝你好运(花了几个小时来将软件融入记忆!)

节食者粉笔
离线
最后看到:5个月前
加入:2019-10-12 33
大家好,非常感谢

你好,非常感谢您的详细回答。

我会尽快尝试你的剧本。

同时,你能告诉我freeRTOS堆会放在哪个部分吗?

另一个问题是关于RAM部分的:

-最大64kbyte是正确的吗?保留

-使用剩余RAM空间的最佳策略是什么?

致以最亲切的问候

节食者

PM_Dialog
离线
最后看到:18小时12分钟前
工作人员
加入:2018-02-08 11:03
嗨,迪特尔•福尔克

嗨,迪特尔•福尔克

很抱歉我回复晚了。能否说明增加堆后问题是否解决?你得到的误差是什么?你是在调试模式下运行的吗?

谢谢,PM_Dialog

节食者粉笔
离线
最后看到:5个月前
加入:2019-10-12 33
你好,

你好,

我当前的内存配置类似:

/*************************************************************************************************\ * 特定的内存布局配置* / # define dg_configOPTIMAL_RETRAM (0) # define dg_configMEM_RETENTION_MODE (0 x1f) # define dg_configQSPI_RETRAM_0_SIZE_BB (64 * 1024) # define dg_configQSPI_CACHED_OPTIMAL_RETRAM_0_SIZE(64 * 1024) #定义dg_configQSPI_RAM_SIZE_BB (64 * 1024) # define __HEAP_SIZE (1 * 1024) # define __STACK_SIZE (16 * 1024 ) /*************************************************************************************************\ * FreeRTOS特定配置* / # define OS_FREERTOS / *定义这个使用FreeRTOS * / # define configTOTAL_HEAP_SIZE(15 * 1024) / *这是FreeRTOS总堆大小*/

这工作,我的链接器输出是:

调用:十字架ARM GNU创建Flash映像调用:Cross ARM GNU打印尺寸文本数据BSS DEC十六进制文件名178900 211792 33B50

当我将configtotal_heap_size增加到(16 * 1024)时,链接器会失败,我得到了发布输出:

Cross ARM c++ Linker C:/dialogsemi/smartsnippetsstudio2.0.10/gcc/4_9-2015q3/bin/../lib/gcc/ ARM -none-eabi/4.9.3/../../ ARM -none-eabi/bin/ld.exe:固件。c:/dialogsemi/smartsnippetsstudio2.0.10/gcc/4_9-2015q3/bin/../lib/gcc/arm-none-eabi/4.9.3/../../ arm-none-eabi/bin/ld.exe: region ' RETENTION_RAM0' overflow by 224 bytes collect2.exe: error: ld returned 1 exit status

同样的问题发生在DEBUG和RELEASE build (DA14683-00-Debug_QSPI, DA14683-00-Release_QSPI)

致以最亲切的问候

节食者

bobspam@free.fr
离线
最后看到:两个月三个星期前
加入:2018-06-20 08:07
你好

你好

我现在使用的dg_config的小勘误表(用于custom_config_qspi.h)

#define dg_configQSPI_CACHED_RETRAM_0_SIZE(96 * 1024) //包含ucHeap[] aka .os_heap aka FreeRTOS Heap。
#define dg_configqspi_cached_retram_1_size(0 * 1024)//没有该部分的数据。
#define dg_configQSPI_CACHED_RAM_SIZE(32 * 1024) //和。bss, .heap, .stack。(128k - retream0 - BLERET)
#define configTOTAL_HEAP_SIZE(47 * 1024) //这是FreeRTOS总堆大小,ucHeap[]在.os_heap部分。请参阅xMinimumEverFreeBytesRemaining符号,了解有多少内存从未被使用。
#define __HEAP_SIZE (15 * 1024) // 15ko见调试工具中的头挂符号- __HeapBase在.map文件。使用端口堆溢出验证来检查大小。newlib需要(printf, strtok是高消费者)
#define __stack_size(1 * 1024)// 1ko:__stacktop在.map文件 - Cortex-M0的MSP寄存器。仅在启动时间使用时才不得为null。

我也使用

#define dg_configSHUFFLING_MODE (0x0) // 0x0自然顺序。固定ram块是8k, 24k或32k。
#define dg_configmem_retention_mode(0x1f)//保留所有内存块

避免在执行过程中关闭记忆开关。

在你的情况下,我会建议

-提高RETRAM_0_SIZE

提高相同数量的RAM_SIZE

-倒置堆和堆栈的大小,因为堆栈只在启动时使用,然后FreeRTOS为每个任务设置专用的堆栈。heap是由像newlib这样的“非freertos”代码使用的,所以如果你使用printf或strtok,你应该保留一些~15kB。我假设您使用FreeRTOS的heap_4.c分配策略。你可以使用FreeRTOS最新版本的heap_6.c来撤销os_heap,并与newlib共享.heap。

致以最亲切的问候

PM_Dialog
离线
最后看到:18小时12分钟前
工作人员
加入:2018-02-08 11:03
嗨,迪特尔•福尔克

嗨,迪特尔•福尔克

你运行过我们的SDK项目吗?你能帮我在我这边复制一下吗?设置BUFFER_SIZE_UP宏为45000后问题解决了吗?

谢谢,PM_Dialog

节食者粉笔
离线
最后看到:5个月前
加入:2019-10-12 33
你好,

你好,

我试图在“custom_config_qspi_suota.h”中配置“pxp_reporter”,并在那里更改:
#定义configTOTAL_HEAP_SIZE 16800

并得到以下错误:

... pxp_reporter.elf部分`hetent_ram0'不适合区域`retram0'
...' RetRAM0'溢出256字节

我还在其中放入了BUFFER_SIZE_UP宏,但这没有改变任何东西。

如果你能在你这边重新生成这个,并为这个问题提供一个解决方案,那就太好了。谢谢你!

致以最亲切的问候

节食者

PM_Dialog
离线
最后看到:18小时12分钟前
工作人员
加入:2018-02-08 11:03
嗨,迪特尔•福尔克

嗨,迪特尔•福尔克

是否有可能共享您在设置中使用的custom_config_qspi_suota.h文件?

另外,哪些配置是有效的哪些是无效的?

你在pxp_reporter项目中做了其他的修改吗?

在你最初的帖子中,我看到你使用的是非最优配置。在此配置期间,freeRTOS堆将被放置在RETRAM_0中,当使用RETRAM_1时,将被放置在这里。

如果将总堆大小(configTOTAL_HEAP_SIZE)增加到22000,是否有任何效果?

谢谢,PM_Dialog

节食者粉笔
离线
最后看到:5个月前
加入:2019-10-12 33
你好,

你好,

关于“pxp_reporter”项目,我刚刚检查我使用的原始项目从“DA1468x_DA15xxx_SDK_1.0.14.1081”。

你唯一需要改变的事情(得到错误)是增加行
#定义configTOTAL_HEAP_SIZE

并放16800,而不是它背后的原始定义。

我将经过修改的custom_config_qspi_suota.h文件放到这个回复中,因此通常您应该能够在您的站点上复制它。我期待着你的结果。

致以最亲切的问候
节食者

PM_Dialog
离线
最后看到:18小时12分钟前
工作人员
加入:2018-02-08 11:03
嗨Detier,

嗨Detier,

我在SDk的pxp_reporter示例中使用了相同的custom_config_qspi_suoda .h头文件,但是我无法复制这个错误。此外,我为SUOTA配置构建了项目,除了从您自己的custom_config_qspi_suota.h之外,我是否应该执行其他步骤来复制此错误?

谢谢,PM_Dialog

节食者粉笔
离线
最后看到:5个月前
加入:2019-10-12 33
请你提供

请问您使用的是哪个SmartSnippet版本,使用的是哪个SDK ?

如果使用完全相同的开发环境和原始示例,我不知道会有什么不同。

我可以试着在另一台电脑上安装,然后在我这边再检查一次。此外,对于这个行动,我需要你的反馈,你正在使用的版本。

致以最亲切的问候

节食者

PM_Dialog
离线
最后看到:18小时12分钟前
工作人员
加入:2018-02-08 11:03
嗨,迪特尔•福尔克

嗨,迪特尔•福尔克

我正在使用SDK_1.0.14和SmartSnippets Studio v.1.6.3。这个版本可以在DA14682/683产品页面的“开发工具”部分找到。

https://www.dialog-seminile.com/produ雷电竞官网登录cts/connectity/bluetooth-low-energy/smartbond-da14682-and-da14683.

你能在一个新的SDK目录中尝试吗?

谢谢,PM_Dialog