现有一个1MB的bootloader存储在外部flash中,但内部SRAM只有32KB,只有这个RAM
请问,我想把这个bootloader运行起来,有什么办法吗?
比如只在需要运行某些代码时才加载?有这种吗?叫什么技术名称?
------解决方案--------------------
亲,你的bootloader这么那么大?你是不是把logo图片编译到bootloader里了?搞小点啊
内部SRAM一般是用作上电后,自动加载bootloader的一部分用的,比如初始化内部寄存器,拷贝剩下的bootloader到外部ram里,然后把操作权交给他去做剩下的工作
------解决方案--------------------
叫什么读时复制技术。这样能用小内存运行大程序。
------解决方案--------------------
亲,你听谁说过一个已经编译完整的映像可以想怎么运行就怎么运行的呀?
------解决方案--------------------
有几个概念先要弄清楚:
如果flash是NOR flash,那么是不需要sram的。cpu直接可以像读内存一样,在flash读指令执行,这被称作xlp。
如果闪存是NAND,SPI甚至I2C的接口启动,那么cpu内部会有一个微控制器和一个至少4k的sram,还有微控制器需要一个rom来放微码(包含读取前述接口的驱动),这些微码指挥微控制器,在第一条闪存指令之前就会去访问闪存,把前4k读到sram,然后从sram执行。
不知道你说的32ksram是指这个么?
------解决方案--------------------
如果你的cpu支持从spi的flash启动(这就和nor flash没有区别了),那么狠好办了,在编译脚本中将数据段指定到sram、代码段指定到flash上,和XIP技术比较类似。这个工作要求你对相关编译工具所采用的编译脚本比较熟悉,但一定是可以实现的。