1、 文檔目標
在嵌入式系統開發中,通過MDK(Microcontroller Development Kit)進行工程配置,將指定的變量存儲到指定的內存地址上是一項非常重要的技術。這項操作不僅能夠滿足特定硬件架構的需求,還能優化系統的性能和資源利用率。本文將詳細探討如何通過MDK的工程配置實現這一目標,并從多個角度分析其背后的原理、應用場景以及注意事項。
2、 問題場景
在項目工程的開發過程中,通常需要對Flash、SRAM等存儲器進行分區規劃,以滿足不同的功能需求。例如:
● Bootloader與應用程序分離:為了支持固件升級,通常需要將Bootloader代碼與應用程序代碼分別存儲在不同的Flash區域。
● 關鍵數據存儲:某些關鍵變量(如校準參數、設備狀態等)需要存儲在特定的非易失性存儲區域,以便在系統斷電后仍能保留。
● 性能優化:將頻繁訪問的變量放置在高速緩存或特定的RAM區域,可以顯著提升系統性能。
因此,如何通過MDK工具鏈將變量精確地映射到指定的內存地址,成為嵌入式開發中的一個常見需求。
3、軟硬件環境
1)、軟件版本:MDK 5.38a
2)、電腦環境:Windows 11
3)、外設硬件:無
4、解決方法
1)、首先,需要在Options->Target中去規劃出一個內存地址(如圖4-1),在Read/write Memory Areas中的RAM1中去設置內存的起始地址和內存的大小。并且勾選上前面的default。

圖4-1
2)、然后,切換在Linker欄中。取消勾選Use Memory Layout from Target Dialog,讓μVision不根據Target和Properties對話框中提供的內存信息創建一個鏈接器分散文件。而由下面的Scatter Flies中去定義分散加載文件的內存劃分。點擊Edit...可以去編輯文件。(如圖4-2)

圖4-2
3)、在打開的分散加載文件中,去定義剛才在Target中規劃的內存地址。如圖4-3中的紅框處。將這個內存段用sdram_area字段來標識。

圖4-3
4)、然后,在源文件中,將利用宏定義去用SDRAM_AREA_ATTRIBUTES標識符去標識__attribute__((section("sdram_area")))語句。在使用的時候,就可以按照下面代碼段中的方式去使用。
#define SDRAM_AREA_ATTRIBUTES __attribute__((section("sdram_area")))
int SDRAM_AREA_ATTRIBUTES test_num = 10;
char buf[20]SDRAM_AREA_ATTRIBUTES;
5)、定義好變量后,在源文件中調用了該變量后,可以在Map文件中看到定義的變量目前存儲在指定的地址上。(如圖4-5)

圖4-5

首頁 > 資源中心 > FAQ
