三大开发环境下的Standby RAM变量配置教程

描述

在嵌入式低功耗设计中,Standby RAM(待机保持内存)是芯片在深度休眠模式下仍能保持数据的关键硬件资源。但许多开发者苦于不同开发环境的配置差异,难以高效利用这一特性。

本文将以e2studio(瑞萨)、KEIL MDK(ARM)和IAR EW(IAR Embedded Workbench)三大主流开发环境为例,手把手教你在瑞萨RA6M4平台上实现“将变量精准分配至Standby RAM”的终极目标。对于其他内置Standby RAM的瑞萨RA系列MCU产品,均可参考本文的配置过程,并参考硬件手册做适当修改。本例中,Standby RAM的起始地址为0x28000000,大小为0x400。

Standby

01e2studio工程中

(1)在fsp.ld文件中添加以下内容,定义Standby RAM这部分区域:

Standby

 

Standby

(2)hal_entry.c中在R_BSP_WarmStart中添加以下内容,允许使用Standby RAM并进行初始化。

Standby

(3)代码编辑、编译&调试,并打开Memory窗口进行验证。

需要放置到Standby RAM区域的数据需要做特定的声明。例如:

uint8_t g_standby_ram_variable[512] BSP_PLACE_IN_SECTION(“.standby_ram”) = {0,1,2,3,4,5,6,7,8,9,10};

从下图中可以看到数组g_standby_ram_variable[512]的数据已经放在Standby RAM区域中。

Standby

     

02KEIL MDK工程中

(1)打开KEIL MDK工程,点击Option for Target

Standby

Target标签页Read/Write Memory Areas,定义一块区域

Standby

点击Linker标签页,取消链接勾选,自定义链接脚本,点击2处编辑

Standby

定义一片区域

Standby

(2)定义变量

uint8_t var00[10] __attribute__((section("SAMPLE_NAME_A")));

(3)代码中添加对这个变量的写入

Standby

(4)编译&调试,进行验证

从Memory窗口,可以看到放置在Standby RAM区域的变量被正常写入

Standby

03IAR EW工程中

(1)修改链接器配置文件(.icf)

在项目的链接器配置文件中定义Standby RAM区域和段:

define region STANDBY_RAM = mem:[from 0x28000000 to 0x280003FF];

define block STANDBY_BLOCK { section .standby_ram };

place in STANDBY_RAM { block STANDBY_BLOCK };

do not initialize { section .standby_ram};

(2)在代码中声明变量

使用__no_init关键字和#pragma location指令将变量分配到指定段:

#pragma location = ".standby_ram"

__no_init uint8_t g_standby_ram_variable[512];

(3)在用户代码中手动初始化,并赋值

Standby

(4)编译&调试,进行验证

从Memory窗口,确认变量地址和数值。

Standby

通过上述步骤,我们实现了三大开发环境下的Standby RAM变量配置。无论你使用e2studio、KEIL MDK还是IAR EW,核心逻辑始终一致:

编译器层:通过链接脚本隔离内存区域

代码层:结合复位类型检测实现按需初始化

 

 

 

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分