由于单片机本身内存的限制导致做较大项目时往往空间不够用,比如UI图片以及字库数据内部flash的空间往往远远不够,这时可以采用BOOTRAM和XIP两种方式实现运行外部程序
BootRAM:
从内部闪存启动,配置外部RAM存储器(SDRAM或SRAM),从代码存储区复制用户应用程序二进制文件(SDCARD或SPI-Flash存储器)连接到外部SDRAM或外部SRAM,然后跳转到用户应用程序。 用户应用程序代码应与目标执行存储器地址(外部SDRAM或SRAM)链接。
通俗来说就是单片机内部有一个RAM和一个内部flash,平时内部flash将程序转换成二进制文件拷贝到RAM中再来执行代码,BootRAM则是外挂一个SDRAM然后把外部的Flash或者SD卡等上面的程序转换成二进制文件然后拷贝到SDRAM中来执行。
XIP:
由于Norflash的擦除速度很慢并且成本较高往往不能做成大容量存储设备,但是Norflash的读取速度接近于RAM,而且Norflash可以内存映射因此程序不加载在RAM中直接在Flash上执行成为了可能,将需要动态改变的存储空间加载在内部RAM中,将实时性不需要很高的程序以及一些固定的数据放Norflash上,通过QPI或者QSPI来访问数据就可以实现直接在外部运行程序的目的,实现外部flash程序访问类似于IAP,通过一个BootLoad程序来加载外部程序来执行如下面所示
/* 5Initialize user application's Stack Pointer & Jump to user application */
JumpToApplication = (pFunction) (*(__IO uint32_t*) (APPLICATION_ADDRESS + 4));
__set_MSP(*(__IO uint32_t*) APPLICATION_ADDRESS);
JumpToApplication();