由于单片机本身内存的限制导致做较大项目时往往空间不够用,比如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();

 

 

posted on 2022-04-16 18:14  薛定谔我的猫  阅读(394)  评论(0编辑  收藏  举报