无法刷新ARM设备 - “Intel Hex文件不以':'开头”

时间:2018-06-13 18:08:16

标签: c++ makefile arm atmel eabi

我的代码库与arm-none-eabi-gcc一直运行良好。我想在添加C ++的同时将大部分源文件保存在C中。我有一些问题编译,但最终似乎成功编译我的设备(Atmel ATSAMG55)。

然而,当我在Atmel工作室中闪存设备时,我收到错误

The Intel Hex file does not start with ':'

注意,我只是通过Atmel ICE编程器/调试器和Atmel工作室编程。我正在通过arm-none-eabi-gcc和arm-none-eabi-g ++以及自定义make文件进行编译。

我打开了.hex输出的十六进制查看器,主要查找0x00000000,但在开头和结尾都有一些“真实”数据。下面的图片。

Top of Hex File

Bottom of Hex File

显然,如果编译过程正确发生,那么它大多不是0x00000000。但是,没有任何编译器错误,我有点卡在哪里开始。下面是我的make文件的“核心”的摘录。

all: $(TARGET)


# Create binary from object files and external libraries
$(TARGET): $(OBJECTS_C) $(OBJECTS_CXX) $(S_SRCS)
    @mkdir -p $(dir $@)
    $(CXX) $(CXXFLAGS) $(C_INC) -T$(LDFILE) $(LFLAGS) -o $@
    $(TOOLCHAIN)-objcopy -O binary $@ $(basename $@).bin


out/$(PLATFORM_MCU)/obj/%.o: %.cpp
    @mkdir -p $(dir $@)
    $(CXX) $(CXXFLAGS) $(C_INC) -o $@ -c $<

-include $(DEP_CXX)

out/$(PLATFORM_MCU)/obj/%.o: %.c
    @mkdir -p $(dir $@)
    $(CC) $(CFLAGS) $(C_INC) -o $@ -c $<

-include $(DEP_C)

.PRECIOUS: $(PRECIOUS)


.PHONY: all clean


clean:
    rm -rf $(CLEAN)

上面的大部分内容是变量定义和设置标志。我对此非常有信心,因为这对纯C来说工作得很好。只有当我添加了第二组对象/源依赖项时才开始出现问题。

有没有人看过像这样的编译问题,并且有关于从何处开始调试的任何输入?谢谢!

2 个答案:

答案 0 :(得分:0)

  • 从您收到的错误消息中,您的编程工具需要一个Intel Hex格式的文件。
  • 您提供十六进制转储的文件不能是Intel Hex格式的文件,因为此格式使用ASCII编码。
  • 您提供的屏幕截图是ELF格式的文件: 第一个字节是:

    00000000 7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00 | .ELF ............ |

  • 您的make文件似乎正在生成二进制文件,而您需要一个 英特尔十六进制格式的文件:

  

$(TOOLCHAIN)-objcopy -O binary $ @ $(basename $ @)。bin

因此,您可能需要在上一行之后添加以下行:

  

$(TOOLCHAIN)-objcopy -O ihex $ @ $(basename $ @)。ihex

生成的文件(.ihex)应该是您的编程工具使用的文件。

答案 1 :(得分:0)

看起来这个问题源于错误的标志。我早些时候知道我提到假设旗帜是正确的可能是公平的。我不再认为这是真的。更改标志(并更新一些特定于硬件的文件以识别硬浮动abi)后,它似乎正在工作。感谢所有帮助过我的人。