哪个程序负责从闪存加载到RAM并在微控制器裸机中运行程序?

问题描述 投票:-1回答:2

用C语言编写的程序,并在其他IDE /计算机上进行编译(或交叉编译),然后将其作为二进制数据加载到控制器的闪存中。

我在裸机/无RTOS中不了解什么

  1. 哪个程序/代码负责从闪存加载到RAM?
  2. 微控制器中的RAM是否具有智能/程序来理解二进制文件,或者在编译时,智能文件已由编译器添加到二进制文件中?
microcontroller bare-metal
2个回答
1
投票

理想情况下,您的程序运行在Flash而非ram中。您可以选择许多游标,如果不支持从ram运行,则主要是架构限制。紧急情况下,如果您需要蹦床来对闪存进行重新编程,就可以在ram中运行代码,就像在现场下载新固件一样(对于只有一个闪存库无法运行并且无法同时擦除/修改的芯片),或性能,但是如果您需要ram来提高性能,那么也许您需要重新考虑您的设计。可以肯定会有小部分内容,但是如果出于开发之外的其他原因整个应用程序都必须放在ram中,则需要重新考虑系统设计。

您可以轻松地用一个小的副本包装您的程序,以存储一些ram代码,以便mcu启动该副本并跳转程序,然后主应用程序在ram中运行。那是你的选择。仅仅几行代码就显得微不足道了。它取决于芯片/架构,取决于您是否可以在这种情况下处理中断或需要如何设计中断(例如,不仅仅是复制和跳转,还可能需要Flash中的处理程序也可以跳转至ram)。

这里没有魔术,单片机处理器与其他处理器没有什么不同,您需要一些非易失性方法才能将程序放入其中。像大多数其他cpus一样,您的处理器从rom / flash引导,然后根据需要将其用于最终应用程序(无论是否为操作系统)。对于MCU,典型的方法是直接引导到应用程序中,在Flash中运行应用程序以读取只读项目(.text和.rodata),并在ram中读写文件(.data,.bss),这是通过了解如何处理的使用您的工具链,这是裸机成功的关键部分。

CPU通常不关心闪存,RAM,外围设备,它们只是地址,CPU非常非常笨。如果您是程序员,您很聪明,请放下要遵循的cpu,说明必须遵循规则并指导处理器。处理器以众所周知的方式从一个众所周知的地址或向量表开始,从那里开始,您就可以通过在有资源,闪存,内存和外围设备的地址空间中进行操作来保持处理器的正常运行。处理器可能在其可以从中获取/执行的地址空间上具有规则,具体取决于实现。对于可执行地址空间同时具有flash和ram的实现,是的,您只需将代码放在ram中并执行即可。

在MCU上的ram中运行代码是例外,不是规则。


1
投票
  1. 通常,微控制器不会not将(单个)程序加载到RAM中。相反,它在(闪存或任何其他非易失性)存储器中“就地”运行。构建程序是为了使(固定)开始地址的内存包含该程序的启动代码。

    已经说过,您可能想知道如何使用零值和非零值初始化(静态)变量。这是通过在构建程序时链接的启动代码来完成的。

  2. 无需添加任何“智能”,假设您的意思是像字节码解释器那样的命令来执行二进制命令。微控制器的CPU直接执行机器代码。然后您的编译器将准确生成机器代码。

© www.soinside.com 2019 - 2024. All rights reserved.