本帖最后由 TECHWELL 于 2016-4-3 14:01 编辑
让一部分程序在STM32F429外扩SDRAM中运行?
我的配置如下:
主CPU = STM32F429;
1MB 内部Flash;
32MB 外扩SDRAM;
8MB SPI 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中的某地址段是“可执行”的,这个,估计不难
|