英特尔hex记录类型03或05在ARM的iHex程序中做什么?

英特尔hex记录类型03或05在ARM的iHex程序中做什么?,arm,hex,objcopy,Arm,Hex,Objcopy,英特尔hex记录类型03或05在iHex程序中做什么 记录类型03:Start Segment Address对于80x86处理器,指定CS:IP寄存器的初始内容。地址字段为0000,字节计数为04,前两个字节为CS值,后两个字节为IP值 记录类型05:开始线性地址地址字段为0000(未使用),字节计数为04。这四个数据字节表示加载到80386及更高CPU的EIP寄存器中的32位值 这些对ARM程序有意义吗 每当我生成.hex来编程嵌入式ARM时,其结尾如下所示: :10851400B40400

英特尔hex记录类型03或05在iHex程序中做什么

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

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

这些对ARM程序有意义吗

每当我生成.hex来编程嵌入式ARM时,其结尾如下所示:

:10851400B4040020BC040020BC040020BC04002C04040020D7
:10852400C4040020CC40020CC040020D404002087
:10853400D440020DC040020DC040020DC040020E404002037
:10854400E4040020EC040020EC040020F4040020E7
:10855400F440020FC040020FC040020FC040020FFFFFFC3
:048564000000020011
:0400000508002910B6
:0000000 1ff

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

为什么objcopy要创建这些记录?我能阻止它这样做吗

相关Makefile行:

 FORMAT = ihex
 OBJCOPY = arm-elf-objcopy

  %.hex: %.elf
    @echo
    @echo $(MSG_FLASH) $@
    $(OBJCOPY) -O $(FORMAT) $< $@
FORMAT=ihex
OBJCOPY=手臂elf OBJCOPY
%.hex:%.elf
@回音
@echo$(MSG_闪存)$@
$(OBJCOPY)-O$(格式)$<$@
这些对ARM程序有意义吗

ARM程序将始终具有入口点集,即使您在裸机情况下提供了向量表

由于兼容性原因,
arm-*-objcopy
程序不是很智能,当条目地址在第一个兆字节以内时,它只会生成
03
记录,反之则生成
05
记录


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

有一些特定于ARM的解释。很高兴知道!我试图找到关于这种行为的objcopy文档,因为它在另一个目标上也让我感到惊讶,类似地,当它遇到这些类型中的一种时,会破坏一个工具。