编译器如何将数据放在嵌入式系统的ROM上?

时间:2015-08-19 13:20:22

标签: embedded rom eeprom

据我所知,变量的常量值,初始化数据将由嵌入式系统中的编译器放入ROM(Read Only Momory)中。但是,ROM是只读的,意味着无法编写,那么编程时编译器如何编写这些数据呢?

我认为这个嵌入式系统中的ROM主要意味着EEPROM或闪存意味着写入权限。

我的理解在使用OS和无操作系统的嵌入式系统中都是正确的吗?

2 个答案:

答案 0 :(得分:1)

"只读"部分更多的是关于字段可编程性而不是一般的可写性。从广义上讲,有三种类型的ROM:

  • 作为制造过程的一部分而编程且其内容无法更改的类型,例如mask ROM;
  • 可以使用特殊设备删除的类型,例如EPROM that can be erased with UV light;
  • 和可以电擦除的类型(通常在电路中),例如EEPROM;
  • 另外,请参阅下面@Olaf留下的有用的评论,关于Flash和EEPROM之间的差异(诚然,这比我想象的要大!)

如今,许多微控制器 - 例如Atmel受欢迎的ATmega series - 包含一些用于程序存储的片上闪存,并且还可能包含用于非易失性数据存储的EEPROM。这些记忆由特定于硬件的device programmers编写。

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

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

答案 1 :(得分:0)

  

但是,ROM是只读的,意味着无法写入,那么编程时编译器如何编写这些数据呢?

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

这些传递给链接器,链接器决定变量将以什么物理地址结束,通常是通过读取某种链接描述文件。链接器脚本可能会说:“程序代码进入闪存部分1,字符串文字进入闪存部分2,常量变量进入闪存部分3”。链接器创建一些二进制文件格式。

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