⚠️
嗨,...感谢您来论坛。令人兴奋的消息!我们现在正在迁至我们的新论坛平台,将提供更好的功能,并包含在主对话框网站中。所有帖子和帐户都已迁移。我们现在只接受新论坛上的流量 - 请发布任何新线程//www.wsdof.com/support.我们将在未来几天修复bug /优化搜索和标记。
14个帖子/ 0新
最后发表
迪特尔•福尔克
离线
最后看到:5个月4周前
加入:2019-10-12 10:33
RetRAM0溢出

你好,

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

似乎我有一个内存布局的问题,编译器告诉我用尽内存,当需要超过32 KByte RAM。以下将显示:
app.elf部分`保留_ram0'不适合区域`retram0'
stram0 '溢出32个字节

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

的#define dg_configOPTIMAL_RETRAM(0)的#define dg_configMEM_RETENTION_MODE(0x1F的)的#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)

我从一个示例中使用了这个,我希望至少有约64千字的RAM。

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

我必须配置什么来获得最大值。在QSPI缓存模式下运行的BLE应用程序中的RAM大小?我想要保留完整的RAM。

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

dg_configblack_orca_ic_rev = black_orca_ic_rev_b dg_configblack_orca_ic_step = black_orca_ic_step_b

致以最亲切的问候
迪特尔

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

你好,

我刚刚认识到,它与Freertos堆的调整有关

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

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

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

#define buffer_size_up(45000)// target的终端输出的缓冲区的大小,最多为主机(默认值:1k)

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

调用: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;
if($ 0〜/ ^输出/)
再次= 0;
If (started == 1 && $0 ~ /^[[:alnum:]\.]/){
地址= strtonum(2美元);
size = strolum($ 3);
#if(地址!= 0 && size!= 0){
如果(大小! = 0){
if(地址first_address =地址;
if(地址> last_address)
last_address =地址;
printf (" % s; 0 X % 0 X %; 0 X %; % u; \ n”,1美元,地址、规模、地址+大小,大小);
total_size + =大小;


If (getline <= 0)
再次= 0;
} while(再次> 0);
printf(“总和;; 0x%x ;;%u; \ n”,total_size,total_size);
printf(“范围; 0x%x; 0x%x; 0x%x;%u; \ n”,first_address,last_address - first_address,last_address,last_address - first_address);
出口;

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

#gawk -f script.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)
#define __stack_size(16 * 1024)

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

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

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

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

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

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

我会尽快尝试脚本。

同时,你能告诉我Freertos Heap的部分吗?

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

- 是否正确64千字节是最大值。保留

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

致以最亲切的问候

迪特尔

PM_Dialog
离线
最后看到:7小时21分钟前
工作人员
加入:2018-02-08 11:03
嗨Dieter Falk,

嗨Dieter Falk,

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

谢谢,PM_Dialog

迪特尔•福尔克
离线
最后看到:5个月4周前
加入:2019-10-12 10: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总堆大小*/

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

调用: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 ++链接器C:/dialogsemi/smartsnippetsstudio2.0.10/gcc/4_9-2015q3/bin /../ lib / gcc / arm-none-eabi / 4.9.3 / ../../.././arm-none-eabi/bin/ld.exe: firmware.elf section `RETENTION_RAM0' will not fit in region `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

同样的问题发生在DEBUG和RELEASE build (DA14683-00-Debug_QSPI, DA14683-00-Release_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 - retream0 - BLERET)
#define configtotal_heap_size(47 * 1024)//这是freertos total堆大小,ucheap [] In .os_heap部分。请参阅xminimimimimimimimimimimimimoffreeByTesRemaining符号以了解从未使用过多少内存。
#define __heap_size(15 * 1024)// 15ko请参阅调试工具中的heapend符号 - __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) //所有保留的内存块

避免在执行期间关闭内存。

以你的情况,我建议

-提高RETRAM_0_SIZE

- 通过同一个amont抬起ram_size

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

致以最亲切的问候

PM_Dialog
离线
最后看到:7小时21分钟前
工作人员
加入:2018-02-08 11:03
嗨Dieter Falk,

嗨Dieter Falk,

您是否正在运行我们的任何SDK项目?你能帮我在我身边复制吗?将buffer_size_up宏设置为45000后,您的问题是否解决了?

谢谢,PM_Dialog

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

你好,

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

并得到以下错误:

...pxp_reporter。/ /将RETENTION_RAM0插入到RETENTION_RAM0中
......“retram0”溢出256字节

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

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

致以最亲切的问候

迪特尔

PM_Dialog
离线
最后看到:7小时21分钟前
工作人员
加入:2018-02-08 11:03
嗨Dieter Falk,

嗨Dieter Falk,

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

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

您是否在PXP_Reporter项目中完成了任何其他修改?

在您的初始帖子中,我看到了您使用的是非最佳配置。在此配置期间,Freertos HeaP将放置在Retram_0中,并且在使用后退_1时,将在此处放置。

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

谢谢,PM_Dialog

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

你好,

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

你唯一需要改变的事情(得到错误)是增加行
#define configtotal_heap_size.

把原来的定义改为16800。

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

致以最亲切的问候
迪特尔

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

嗨Detier,

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

谢谢,PM_Dialog

迪特尔•福尔克
离线
最后看到:5个月4周前
加入:2019-10-12 10:33
能否提供

您能否提供哪个SmartSnippet版本,以及您用于此测试的SDK?

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

我可以尝试在另一台电脑上安装安装并在我身边再次检查。对于此操作,我需要您的反馈,您正在使用您使用的版本。

致以最亲切的问候

迪特尔

PM_Dialog
离线
最后看到:7小时21分钟前
工作人员
加入:2018-02-08 11:03
嗨Dieter Falk,

嗨Dieter Falk,

我正在使用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