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
我的问题:
问题 1:OBJCOPY=arm-none-eabi-objcopy在这种情况下有什么作用。我打开了那个人,但我并没有完全理解,谁能简单解释一下?
问题 2:闪烁 bin 文件给出了预期的结果(LED 闪烁)但是闪烁 elf 文件时 LED 没有闪烁,$(STLINK)/st-flash write $(PROJ_NAME).elf 0x8000000为什么?
问题 1:在这种情况下 OBJCOPY=arm-none-eabi-objcopy 是什么意思。我打开了那个人,但我并没有完全理解,谁能简单解释一下?
其分配值arm-none-eabi-objcopy给make变量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在复位后跳转到位置时,它期望找到可执行指令,而不是元数据。当它发现它不理解的“垃圾”时,它可能只是停止。它当然没有找到使灯闪烁的说明。