控制台输出是:
**** Build of configuration Release for project Timertestnew ****
make all
Building file: ../main.cpp
Invoking: AVR C++ Compiler
avr-g++ -I"G:\arduino-1.0\hardware\arduino\cores\arduino" -DARDUINO=100 -Wall -Os -fpack-struct -fshort-enums -funsigned-char -funsigned-bitfields -fno-exceptions -mmcu=atmega328p -DF_CPU=16000000UL -MMD -MP -MF"main.d" -MT"main.d" -c -o "main.o" "../main.cpp"
Finished building: ../main.cpp
Building target: Timertestnew.elf
Invoking: AVR C++ Linker
avr-gcc --cref -s -Os -o"Timertestnew.elf" ./main.o -lArduinoCore -lm -Wl,-Map,Timertestnew.map,--cref -L"C:\Users\Akhil\workspace\Timertestnew" -mmcu=atmega328p
Finished building target: Timertestnew.elf
Create Flash image (ihex format)
avr-objcopy -R .eeprom -O ihex Timertestnew.elf "Timertestnew.hex"
Finished building: Timertestnew.hex
Invoking: Print Size
avr-size --format=avr --mcu=atmega328p Timertestnew.elf
AVR Memory Usage
----------------
Device: atmega328p
Program: 620 bytes (1.9% Full)
(.text + .data + .bootloader)
Data: 9 bytes (0.4% Full)
(.data + .bss + .noinit)
Finished building: sizedummy
**** Build Finished ****
'问题'视图输出为:
Description Resource Path Location Type
Symbol 'EEARH' could not be resolved main.cpp /Timertestnew line 15 Semantic Error
是否有可能eclipse ide错误地显示此错误,而它编译得很好? 我该如何解决这个问题?
答案 0 :(得分:2)
尝试从问题视图中删除该问题标记并重建项目(完全不仅仅是增量)。如果这解决了问题,那么它只是编译器的不一致状态。
但是,如果它不能解决问题,那么Eclipse编辑器可能会使用不同的解析器(用于内容辅助等),这些解析器无法处理编译器可以处理的内容。对于这种情况,我会查看与错误相关的C / C ++编辑器首选项,也许它可以关闭(但是,我不编程C / C ++,所以我不能告诉你要查找什么)。
答案 1 :(得分:2)
avr-gcc编译器使用其-mmcu
命令行参数来确定要包含哪个IO头文件(因此包括报告的EEARH
EEPROM高地址寄存器的符号寄存器定义)。 Documentation here
Eclipse可能不知道这个“后门”预处理器符号定义(因为它可能使用不同的编译器进行问题检测)。从控制台输出看起来,您需要的IO头文件是avr/iom328p.h
,它在定义__AVR_ATmega328P__
预处理器符号(see here)时包含。如果向Eclipse提供此符号,则应使其编译器选择正确的文件并定义相关的寄存器。