打印

发个求助贴 关于STM32H750,自己做boot处理分段加载

[复制链接]
435|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
冰糖炖雪梨|  楼主 | 2018-8-9 20:40 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
有用到STM32H750VB这个芯片,内部是128Kflash,这个flash用来做boot程序(自己写的),QSPI口有接,但是不是接的QSPI flash,而且也没打算把程序放到QSPI口的存储器上,程序打算放到内部的AXI RAM,总共512K,但是程序还是少了一些,所以打算把SRAM1 SRAM2的256K也用上。
这里就遇到一个些疑惑:
传说中的__main函数是负责初始化堆栈,以及分段加载代码的加载到指定位置,对,就是这里让我很疑惑,__main初始化堆栈,这个我没有异议,但是__main真的做了程序分段加载这个事情吗?
如果它确实在做了这个分段加载的事情,它加载程序的源在哪里?目标位置又在哪里?
根据以前的知识了解,映像文件里,除了一开始的中断向量表,就是接下来的实体程序内容了,实体程序内容当然也包括__main这个函数的内容,__main应该不会每次编译都重新生成编译一次,所以,__main,理论上,是不应该知道生成的那一堆实体程序,到底哪部分该搬运到哪里去。
而且,以以前使用别的芯片的经验,比如LPC系列的单片机,也是用keil开发,也包含__main,但是芯片的flash是分为两个分离地址的内部flash,烧录的时候,keil是调用不同的FLM文件进行烧录的。我们假设,__main确实包含了分段程序加载能力,那么它要加载的目标位置是flash,__main属于标准库一类的函数,就算能加载,也应该是使用一些类似memcpy之类的函数,根本不具备能力,操纵flash。
所以,擦侧,__main,只是具备初始化堆栈以及全局变量的能力,不具备分段程序加载的能力。
望有懂这一块的大佬赐教。

使用特权

评论回复

相关帖子

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

本版积分规则

430

主题

436

帖子

0

粉丝