AVR内存和英特尔十六进制

时间:2017-02-03 17:56:28

标签: memory hex avr atmega atmel

我为我的大学项目工作一个简单的AVR程序员,我不知道如何将内存从hex文件映射到实际的闪存。

例如,intel hex为我们提供了有关数据块的起始地址,其中的字节数和数据本身的信息。麻烦来自AVR MCU,特别是ATmega16,通常有两个字节的地址:高和低。

首先,我编写了一个简单的函数,它只读取hex文件中的所有数据并按顺序写入,每两个字节传递一个地址增加一个。令我惊讶的是,它适用于简单的眨眼代码。但是,我不确定,如果有人需要复杂的内存结构,这种方法是否有效。

所以问题是:

  1. 此解决方案是否适用于复杂的内存结构?
  2. 如果没有,我如何将intel十六进制地址映射到实际的flash地址?问题是英特尔十六进制格式没有高字节和低字节,只有地址=字节。

1 个答案:

答案 0 :(得分:0)

Intel十六进制使用字节地址。 PC程序计数器指的是16位字地址。如果你的意思是单词地址是"实际地址",那么只需加倍表示hex文件中该行的起始地址的数字。

你是什么意思"复杂的记忆结构"?无论地址空间如何被破坏,内存位置都需要唯一的地址。我不熟悉不以0开头并且线性继续的程序存储空间,但如果有这样的方案,则intel hex文件中的一行可以指定从任何地址开始的任何连续存储器部分的内容。

编辑:

intel hex文件的每一行最多只能包含255个字节。通常,数据被分成16或32个字节的块。每行包含块的起始地址(如果使用,则添加到基址)。一个块不必从前一个块的末尾开始,它们也可能出现故障。

至于你描述的复杂内存结构,大多数程序已经有了它们。通常在开始时有一个向量表,后面是间隙,然后是crt和主程序。初始化全局变量的数据如下。如果有引导加载程序,则将其放在内存末尾的特殊部分中。