CN / EN
CN / EN

提问

获得支持

您的项目私密技术问题如需获得一对一支持,请点击下方联系我们。

GR551X SDK开发如何配置复位不清零RAM区域 GR551x

已解决

Ping

汇顶员工
2021-11-04 14:49

机器复位重启后,需要记录部分数据在开机后进行恢复,或者保存部分日志信息用于分析异常复位原因,对于该需求有两种方式可以实现:

1. 复位前把相关数据写入Flash保存,例如NVDS区域;

2. 复位前把数据保存在特定的RAM区域,该部分RAM区域数据不受复位影响;

PS: GR551X不支持通过寄存器查询复位原因。

配置复位不清零RAM区域方法如下(基于1.6.10版本SDK):

1. 在custom_config.h中增加以下宏定义代码

2. 在toolchain\gr551x\source\arm\flash_scatter_common.sct文件中定义复位不清零区域RAM空间

UNUSED_RAM_SECTION AlignExpr(+0, 32) EMPTY UNUSED_SECTION_SIZE {

修改为:

UNUSED_RAM_SECTION AlignExpr(RST_KEEP_RAM_START_ADDR, ALIGN_WORD) EMPTY RST_KEEP_RAM_SIZE {

.ANY(NO_INIT)


3. 代码使用示例如下:

static uint32_t ram_test_data __attribute__( (
section( "NoInit"),zero_init));

























void ram_test(void)

{

ram_test_data ++;

APP_LOG_INFO("ram_test_data:%x",ram_test_data);

if(!(ram_test_data%3))

{

sys_delay_ms(800);

hal_nvic_system_reset();

}

}

备注:1.6.12之后的版本,SDK已默认支持复位不清零的RAM空间分配及使用:

1. flash_scatter_config.h定义RAM空间大小

#define RAM_RESERVE_SECTION_SIZE    0x64

2. flash_scatter_common.sct文件定义名称修改如下:

RAM_RESERVE AlignExpr(+0, 32) UNINIT RAM_RESERVE_SECTION_SIZE {

.ANY(RAM_RESERVE)

}

2. gr55xx.h文件定义如下:

#ifndef RESERVE_RAM_SECTION#if defined ( __CC_ARM )#define RESERVE_RAM_SECTION __attribute__((section("RAM_RESERVE"),zero_init))   /**< To prevent doxygen from misidentifying the function name */#endif#endif


2收藏

2赞成

最佳答案

Ping

汇顶员工
2022-01-20 16:44


8条评论

1赞成

0收藏

您的评论

登录后可回答问题,请 注册

我们时刻倾听您的声音
联系销售

扫描关注公众号

打开微信,使用“扫一扫”即可关注