什么是03或05版的英特尔十六进制记录在ARM的iHex程序中做什么?

时间:2014-10-10 09:08:51

标签: arm hex objcopy

在iHex程序中03或05类型的intel十六进制记录是什么?

  

记录类型 03:启动段地址对于 80x86 处理器,指定CS:IP寄存器的初始内容。地址字段为0000,字节数为04,前两个字节为CS值,后两个为IP值。

     

记录类型 05:开始线性地址地址字段为0000(未使用)且字节数为04.四个数据字节表示加载到EIP寄存器中的32位值。 80386 以及更高的CPU。

这些甚至对ARM程序有意义吗?

每当我生成.hex来编程嵌入式ARM时,结尾看起来像这样:

  

:10851400B4040020BC040020BC040020C4040020D7
  :10852400C4040020CC040020CC040020D404002087
  :10853400D4040020DC040020DC040020E404002037
  :10854400E4040020EC040020EC040020F4040020E7
  :10855400F4040020FC040020FC040020FFFFFFFFC3
  :048564000000020011
  :040000的 05 08002910B6
  :00000001FF

我编辑了编程应用程序以忽略此记录,就在今天,同事报告他的编译器在倒数第二行产生了 03 类型记录,这阻止了对MPU的编程。

为什么objcopy会创建这些记录?我可以阻止它这样做吗?

相关的Makefile行:

 FORMAT = ihex
 OBJCOPY = arm-elf-objcopy

  %.hex: %.elf
    @echo
    @echo $(MSG_FLASH) $@
    $(OBJCOPY) -O $(FORMAT) $< $@

1 个答案:

答案 0 :(得分:9)

  

这些甚至对ARM程序有意义吗?

即使您在裸机外壳中提供了矢量表,ARM程序也始终会设置入口点。

arm-*-objcopy程序不是非常智能,只是出于兼容性原因,当条目地址在第一个兆字节内时,只生成03记录,否则只生成05

Flash工具可以安全地忽略裸机ARM上的这些记录类型,因为向量表已包含所需的地址。您可以尝试过滤hex文件以删除这些记录,例如使用sed