1、 文檔目標
記錄Error編號為L6220E的Link錯誤并給予解決方案,供相關同事參考解決此類問題。
2、 問題場景
客戶在使用STM32F1的項目編譯時遇到下列報錯Error: L6220E: Load region LR_IROM1 size(65552 bytes)。

圖2-1
3、軟硬件環境
1)、軟件版本:MDK5.38
2)、電腦環境:Windows 11
3)、外設硬件:無
4、解決方法
1)、原因1:分配給此負載區域的數據過多。一個加載區域可以由多個執行區域組成,這些執行區域包含一個或多個 RO、RW、XO 或 ZI 數據部分
解決方案1.1:目標設備參考手冊中的內存映射詳細信息,查看是否有可能增加為此負載區域定義的最大允許大小,例如,特定內部閃存或 RAM 內存區域中仍有剩余空間。如果是,請在 uVision 的"Options for Target - Target"”中修改如下圖4-1所示或您自己的散點文件中增加為此加載區域定義的大小。

圖4-1
解決方案1.2:檢查 uVision 自動生成的鏈接器分散文件或您自己的分散文件,看看是否可以將此特定加載區域的某些執行區域的分配更改為另一個加載區域
解決方案1.3:提高代碼的優化等級,將Arm 編譯器優化級別更改為 -O3、-Oz 或 -Omin,以便 Arm 編譯器生成較小的代碼大小,在某些情況下可能會解決此鏈接器錯誤。
2)、原因2:如果 .在此負載區域中使用/分配任何部分,具體取決于算法用于填充此類 .任何部分,鏈接器生成的內容(如填充物和貼面)都可能過度填充該區域,從而導致此鏈接器錯誤 L6220E。
解決方案 2.1:使用--any_contingencylinker 選項,以防止鏈接器將區域填充到最大值。
解決方案 2.2:使用執行區域屬性ANY_SIZE max_size指定 Armlink 可以用未分配的部分填充的區域中的最大大小。
3)、原因3:如果某些數據故意放置在特定地址/位置(靠近此特定加載區域的末尾),則在某些情況下可能會導致此鏈接器錯誤 L6220E,本文對此進行了介紹ARMLINK:L6220E ...超出限制,如果將數據放在閃存末尾
注:原因2與原因3暫未遇到,均為原因1所導致的錯誤,檢查內存分配大小即可解決,提高優化等級也可行。
以上參考原廠說明鏈接:錯誤:L6220E:加載區域 xxx 大小(xxx 字節)超出限制(xxx 字節) (arm.com)

首頁 > 資源中心 > FAQ
