Objcopy elf 到 bin 文件

Mou*_*uin 7 elf stm32 bin objcopy

我有 STM32F404 板,我正在尝试刷新它。我正在关注本教程

在项目Makefile 中

$(PROJ_NAME).elf: $(SRCS)
    $(CC) $(CFLAGS) $^ -o $@ 
    $(OBJCOPY) -O ihex $(PROJ_NAME).elf $(PROJ_NAME).hex
    $(OBJCOPY) -O binary $(PROJ_NAME).elf $(PROJ_NAME).bin

burn: proj
    $(STLINK)/st-flash write $(PROJ_NAME).bin 0x8000000
Run Code Online (Sandbox Code Playgroud)

bin 文件是使用生成的OBJCOPY,然后使用 Make 目标进行刷写burn

我的问题:

问题 1OBJCOPY=arm-none-eabi-objcopy在这种情况下有什么作用。我打开了那个人,但我并没有完全理解,谁能简单解释一下?

问题 2:闪烁 bin 文件给出了预期的结果(LED 闪烁)但是闪烁 elf 文件时 LED 没有闪烁,$(STLINK)/st-flash write $(PROJ_NAME).elf 0x8000000为什么?

Emp*_*ian 9

问题 1:在这种情况下 OBJCOPY=arm-none-eabi-objcopy 是什么意思。我打开了那个人,但我并没有完全理解,谁能简单解释一下?

其分配值arm-none-eabi-objcopymake变量OBJCOPY

make执行这条命令:

$(OBJCOPY) -O binary $(PROJ_NAME).elf $(PROJ_NAME).bin
Run Code Online (Sandbox Code Playgroud)

运行的实际命令是

arm-none-eabi-objcopy -O binary tim_time_base.elf tim_time_base.bin
Run Code Online (Sandbox Code Playgroud)

问题 2:闪烁 bin 文件给出了预期的结果(LED 闪烁) 但是,通过闪烁 elf 文件 $(STLINK)/st-flash write $(PROJ_NAME).elf 0x8000000,LED 没有闪烁,那么为什么?

tim_time_base.elf是一个 ELF 文件——它具有与之关联的元数据。运行arm-none-eabi-readelf -h tim_time_base.elf以查看其中一些元数据是什么。

但是当你的处理器0x8000000在复位后跳转到位置时,它期望找到可执行指令,而不是元数据。当它发现它不理解的“垃圾”时,它可能只是停止。它当然没有找到使灯闪烁的说明。