avrdude:无法处理 ELF 文件 checkio.hex,ELF 文件支持未在中编译

avrdude: can't handle ELF file checkio.hex, ELF file support was not compiled in

我正在寻找指导我解决 AVR 微控制器(OS:Debian 32 位)中的以下错误的人。

/* checkio.c*/
#ifndef F_CPU
#define F_CPU 16000000UL
#endif
#include<avr/io.h>
#include<util/delay.h>
#include<avr/fuse.h>
int main()
{
  DDRA=0xFF;

  PORTA=0;
  while(1)
  {
       PORTA=0xFF;
       _delay_ms(1000);

        PORTA=0;
       _delay_ms(1000);
  }

  return 0;
}

AND 相关的 make 文件是:

CFLAGS1=-g -mmcu=atmega32 -c
CFLAGS2=-g -mmcu=atmega32 -o
GFLAGS3=-j .text -j .data ihex

checkio.hex:checkio.elf
    avr-objcopy $(CFLAGS3) checkio.elf checkio.hex
checkio.elf:checkio.o
    avr-gcc $(CFLAGS2) checkio.elf checkio.o
checkio.o:checkio.c
    avr-gcc $(CFLAGS1) checkio.c

burn:   
    sudo /home/poonam/proj_utility/avr_dude/install/bin/avrdude -p atmega32 -P /dev/bus/usb/002/004 -c usbasp -u -U flash:w:checkio.hex
clean:
    rm *.elf *.hex *.o

avrdude:警告:无法设置 sck 周期。请检查 usbasp 固件更新。

avrdude:AVR 设备已初始化并准备好接受指令

正在阅读 | ################################################## | 100% 0.01s

avrdude:设备签名 = 0x1e9502

avrdude: 注意:"flash" 内存已指定,将执行擦除循环 要禁用此功能,请指定 -D 选项。

avrdude:擦除芯片

avrdude:警告:无法设置 sck 周期。请检查 usbasp 固件 更新。

avrdude: 读取输入文件 "checkio.hex"

avrdude: 输入文件 checkio.hex 自动检测为 ELF

avrdude: 无法处理 ELF 文件 checkio.hex,ELF 文件支持未在

中编译

avrdude: 从文件读取 'checkio.hex' 失败

avrdude 完成。谢谢。

问题不是 avrdude 不能处理 elf 文件,而是你的 .hex 文件首先是一个 elf 文件而不是 hex 文件。

您的 objcopy 命令应指定输出文件格式:

avr-objcopy -O ihex checkio.elf checkio.hex
            ^^^^^^^

也许明显的错字:GFLAGS3 而不是 CFLAGS3 是造成这种情况的原因,但您仍然需要 -O ihex 而不仅仅是 ihex:

CFLAGS3=-j .text -j .data -O ihex

checkio.hex:checkio.elf
    avr-objcopy $(CFLAGS3) checkio.elf checkio.hex