XIP就地执行:让程序 “原地打工”,嵌入式开发效率直接拉满!

单片机中的存储单元可大致分为两类:

  1. RAM:程序运行中所用到的需要被改写的量,都存储在 RAM 中;

  2. ROM:主要用于存放指令代码和一些固定数值,程序运行后不可改动。例如 c 文件及 h 文件中所有代码、全局变量、局部变量、'const'限定符定义的常量数据、startup.asm 文件中的代码均存储在 ROM 中。

FLASH 存储器又称闪存,它结合了 ROM 和 RAM 的长处,不仅具备电子可擦除可编程(EEPROM)的性能,还不会断电丢失数据同时可以快速读取数据,过去的嵌入式系统一直使用 ROM(EPROM)作为它们的存储设备,然而近年来 Flash 已经全面代替了 ROM 在嵌入式系统中的地位。

在单片机 ​​执行代码的过程中,通常需要将ROM/外部闪存中的代码读取到RAM​缓冲区中,然后再顺序执行。​ 然而,现如今许多 NOR ​QSPI​ FLASH 都支持 XIP (eXecute In Place)就地执行功能,在这种模式下,嵌入式MCU芯片可以直接从 NOR QSPI FLASH 中取指令,供后面的译码器和执行器来使用而不必再把代码读到 RAM 中 。简单来说,XIP 是一种能够直接在闪速存储器中执行代码而无须装载到 RAM 中执行的机制,这样就减少了内核从闪速存储器拷贝到 RAM 的时间。

在对树莓派 Pico 烧录自己开发的应用程序时,是先烧写到外部 Flash 中,然后在芯片启动时,其内部的 ROM 中的 bootloader 通过 XIP/Cache 加载程序执行。

QSPI​ 接口实现 XIP 功能​:是工厂的 "外部仓库直达通道"------ 通过 QSPI 接口连外部闪存(相当于 "外部大仓库"),XIP 功能让芯片能直接从外部仓库读程序,不用先把程序搬到内部临时仓库,节省内部空间。