2017-03-27 199 views
0

我正在找人指导我在AVR微控制器(OS:Debian 32位)中解决以下错误。avrdude:无法处理ELF文件checkio.hex,ELF文件支持未编译在

/* 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; 
} 

及相关补充文件是:

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:注意: “闪” 存储器已经被指定,在擦除周期将被执行 要禁用此功能,指定-D选项。

AVRDUDE:擦除芯片

AVRDUDE:警告:不能设置SCK周期。请检查usbasp固件 更新。

AVRDUDE:读取输入文件 “checkio.hex”

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

AVRDUDE:不能处理ELF文件checkio.hex,ELF文件支持编译

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

AVRDUDE完成。谢谢。

+2

错字:您已经设置了变量'GFLAGS3',但是您在规则中引用了'CFLAGS3'。 (我个人称之为'AVRDUDE_OPTS'。) – duskwuff

+1

objcopy命令使用'CFLAGS3',但没有定义。你已经定义了'GFLAGS3'。 – Clifford

回答

3

这个错误并不是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 
+0

是啊!问题解决..谢谢你得到它通知。 –

+0

@PravinKamble:当答案是一个可接受的解决方案(或者你的首选答案)中的StackOverflow“方法”是将其标记为“接受”而不是发表评论或感谢 - 虽然赞赏 - 但你是最受欢迎的。 – Clifford