嗨,对话框中,
我在使用DA14681开发过程中,初始化一个2 k大小的缓冲区,定义如下:
PRIVILEGED_DATA缓冲区(2 * 1024);
编译后提示错误:...: ROM变量区域(从0x07FDC000开始)被RetRAM0溢出
如果去掉PRIVILEGED_DATA,编译通过,无错误。
手册中写到:
64kb One-Time-Programmable (OTP)内存
128kb具有保留功能的数据SRAM
16kb Cache SRAM具有保留功能
128kb ROM(包括启动ROM和BLE堆栈)
请问一下:
1. privileged_data修饰符的区别吗?
2. da14681官方是否有资料说明:系统的内存资源是如何分布吗?变量该如何添加对应修饰符,使其定义到指定的SRAM区域?
设备:
PRIVILEGED_修饰的数据和函数都是与FreeRTOS相关的,放在掉电保持RAM里。一般不建议随意使用。
关于SRAM的更多信息可以看一下嗯- b - 044 -软件平台参考文档里的第十节。关于PRIVILAGED修饰相关的信息也可以在该文档关于FreeRTOS里的部分找到。
需要指定变量定义的SRAM区域的话,可以查看代码里面_attribute_(())节相关的使用
PRIVILEGED_DATA是放在定义的heapsize里面的,如果需要这么大的空间的话,需要添加heapsize。
嗨,对话框
DA14681_SDK_V1.0.8,示例——pxp_reporter
#定义PRIVILEGED_DATA __attribute__((部分(“privileged_data_zi”)))
> > PRIVILEGED_DATA关键字定义的变量存放在“privileged_data_zi”区
在ldscripts——> sections.ld.h中找到“privieged_data_zi”定位在RENTION_RAM1中
同时我发现“os_heap”、“ble_msg_heap”、“ble_env_heap”、“ble_db_heap”、“retention_mem_zi”也放在RENTION_RAM1中
在配置- > custom_config_qspi.h中找到# define RETRAM_1_SIZE (32 * 1024)
如果在RENTIOIN_RAM1中放入的部分大小超过了RETRAM_1_SIZE编译就会报的错,
比如定义PRIVILEGED_DATA的变量或数组大时就会引起编译不通过
> >我想要知道的是,怎么样实现定义PRIVILEGED_DATA的变量能够更大,
比如按照以上的情况,定义PRIVILEGED_DATA缓冲区(2 * 1024)就编译通过,如何设置可以通过
对话框请工程师或开发681工程师提供一些解决方法或建议!!!
谢谢。
致以最亲切的问候。
在custom_config_qspi_suota.h文件中的
configTOTAL_HEAP_SIZE这个宏定义的就是我们整个工程的堆大小
然后你说的ram1这个则是在如下配置里面定义的
#define CODE_SIZE (128*2 * 1024)
#if (dg_configEXEC_MODE == MODE_IS_CACHED)
/ * DA14681-01
* RAM优先,RetRAM0紧随其后。在开头的时候添加了RetRAM1
*使用了优化的RetRAM配置(以便保留IVT)。
*/
#定义RETRAM_FIRST 0
#define RAM_SIZE (32 * 1024)
#if (proj_configOPTIMAL_RETRAM == 0) / /重新开始
#定义RETRAM_0_SIZE(96 * 1024) / / / /这里是我使用的配置
#define RETRAM_1_SIZE (0 * 1024)
其他#
#define RETRAM_0_SIZE (32 * 1024)
#define RETRAM_1_SIZE (32 * 1024)
# endif
# / /镜像
#error "QSPI镜像模式不支持!"
# endif
嗨Jun.xu,
非常感谢你这么快回复我的问题。
/*
*控制项目使用的retRAM大小。
* 0:保留所有RAM
* 1:保留内存大小是最佳的
*/
#定义proj_configOPTIMAL_RETRAM (1)
#定义dg_configMEM_RETENTION_MODE (0 x14英寸)
#定义dg_configSHUFFLING_MODE (0 x2)
在custom_config_qspi_suota.h中,你是怎么设置的,也说说这些的用途含义!!!
谢谢。
致以最亲切的问候。
嗨Jun.xu,
非常感谢你这么快回复我的问题。
/*
*控制项目使用的retRAM大小。
* 0:保留所有RAM
* 1:保留内存大小是最佳的
*/
#定义proj_configOPTIMAL_RETRAM (1)
#定义dg_configMEM_RETENTION_MODE (0 x14英寸)
#定义dg_configSHUFFLING_MODE (0 x2)
在custom_config_qspi_suota.h中,你是怎么设置的,也说说这些的用途含义!!!
谢谢。
致以最亲切的问候。
嗨Jun.xu,
非常感谢你这么快回复我的问题。
/*
*控制项目使用的retRAM大小。
* 0:保留所有RAM
* 1:保留内存大小是最佳的
*/
#定义proj_configOPTIMAL_RETRAM (1)
#定义dg_configMEM_RETENTION_MODE (0 x14英寸)
#定义dg_configSHUFFLING_MODE (0 x2)
在custom_config_qspi_suota.h中,你是怎么设置的,也说说这些的用途含义!!!
谢谢。
致以最亲切的问候。
proj_configOPTIMAL_RETRAM(1)这个表示休眠是否部分Ram掉电,然后我设置的是0表示Ram不会掉电
dg_configMEM_RETENTION_MODE (0 x14英寸)这个是使用默认设置,设置了proj_configOPTIMAL_RETRAM(0)就会有这个设置
#if (proj_configOPTIMAL_RETRAM == 0) / /重新开始
#定义dg_configMEM_RETENTION_MODE (0 x1f)
#定义dg_configSHUFFLING_MODE段(0 x3)
然后我对Ram的配置是
#define RAM_SIZE (32 * 1024)
#if (proj_configOPTIMAL_RETRAM == 0) / /重新开始
#define RETRAM_0_SIZE (96 * 1024)
#define RETRAM_1_SIZE (0 * 1024)
其他#
#define RETRAM_0_SIZE (32 * 1024)
#define RETRAM_1_SIZE (32 * 1024)
# endif
嗨Jun.xu /对话框中,
DA14681 RAM = 128 kb,查681年看数据表知道,RAM = 5个不同的RAM单元组成的(每个内存都支持保留)
RAM1 8 kb 0 x7fc0000 > > 0 x7fc0000n内存区必须设置为RetainedRam(保存中断向量表)
RAM2 24 kb 0 x7fc2000 > > RAM1, RAM2和RAM3占用空间大小可以通过dg_configSHUFFLING_MODE来修改
0 x7fc8000 RAM3 32 kb
0 x7fd0000 RAM4 32 kb
RAM5 32 kb 0 x7fd8000 > >必须设置为RetainedRam
dg_configMEM_RETENTION_MODE值的低5位对应RAM1——> RAM5,
0:关闭保留1:开启保留
根据DA14681数据手册中知道设置RAM为保留(睡眠状态下仍可以保存内存数据)将会影响待机功耗
所以设置合适的参数才会使得整个系统处于最佳状态
proj_configOPTIMAL_RETRAM
0:表示保留所有RAM
1:保持内存大小最优
一般情况下,会设置proj_configOPTIMAL_RETRAM = 1
如果我想要设置内存= 56 kb, RetRam = 72 kb, dg_configMEM_RETENTION_MODE应该怎么设置,还有还需要设置或修改什么参数
谢谢
致以最亲切的问候。
经过自己的实测、ram保留对功耗的影响并不会很大,如果你在内存里面放了部分代码的话。
(我就是在内存里面放了大量代码,然后我就必须Ram不掉电,但是我的功耗现在很低,底电流可以达到10 ua)
设置了proj_configOPTIMAL_RETRAM = 1的话,就会有默认的dg_configMEM_RETENTION_MODE = 0 x14的配置
我都是使用默认的。
只要3个内存的值和等于128年就好了。
如果你知道了dg_configMEM_RETENTION_MODE的相关配置方式,麻烦分享一下,谢谢!~
嗨Jun.xu /对话框中,
哦,RAM保留对功耗影响不大的话那就可以了
你说公放了大量代码是指什么(请解释下),代码不都是放在FLASH吗
关于dg_configMEM_RETENTION_MODE配置请查看
13.3保留RAM优化和配置
关于RAM的配置,我希望得到你更多的建议
谢谢
致以最亲切的问候。
14681年有一个16 k的缓存,如果选择了缓存模式,我们的代码就可以在缓存里跑,这样我的存放在flash里面的代码不管多大
我都没有问题。
然后常用的代码就放在内存里面,这样就可以减少从flash加载代码到缓存里面的时间,也可以降低功耗。
嗨Jun.xu /对话框中,
我想了解清楚点,哪些代码是放在内存里的,有没有什么关键字定义的,或者怎么设置代码放在RAM的,这个RAM是RetainedRam吗
然后就是常用的代码怎么定义到RAM中的
谢谢
致以最亲切的问候。