
Flash 函数即在 SDK 中未加特定属性段名、或默认标记为.text段的函数的加载时间点是“运行时按需加载On-demand Loading”也就是只有当代码真正被调用执行到的那一刻才会加载。以下是具体的加载流程与工作机制拆解一、 Flash 函数的完整加载流程1. 系统上电阶段不加载当芯片刚开机初始化时SDK 只会把 Common RAM 函数如标记了.comm_text的代码一次性从 Flash 搬运到 Common RAM 中。对于 Flash 函数上电时完全不做任何搬运它们依然原封不动地躺在外部 Flash 芯片里。2. 函数被调用时动态加载到 Cache RAM当程序运行CPU 的指令指针PC跳转到某个 Flash 函数时硬件层会发生以下动作查找 Cache芯片的 Cache 控制器首先检查Cache RAM里是否已经有这个 Flash 函数的代码。命中Cache Hit如果这段代码之前刚执行过且尚未被替换CPU 直接在Cache RAM中运行它速度极快。未命中Cache Miss即触发加载如果Cache RAM里没有这段代码CPU 暂停执行指令。芯片内部的SPI / QSPI XIP 控制器会立刻通过SPI 总线触发一次读取操作。硬件自动将 Flash 中该函数对应的代码块以 Cache Line 为单位加载读入到 Cache RAM 中。加载完成后CPU 继续在 Cache RAM 里运行这段代码。3. 函数运行结束可能被替换当这个 Flash 函数执行完毕代码依然会保留在 Cache RAM 里一段时间。如果后续程序调用了其他Flash 函数且 Cache RAM 空间满了旧的代码就会被擦除/覆盖淘汰机制。下次如果再次调用原来的函数芯片又会重新从 Flash 加载一次。二、 场景模拟帮助理解Common RAM 函数就像“常备药品”。开医务室上电第一天就全部买好放在抽屉Common RAM里随时伸手就能拿永不丢弃。Flash 函数就像“冷门外卖”。平时放在仓库Flash里不占地方只有当客人下单点这道菜CPU 调用函数时骑手SPI 总线才临时跑去仓库把菜送过来加载到 Cache RAM如果桌子Cache RAM满了这盘菜就会被撤走下次点还要重新送。三、 SDK 中三种函数的加载时机对比函数类型SDK 段名标记示例存储位置什么时候加载到 RAM执行效率MaskROM 函数无芯片固化芯片内部 MaskROM无需加载直接在 ROM 运行极高Common RAM 函数__attribute__((section(.comm_text)))或类似宏常驻 Common RAM开机上电初始化时只加载 1 次极高Flash 函数无加段名或默认.text外部 Flash运行时每次 Cache 未命中时按需动态加载较慢有延迟开销