打印
[嵌入式linux]

让一部分程序在STM32F429外扩SDRAM中运行?

[复制链接]
2627|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
TECHWELL|  楼主 | 2016-4-3 13:41 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 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中的某地址段是“可执行”的,这个,估计不难

相关帖子

沙发
zhouzpd| | 2019-4-25 21:37 | 只看该作者
没有人回答

使用特权

评论回复
板凳
wono01| | 2019-4-26 11:17 | 只看该作者
本帖最后由 wono01 于 2019-4-26 11:27 编辑

最简单的方法使用类似于IAP升级编译方法,分成两部分进行编译。应用部分设置为sdram基地址。

使用特权

评论回复
地板
airwill| | 2019-4-26 22:27 | 只看该作者
编译器配置里,把 SDRAM 地址空间放到 ROM 空间,连接时调整一下顺序也可以实现。

使用特权

评论回复
5
Globalizex| | 2019-5-7 16:01 | 只看该作者
STM32其实是可以外置一个SRAM 可以搞定的,32MB SRAM 是否太大了?

使用特权

评论回复
6
sometimesno1| | 2019-5-9 09:25 | 只看该作者
建议参考一下patch机制实现

使用特权

评论回复
7
R2D2| | 2019-5-10 18:25 | 只看该作者
SDRAM是给LCD控制器用的吧,连地址都不在编址空间内。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

22

主题

74

帖子

6

粉丝