程序是运行在flash中还是RAM中?
前言最近在做项目中遇到一些疑虑,包括OTA升级时会不会阻塞到其他工作线程、select原理和正确用法、如何快速正确理解产品到软件框架构建、嵌入式应用的代码优化方法。本篇文章主要针对第一个问题,请教外援,他解释:正常情况下代码是在OTA1中运行的,当OTA时程序下载固件到OTA2成功后从flash中OTA2对应地址启动。当时觉得不对劲,程序怎么会在flash中运行?查了下,对于x86的pc机和单片机等嵌入式开发系统程序的存储是截然相反的。 x86cpu和单片机读取程序的具体途径x86的PC机cpu在运行时程序是存储在RAM中,而单片机等嵌入式系统则是存在flash中的。 原因分析x86构架的cpu是基于冯.诺依曼体系的,即数据和程序存储在一起,而且pc机的RAM资源相当丰富,从几十M到几百M甚至是几个G,客观上能够承受大量的程序数据。 小结STM32支持两种方式,它是由两个引脚来控制启动方式的,通常是下载到flash启动;用jlink在线仿真,则是下载到SRAM中,无需改变启动方式SRAM掉电后程序会自动消失。可参考下述理解的更详细,后续嵌入式代码优化、框架设计也积累到一些经验后续再分享。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |