问题背景: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文件:
总结:
从需求的入手到问题的解决,最重要的收获是不要忽视官方提供的帮助文件。
当然反复实验自己的想法也是非常重要的~
最后祝大家身体健康~