問題背景:stm32F103zd芯片開發代碼,內部RAM不足,需要使用外部RAM。
開發工具:IAR集成開發軟件。
關鍵文件:IAR內存分配文件*.icf配置文件;MAP映射文件。
修改目的:同時使用內部RAM和外部RAM。
以下為內部RAM內存分配文件:
圖中RAM的地址為:0x20000000-0x20010000,一共64K。
修改方案:
增加一塊512kb外部RAM,RAM地址為0x60000000. 這樣就有兩塊RAM,地址為:0x20000000和0x60000000
參考IAR官方自帶的開發手冊《IAR C/C++ Development Guide》查詢icf中使用的關鍵字及語法。
參考MAP文件,查看調整的編譯地址結果。
難點:
1. 如何定義使用兩塊RAM:
其中同時使用2塊RAM的語法有3中“&, |, -”,具體的意義請查閱《IAR C/C++ Development Guide》。
2.如何保證兩塊內存同時被使用:
上面兩句為指定MAP文件中.bss和.data塊的地址。附上definition:
這兩塊內容均屬於RAM{readwrite}區域。
可以看到MAP中的內存分配確實同時使用到了兩塊RAM:
3. 使用外部RAM,代碼是否需要修改?
如果該代碼為app層,且已存在boot層,則代碼部分不必修改,因為在boot層中已經對RAM做了相應的初始化。(當然,RAM的初始化需要符合外部RAM的使用條件)
如果代碼為boot+app的集成,則需要配置好SRAM_Init()函數。
最后附上修改后的ICF文件:
總結:
從需求的入手到問題的解決,最重要的收獲是不要忽視官方提供的幫助文件。
當然反復實驗自己的想法也是非常重要的~
最后祝大家身體健康~