哪个程序负责从Flash加载到RAM并在Microcontroller Bare metal中运行程序?

时间:2019-12-13 06:26:56

标签: microcontroller bare-metal

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

我在裸机/无RTOS

中不了解什么
  1. 哪个程序/代码负责从Flash加载到RAM?
  2. 微控制器中的RAM是否具有智能/程序以了解二进制文件?或者在编译时,智能文件已由编译器添加到二进制文件中?

2 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:1)

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

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

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

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

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