⚠️
大家好. .谢谢你来到论坛。令人兴奋的消息!我们现在正在转移到新的论坛平台,它将提供更好的功能,包含在主对话网站中。所有岗位和账户都已迁移。我们现在只接受新论坛的流量-请在上面发布任何新帖子https://www.dialog-seminile.com/support.。我们将在未来几天修复错误/优化搜索和标记。
14个帖子/ 0个新
最后一篇
迪特尔•福尔克
离线
最后一次露面:5个月,3个星期前
加入:2019-10-12 33
retram0溢出

你好,

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

似乎我有一个内存布局的问题,编译器告诉我用尽内存,当需要超过32 KByte RAM。以下将显示:
App.elf section ' RETENTION_RAM0'将不适合区域' RetRAM0'
stram0 '溢出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个月,3个星期前
加入:2019-10-12 33
你好,

你好,

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

/ *************************************************************************************************\ * FreeRTOS specific config */ #define OS_FREERTOS /* Define this to use FreeRTOS */ #define configTOTAL_HEAP_SIZE 16384 /* This is the FreeRTOS Total Heap Size */

当我增加这个数,就得到这个问题。

当我增加一些其他缓冲器时,它不会发生。Segger RTT(仅用于测试):

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

然后编译器/链接器输出似乎是可以的:

调用:Cross ARM GNU Create Flash Image调用:Cross ARM GNU Print Size text data bss dec hex filename 187380 216 75556 263152 403f0

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

此致

迪特尔

bobspam@free.fr.
离线
最后一次露面:3个月1周前
加入:2018-06-20 08:07
你好

你好

DA14683的内存映射非常复杂。

请找到我在编译器生成的map文件中使用的一个小awk脚本来定位各个部分

{
开始= 0;
再次= 1;
total_size = 0;
First_address = (2^32) - 1;
last_address = 0;
printf(“部分;开始;尺寸;末端;尺寸; \ n”);
{做
如果($0 ~ /内存映射/)
开始= 1;
如果(0 ~ / ^输出/美元)
再次= 0;
If (started == 1 && $0 ~ /^[[:alnum:]\.]/){
地址= strolum($ 2);
大小= strtonum(3美元);
if(address != 0 && size != 0){/ /地址
if(size!= 0){
如果(地址< first_address)
first_address =地址;
如果(地址> last_address)
last_address =地址;
printf (" % s; 0 X % 0 X %; 0 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_qspi.h文件中使用以下配置

#define dg_configram_retram_0_size_bb(64 * 1024)//保留RAM块为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 total堆大小* /

请记住,物理RAM大小是144k,其中保留RAM是64k。

关于Flash部分,固件分区是0x7F000大小(~500kB),所以你的二进制不应该超过这个。

祝你好运(我花了好几个小时才把软件装进内存!)

迪特尔•福尔克
离线
最后一次露面:5个月,3个星期前
加入:2019-10-12 33
你好,谢谢你

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

我会尽快尝试你的剧本。

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

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

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

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

此致

迪特尔

PM_DIALOG.
离线
最后一次露面:5小时35分钟前
职员
加入:2018-02-08 11:03
嗨,迪特尔•福尔克

嗨,迪特尔•福尔克

我为我迟到的回复道歉。您是否可以在增加堆后解释问题是否解决了?这是你得到的错误吗?你用调试模式运行它吗?

谢谢,PM_DIALOG.

迪特尔•福尔克
离线
最后一次露面:5个月,3个星期前
加入:2019-10-12 33
你好,

你好,

我当前的内存配置是这样的:

/ *************************************************************************************************\ * Memory layout specific config */ #define dg_configOPTIMAL_RETRAM (0) #define dg_configMEM_RETENTION_MODE (0x1F) #define dg_configQSPI_RETRAM_0_SIZE_BB ( 64 * 1024) #define dg_configQSPI_CACHED_OPTIMAL_RETRAM_0_SIZE ( 64 * 1024) #define dg_configQSPI_RAM_SIZE_BB ( 64 * 1024) #define __HEAP_SIZE ( 1 * 1024) #define __STACK_SIZE ( 16 * 1024) /*************************************************************************************************\ * FreeRTOS specific config */ #define OS_FREERTOS /* Define this to use FreeRTOS */ #define configTOTAL_HEAP_SIZE (15 * 1024) /* This is the FreeRTOS Total Heap Size */

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

调用:Cross ARM GNU Create Flash Image调用:Cross ARM GNU Print Size text data bss dec hex filename 178900 212 32680 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:固件。/ /将RETENTION_RAM0插入到RETENTION_RAM0中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 `RetRAM0' overflowed by 224 bytes collect2.exe: error: ld returned 1 exit status

调试和发布构建中发生同样的问题(DA14683-00-DEBUG_QSPI,DA14683-00-REDELY_QSPI)

此致

迪特尔

bobspam@free.fr.
离线
最后一次露面:3个月1周前
加入: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) //该section中没有数据
#define dg_configqspi_cached_ram_size(32 * 1024)// .bss,.heap,.stack的总和。(128K - 旋转态 - 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 in .map file - MSP register of Cortex-M0。只在引导时使用的不能为空。

我也使用

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

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

以你的情况,我建议

- 提升回ram_0_size

提高相同数量的RAM_SIZE

- 堆叠堆和堆栈的尺寸,因为堆栈仅在启动时使用,然后freertos为每个任务设置专用堆栈。堆被“不是freertos”代码(如newlib)使用,所以如果您使用printf或strtok,则应保留一些〜15kb。我假设您使用Freertos的HeaP_4.c分配策略。您可以使用最新版本的Freertos eacp_6.c返回OS_HEAP并分享.heap与newlib。

此致

PM_DIALOG.
离线
最后一次露面:5小时35分钟前
职员
加入:2018-02-08 11:03
嗨,迪特尔•福尔克

嗨,迪特尔•福尔克

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

谢谢,PM_DIALOG.

迪特尔•福尔克
离线
最后一次露面:5个月,3个星期前
加入:2019-10-12 33
你好,

你好,

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

并获取以下错误:

...pxp_reporter。/ /将RETENTION_RAM0插入到RETENTION_RAM0中
...' RetRAM0'溢出256字节

我也把buffer_size_up宏放在其中,但这没有任何改变。

如果您可以在您身边延长此问题并为此问题提供解决方案,那将是很棒的。谢谢!

此致

迪特尔

PM_DIALOG.
离线
最后一次露面:5小时35分钟前
职员
加入:2018-02-08 11:03
嗨,迪特尔•福尔克

嗨,迪特尔•福尔克

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

此外,工作的配置是什么以及不起作用的配置?

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

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

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

谢谢,PM_DIALOG.

迪特尔•福尔克
离线
最后一次露面:5个月,3个星期前
加入:2019-10-12 33
你好,

你好,

关于“PXP_Reporter”项目,我刚刚检查了我使用“da1468x_da15xxx_sdk_1.0.14.1081”的原始项目。

您唯一要更改的内容(要收到错误)就是增加行
#定义configTOTAL_HEAP_SIZE

把原来的定义改为16800。

我将Somected Custom_Config_qspi_suota.h文件放在此回复中,所以通常您应该能够在您的网站上重现此功能。我期待着你的结果。

此致
迪特尔

PM_DIALOG.
离线
最后一次露面:5小时35分钟前
职员
加入:2018-02-08 11:03
嗨幽默,

嗨幽默,

我在SDK的PXP_Reporter示例中使用了相同的Custom_Config_qspi_suota.h标题文件,但我无法复制此错误。此外,我还构建了Suota配置的项目,如果我执行任何其他步骤,以便除了您自己的Custom_config_qspi_suota.h之外,以便复制此错误吗?

谢谢,PM_DIALOG.

迪特尔•福尔克
离线
最后一次露面:5个月,3个星期前
加入:2019-10-12 33
能否提供

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

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

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

此致

迪特尔

PM_DIALOG.
离线
最后一次露面:5小时35分钟前
职员
加入:2018-02-08 11:03
嗨,迪特尔•福尔克

嗨,迪特尔•福尔克

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

//www.wsdof.com/雷电竞官网登录products/connectivity/bluetooth-low-energy/smartbond-da14682-and-da14683

您可以在一个新的SDK目录中尝试它吗?

谢谢,PM_DIALOG.