Embedded h,以便更快地启动。这些只是一些例子,还有其他考虑因素
RAM是易失性的,所以它不会在整个电源循环中保留代码。如果系统执行RAM中的代码,则需要引导加载程序在通电时获取代码并将其写入RAM。闪存是非易失性的,因此可以在通电时立即开始执行,不需要引导加载程序(但可能仍然有用)Embedded h,以便更快地启动。这些只是一些例子,还有其他考虑因素,embedded,bootloader,u-boot,Embedded,Bootloader,U Boot,RAM是易失性的,所以它不会在整个电源循环中保留代码。如果系统执行RAM中的代码,则需要引导加载程序在通电时获取代码并将其写入RAM。闪存是非易失性的,因此可以在通电时立即开始执行,不需要引导加载程序(但可能仍然有用) 关于第三季度,答案是肯定的。如果系统是从RAM运行的,则.text将位于RAM中(但直到引导加载程序将其复制到RAM中)。如果系统从闪存运行,则.text部分将位于闪存中。.bss部分是变量,无论.text部分在哪里,.bss部分都将在RAM中。我想补充一些关于问题Q2的内容 问
关于第三季度,答案是肯定的。如果系统是从RAM运行的,则.text将位于RAM中(但直到引导加载程序将其复制到RAM中)。如果系统从闪存运行,则.text部分将位于闪存中。.bss部分是变量,无论.text部分在哪里,.bss部分都将在RAM中。我想补充一些关于问题Q2的内容 问题2:为什么引导加载程序需要将应用程序复制到RAM,然后从RAM运行应用程序?如果我们的应用程序运行于FLASH,我们将面临哪些困难 这不仅仅是关于拥有SPI或类似的串行外部代码内存(无论如何,这并不常见) 即使是连接到普通高速并行总线的外部ROM/FLASH/EPROM/也会由于外部存储器访问时间而阻止系统在最大时钟(零等待状态)上运行,即使在相对较慢的MCU上也是如此。100 MHz时钟需要10 ns的闪存访问时间,这并不容易(如果经济上可行的话)。你会同意,100兆赫不再是大脑旋转的速度:-) 这就是为什么许多MCU/CPU架构都在耍花招,一次读取乘法指令,或者拥有内部现金,或者做任何需要的事情来补偿缓慢的外部代码内存。只有最旧的8位体系结构可以直接从闪存(“就地”)执行代码 即使您唯一的代码内存是内部闪存,也需要做一些事情来加速它。以本文为例: 它描述了ARM7是如何集成了他们称之为MAM(内存加速模块)的东西的。这是一本很好的读物,您会发现一些措施可以加快特定ARM7体系结构的代码内存访问(适用于大多数其他体系结构):
另一个问题是调试,调试ROM甚至闪存中的代码的选项非常有限(您必须将代码的一部分移动到RAM中,才能在大多数系统上设置断点)。关于第二季度,您可能面临的困难之一是从闪存执行另一个代码更新。如果您正从尝试更新的同一闪存块执行,系统将崩溃。这取决于您的系统架构(应用程序和引导加载程序在Flash中的组织方式),但如果您试图更新引导加载程序本身,则可能很难避免