让一部分程序在STM32F429外扩SDRAM中运行?
本帖最后由 TECHWELL 于 2016-4-3 14:01 编辑让一部分程序在STM32F429外扩SDRAM中运行?
我的配置如下:
主CPU = STM32F429;
1MB内部Flash;
32MB 外扩SDRAM;
8MBSPI FLASH(W25Q64)
运行大块头的GUI软件时,编译后的代码超过了1MB,内部Flash不够用了。
选用更大Flash的STM32F429当然是最省事的办法,可是,咱差钱啊。批量生产,那可是很大的代价。
我的系统中,32MB的SDRAM,是有福余的。那么,是否可以,让一部分程序在外扩的SDRAM中运行呢?
我想,在编译时,让某些非关键函数的代码,定位在SDRAM中。自动或者手动地,生成2个HEX文件,
第一个HEX直接写入CPU内部Flash;第二个HEX文件,写入SW25Q64(有文件系统FATFS支持)。
上电后,执行第一个HEX时,把W25Q64中的第二个HEX代码,Move到SDRAM中...
我不愿意让全部的代码运行在SDRAM中,因为那样浪费了内部Flash,更关键的是,在外扩的SDRAM中执行程序,速度不好!
如果,让全部的代码运行在SDRAM中运行,那倒是好办不少,做个Loader...
这其中有n个问题。
1.如何让编译器,把我们指定的(比如某函数,或者某文件模块)执行代码,定位在SDRAM中?
2.如何让编译器,生成2个HEX文件?否则,就只能手动分割HEX,那想必是痛苦的。
3.调试时,如何让Jlink下载第二个HEX到SDRAM中?
4.设置STM32F429 MPU,使得SDRAM中的某地址段是“可执行”的,这个,估计不难
没有人回答 本帖最后由 wono01 于 2019-4-26 11:27 编辑
最简单的方法使用类似于IAP升级编译方法,分成两部分进行编译。应用部分设置为sdram基地址。
编译器配置里,把 SDRAM 地址空间放到 ROM 空间,连接时调整一下顺序也可以实现。 STM32其实是可以外置一个SRAM 可以搞定的,32MB SRAM 是否太大了? 建议参考一下patch机制实现 SDRAM是给LCD控制器用的吧,连地址都不在编址空间内。
页:
[1]