7

我有 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

OBJCOPY使用 Make 目标生成 bin 文件,然后将其刷新burn

我的问题:

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

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

4

1 回答 1

9

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

它为arm-none-eabi-objcopy变量make赋值OBJCOPY

make执行此命令时:

$(OBJCOPY) -O binary $(PROJ_NAME).elf $(PROJ_NAME).bin

实际运行的命令是

arm-none-eabi-objcopy -O binary tim_time_base.elf tim_time_base.bin

问题 2:闪烁 bin 文件会产生预期的结果(Leds 闪烁)但是通过闪烁 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在复位后跳转到位置时,它期望找到可执行指令,而不是元数据。当它发现它不理解的“垃圾”时,它可能只是停下来。它肯定找不到让灯闪烁的指令。

于 2018-04-06T04:02:24.103 回答