在嵌入式低功耗設計中,Standby RAM(待機保持內存)是芯片在深度休眠模式下仍能保持數據的關鍵硬件資源。但許多開發者苦于不同開發環境的配置差異,難以高效利用這一特性。
本文將以e2studio(瑞薩)、KEIL MDK(ARM)和IAR EW(IAR Embedded Workbench)三大主流開發環境為例,手把手教你在瑞薩RA6M4平臺上實現“將變量精準分配至Standby RAM”的終極目標。對于其他內置Standby RAM的瑞薩RA系列MCU產品,均可參考本文的配置過程,并參考硬件手冊做適當修改。本例中,Standby RAM的起始地址為0x28000000,大小為0x400。

01e2studio工程中
(1)在fsp.ld文件中添加以下內容,定義Standby RAM這部分區域:


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

(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區域中。

02KEIL MDK工程中
(1)打開KEIL MDK工程,點擊Option for Target

Target標簽頁Read/Write Memory Areas,定義一塊區域

點擊Linker標簽頁,取消鏈接勾選,自定義鏈接腳本,點擊2處編輯

定義一片區域

(2)定義變量
uint8_t var00[10] __attribute__((section("SAMPLE_NAME_A")));
(3)代碼中添加對這個變量的寫入

(4)編譯&調試,進行驗證
從Memory窗口,可以看到放置在Standby RAM區域的變量被正常寫入

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)在用戶代碼中手動初始化,并賦值

(4)編譯&調試,進行驗證
從Memory窗口,確認變量地址和數值。

通過上述步驟,我們實現了三大開發環境下的Standby RAM變量配置。無論你使用e2studio、KEIL MDK還是IAR EW,核心邏輯始終一致:
編譯器層:通過鏈接腳本隔離內存區域
代碼層:結合復位類型檢測實現按需初始化
-
嵌入式
+關注
關注
5189文章
20192瀏覽量
329548 -
RAM
+關注
關注
8文章
1398瀏覽量
119890 -
瑞薩
+關注
關注
36文章
22437瀏覽量
89904 -
開發環境
+關注
關注
1文章
254瀏覽量
17562 -
Standby
+關注
關注
0文章
5瀏覽量
7368
發布評論請先 登錄
python環境變量的配置pip
【HiSpark系列】重磅 HarmonyOS官方三大開發套件HiSpark首場開箱直播
又一國產AI平臺重大升級,三大開發套件發布!
瑞芯微電子正式面向全球AI開發者發布三大開發套件 提升開發便利性
如何在Eclipse開發環境下配置OpenCV

三大開發環境下的Standby RAM變量配置教程
評論