致命错误: avr/io.h: 没有这样的文件或目录
fatal error: avr/io.h: No such file or directory
我正在使用avr-gcc和avrdude通过RPi3对ATMEGA328进行编程。我想使用 C++ 而不是 C,所以我创建了一个简单的 C++ 文件并尝试构建它:
#define F_CPU 8000000UL
#include <avr/io.h>
#include <util/delay.h>
void delayms( uint16_t millis )
{
while ( millis )
{
_delay_ms( 1 );
millis--;
}
}
int main()
{
DDRD = 0xFF;
while( 1 )
{
PORTD = 0xFF;
delayms( 1000 );
PORTD = 0x00;
delayms( 1000 );
}
return 0;
}
我的制作文件:
CC=/usr/bin/avr-gcc
MEGA=328p
CFLAGS=-g -Os -Wall -mcall-prologues -mmcu=atmega$(MEGA)
OBJ2HEX=/usr/bin/avr-objcopy
PROG=/usr/local/bin/avrdude
SOURCE=$(SOURCE)
DEVICE=$(DEVICE)
program : $(SOURCE).hex
$(PROG) -c linuxgpio -p m$(MEGA) -P $(DEVICE) -e -B 2.0 -U lfuse:w:0xe2:m -U hfuse:w:0xd9:m
$(PROG) -c linuxgpio -p m$(MEGA) -P $(DEVICE) -U flash:w:$(SOURCE).hex
%.obj : %.o
$(CC) $(CFLAGS) $< -o $@
%.hex : %.obj
$(OBJ2HEX) -R .eeprom -O ihex $< $@
clean :
rm -f *.hex *.obj *.o
我按以下方式构建它:
sudo make DEVICE=atmega328p SOURCE=blink
问题是,如果我将文件保存为 blink.c,它将正确构建,但如果我将其保存为 blink.cpp,它会调用 g++ 编译器,而不是 avr-g++,所以我将 Makefile 中的第一行更新为:
CC=/usr/bin/avr-g++
但是同样的问题仍然存在,我不断收到以下错误:
g++ -c -o blink.o blink.cpp
blink.cpp:3:20: fatal error: avr/io.h: No such file or directory
#include <avr/io.h>
^
compilation terminated.
<builtin>: recipe for target 'blink.o' failed
make: *** [blink.o] Error 1
如果我手动运行以下命令,它可以很好地构建:
avr-g++ -c -o blink.o blink.cpp
我不明白为什么当我运行 Makefile 时它会尝试运行 g++ 而不是 avr-g++,即使我严格指定了 avr-g++。有什么建议吗?谢谢!
从 GNU 制作文档:
编译C++程序
n.o 由 n.cc、n.cpp 或 n.C 自动制成,配方形式为"$(CXX) $(CPPFLAGS) $(CXXFLAGS) -c"。
尝试设置变量 CXX 而不是 CC。
相关文章:
- .cpp和.h文件中的模板专用化声明
- 为什么两个不同的未命名名称空间可以共存于一个cpp文件中
- 文本文件中的单词链表
- CMake-按正确顺序将项目与C运行时对象文件链接
- 使用新行和不使用新行读取文件
- 在C++程序中输入的文本文件将不起作用,除非文本被复制和粘贴
- 挂起和取消挂起一个文件DLL
- 如何确定我已使用非编码文件到达 EOF?
- 命名空间中具有.h和.cpp文件的类
- 如何使用ndk-build.cmd构建Android.so文件
- 从包含m行的文件中提取n行,必要时(惰性地)重复该文件
- 读取文件并输入到矢量中
- 在C++中查找文件
- c++库的公共头文件中应该包含什么
- 用c++从输入文件中读取另一行
- Cppcheck生成xml转储文件
- 读取文件的最后一行并输入到链接列表时出错
- 无法编译 rtmidi 测试 cmidiin.cpp 文件, 非法指令
- 致命错误: avr/io.h: 没有这样的文件或目录
- 矢量头文件在AVR-Studio