⚠️
大家好. .谢谢你来参加论坛。令人兴奋的消息!我们现在正在转移到新的论坛平台,它将提供更好的功能,并包含在Dialog主网站中。所有的帖子和账户都已迁移。我们现在只接受新论坛的流量-请张贴任何新的线程//www.xmece.com/support.我们将在未来几天修复漏洞/优化搜索和标签。
14个职位/ 0个新
最后发表
迪特尔•福尔克
离线
最后看到:1年7个月前
加入:2019-10-12 33
RetRAM0溢出

你好,

我在评测板上使用DA14683设备和实际的SDK和工具。

似乎我有一个问题的内存布局,编译器告诉我运行的内存,当需要超过32千字节的RAM。将展示以下内容:
App.elf区域“RETENTION_RAM0”不适合区域“RetRAM0”
RetRAM0'溢出32字节

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

#define dg_configOPTIMAL_RETRAM (0) #define dg_configMEM_RETENTION_MODE (0x1F) #define dg_configQSPI_CACHED_RETRAM_0_SIZE_AE (61 * 1024) #define dg_configqspi_cached_retram_size _ae (67 * 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

致以最亲切的问候
迪特尔

关键词:
设备:
迪特尔•福尔克
离线
最后看到:1年7个月前
加入:2019-10-12 33
你好,

你好,

我刚刚意识到,这与FreeRTOS堆的调整有关

/*************************************************************************************************\ * 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 hex文件名187380 216 75556 263152 403f0

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

致以最亲切的问候

迪特尔

bobspam@free.fr
离线
最后看到:1年4个月前
加入:2018-06-20 08:07
你好

你好

DA14683的内存映射相当复杂。

请找到我在地图文件上使用的一个小awk脚本,它是由编译器生成的,用于定位各个部分


Started = 0;
再次= 1;
Total_size = 0;
First_address = (2^32) - 1;
Last_address = 0;
printf(";开始;规模;结束;规模;\ n”);
{做
If ($0 ~ /memory map/)
Started = 1;
if($0 ~ /^OUTPUT/)
同样= 0;
If (started == 1 && $0 ~ /^[[:alnum:]\.]/){
地址= strtonum($2);
大小= strtonum($3);
# if(address != 0 && size != 0){
If (size != 0){
If (address < first_address)
First_address =地址;
If (address > last_address)
Last_address =地址;
printf (" % s; 0 X % 0 X %; 0 X %; % u; \ n”,1美元,地址、规模、地址+大小,大小);
Total_size += size;


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

将其写入脚本。Awk文件然后运行

#gawk -f脚本。awk yoursoftware.map

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

然后下一步是确定哪个堆/堆栈在哪里,这样你就有机会调整每个堆/堆栈的大小。

在我这边,我在custom_config_qspi.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的总和
#定义__HEAP_SIZE (24 * 1024)
#定义__STACK_SIZE (16 * 1024)

而且

这是FreeRTOS的堆总大小*/

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

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

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

迪特尔•福尔克
离线
最后看到:1年7个月前
加入:2019-10-12 33
大家好,非常感谢

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

我会尽快尝试你的剧本。

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

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

64kbyte是最大值,对吗?保留

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

致以最亲切的问候

迪特尔

PM_Dialog
离线
最后看到:4个月2周前
工作人员
加入:2018-02-08 11:03
你好,迪特·福尔克,

你好,迪特·福尔克,

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

谢谢,PM_Dialog

迪特尔•福尔克
离线
最后看到:1年7个月前
加入: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) # define 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总堆大小* /

这是有效的,我的链接器输出是:

调用Cross ARM GNU创建Flash图像调用Cross ARM GNU打印大小文本数据bss dec hex filename 178900 212 32680 211792 33b50

当我增加configTOTAL_HEAP_SIZE到(16 * 1024),然后链接器失败我得到以下输出:

调用:Cross ARM c++连接器C:/dialogsemi/smartsnippetsstudio2.0.10/gcc/4_9-2015q3/bin/../lib/gcc/ ARM -none-eabi/4.9.3/../../../ ARM -none-eabi/bin/ ldap .exe:固件。精灵节“RETENTION_RAM0”不适合区域“RetRAM0”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-Release_QSPI)

致以最亲切的问候

迪特尔

bobspam@free.fr
离线
最后看到:1年4个月前
加入:2018-06-20 08:07
你好

你好

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

#define dg_configQSPI_CACHED_RETRAM_0_SIZE(96 * 1024) //包含ucHeap[]即.os_heap即FreeRTOS Heap。
#定义dg_configQSPI_CACHED_RETRAM_1_SIZE(0 * 1024) //该section中没有数据
#定义dg_configQSPI_CACHED_RAM_SIZE (32 * 1024) // .bss, .heap, .stack的总和。(128k - RETRAM0 - BLERET)
#define configTOTAL_HEAP_SIZE(47 * 1024) //这是FreeRTOS的堆总大小,ucHeap[]在.os_heap部分。请参阅xMinimumEverFreeBytesRemaining符号以了解有多少内存从未使用过。
#define __HEAP_SIZE (15 * 1024) // 15ko查看调试工具- __HeapBase .map文件中的heapend符号。使用端口堆溢出验证来检查大小。newlib需要(printf, strtok是高消耗)
#define __STACK_SIZE (1 * 1024) // 1ko: __StackTop in .map file - m0的MSP寄存器。仅在引导时使用,不能为空。

我还用

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

避免在执行过程中内存开关关闭。

就你的情况而言,我建议

-提高RETRAM_0_SIZE

-向下提升RAM_SIZE相同的数量

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

致以最亲切的问候

PM_Dialog
离线
最后看到:4个月2周前
工作人员
加入:2018-02-08 11:03
你好,迪特·福尔克,

你好,迪特·福尔克,

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

谢谢,PM_Dialog

迪特尔•福尔克
离线
最后看到:1年7个月前
加入:2019-10-12 33
你好,

你好,

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

并得到以下错误:

...pxp_reporter。精灵节“RETENTION_RAM0”不适合区域“RetRAM0”
...' RetRAM0'溢出256字节

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

这将是伟大的,如果你能在你这边重现这一点,并为这个问题提供一个解决方案。谢谢你!

致以最亲切的问候

迪特尔

PM_Dialog
离线
最后看到:4个月2周前
工作人员
加入:2018-02-08 11:03
你好,迪特·福尔克,

你好,迪特·福尔克,

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

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

您是否对pxp_reporter项目做了其他修改?

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

如果您将总堆大小(configTOTAL_HEAP_SIZE)增加到22000,会有任何影响吗?

谢谢,PM_Dialog

迪特尔•福尔克
离线
最后看到:1年7个月前
加入:2019-10-12 33
你好,

你好,

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

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

用16800代替原来的定义。

我把我改编的custom_config_qspi_suota.h文件放在这个回复中,所以通常你应该能够在你的站点上重现这个。我期待着你的成绩。

致以最亲切的问候
迪特尔

PM_Dialog
离线
最后看到:4个月2周前
工作人员
加入:2018-02-08 11:03
嗨Detier,

嗨Detier,

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

谢谢,PM_Dialog

迪特尔•福尔克
离线
最后看到:1年7个月前
加入:2019-10-12 33
您能否提供

能否提供本次测试使用的是哪个SmartSnippet Version,以及哪个SDK ?

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

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

致以最亲切的问候

迪特尔

PM_Dialog
离线
最后看到:4个月2周前
工作人员
加入:2018-02-08 11:03
你好,迪特·福尔克,

你好,迪特·福尔克,

我使用的是SDK_1.0.14和SmartSnippets Studio v.1.6.3。该版本可在DA14682/683产品页面的“开发工具”部分中获得。

//www.xmece.com/亚博电竞菠菜products/connectivity/bluetooth-low-energy/smartbond-da14682-and-da14683

你能在新的SDK目录下试试吗?

谢谢,PM_Dialog