AVR_GCC 编译错误 delay.h

Posted

技术标签:

【中文标题】AVR_GCC 编译错误 delay.h【英文标题】:AVR_GCC compile errors delay.h 【发布时间】:2010-06-04 23:07:16 【问题描述】:

blinky.zip、gcc-section、Teensy++ v.2 中的说明。 Makefile 和 blinky.c 在 zip 中。我在开始时通过定义 F_CPU 修改了 blinky.c,因为没有使用 Makefile,请参见下文。那么为什么会出现错误,如何编译 at90usb1286 芯片的 C 文件?

$ avr-gcc -mmcu=atmega88 blinky.c

In file included from blinky.c:28:
/usr/local/lib/gcc/avr/4.2.2/../../../../avr/include/util/delay.h:90:3: warning: #warning "Compiler optimizations disabled; functions from <util/delay.h> won't work as designed"
/tmp//ccB66ecl.o: In function `main':
blinky.c:(.text+0x3e): undefined reference to `usb_init'
/tmp//ccB66ecl.o: In function `morse_character':
blinky.c:(.text+0x24c): undefined reference to `print_P'
blinky.c:(.text+0x36e): undefined reference to `print_P'
blinky.c:(.text+0x378): undefined reference to `usb_debug_putchar'
blinky.c:(.text+0x37e): undefined reference to `print_P'
blinky.c:(.text+0x386): undefined reference to `print_P'
blinky.c:(.text+0x390): undefined reference to `usb_debug_putchar'
blinky.c:(.text+0x394): undefined reference to `usb_debug_putchar'
blinky.c:(.text+0x416): undefined reference to `print_P'
blinky.c:(.text+0x4fa): undefined reference to `print_P'
blinky.c:(.text+0x6f8): undefined reference to `print_P'
/tmp//ccB66ecl.o: In function `morse_P':
blinky.c:(.text+0x834): undefined reference to `print_P'

【问题讨论】:

【参考方案1】:

这些是链接错误。你可以只编译(注意我添加了-c 标志):

avr-gcc -c -mmcu=atmega88 blinky.c

然后,您必须将其与其他对象链接以创建二进制文件。

或者,您可以在单个命令行中提供所有源文件,编译器将编译并链接它们:

avr-gcc -mmcu=atmega88 blinky.c print.c usb_debug_only.c

【讨论】:

“您必须将其与其他对象链接以创建二进制文件。”是什么意思? AFAIU 程序必须是 HEX 格式才能上传到 Atmel 芯片。 @user355926 - 你是对的,程序在上传之前必须是ihex 格式。但是您仍然需要先链接程序,然后才能创建ihex 文件。 @R:你是怎么链接的?我在$ man hexdump 中找不到任何关于ihex 的信息。你如何获得十六进制文件?

以上是关于AVR_GCC 编译错误 delay.h的主要内容,如果未能解决你的问题,请参考以下文章

我创建几个c文件,然后直接复制的例程C文件,编译错误Build target 'Target 1' compiling main.c... main

单片机成长之路(51基础篇) - 009 关于sdcc的多文件编译范例

单片机成长之路(51基础篇) - 015 关于sdcc的多文件编译范例二

Linux编译错误

Arduino编译错误

我要完整的DELPHI编译错误信息。