-1

据我所知,嵌入式系统中的编译器将常量值,变量的初始化数据放在ROM(只读存储器)中。但是,ROM是只读的,意味着不能写,那么编译器在编程时怎么能写这些数据呢?

我认为这个嵌入式系统案例中的 ROM 主要是指 EEPROM 或闪存,意思是写权限。

在有操作系统和没有操作系统的嵌入式系统中,我的理解是否正确?

4

2 回答 2

1

“只读”部分更多地是关于现场可编程性,而不是一般的可写性。从广义上讲,ROM分为三种类型:

  • 作为制造过程的一部分被编程并且其内容不能改变的那种,例如掩模ROM
  • 可以用特殊设备擦除的那种,比如可以用UV光擦除的EPROM
  • 以及可以电擦除(通常在电路中)的那种,例如EEPROM
  • 另外,请参阅下面@Olaf 留下的关于 Flash 和 EEPROM 之间差异的有用评论(诚然,这比我想象的要大!)

如今,许多微控制器(例如 Atmel 广受欢迎的ATmega 系列)都包含一些用于程序存储的片上闪存,还可能包含用于非易失性数据存储的 EEPROM。这些存储器由特定于硬件的设备程序员编写

编译器、链接器和器件编程器的共同责任是确保将正确的数据或代码放置在正确类型的存储器中。例如,编译器可能会发出汇编指令,将可执行代码放在.text节中。链接器组合了.text构成程序的目标文件的各个部分。最后,组合.text被写入设备的闪存。

设备程序员显然需要对可执行文件格式以及段名到内存类型的映射有所了解。或者,中间工具可以将可执行文件转换为程序员的输入文件。

于 2015-08-19T14:14:10.110 回答
0

但是,ROM是只读的,意味着不能写,那么编译器在编程时怎么能写这些数据呢?

为了回答这个问题,编译器只创建目标文件。

这些被传递给链接器,链接器通常通过读取某种链接器脚本来决定变量最终将在哪个物理地址。链接描述文件可能会这样说:“程序代码进入闪存第 1 节,字符串文字进入闪存第 2 节,常量变量进入闪存第 3 节”。链接器创建一些二进制文件格式。

二进制文件依次传递给芯片编程工具或在线调试器,其中包含对闪存进行编程的实际例程。

于 2015-08-19T14:39:04.767 回答