我正在使用 Visual Studio 2013 为 AVR 编写代码。我一直在关注本教程。
在编写代码时,我注意到 Visual Studio 一直在强调诸如DDRB
或之类的内容,PORTB
并且我不断收到诸如 之类的错误Error: identifier "PORTB" is undefined
,但是,程序可以正确编译。
有趣的是,按下alt- F12Visual 会找到许多定义它们的文件。
我正在使用 Visual Studio 2013 为 AVR 编写代码。我一直在关注本教程。
在编写代码时,我注意到 Visual Studio 一直在强调诸如DDRB
或之类的内容,PORTB
并且我不断收到诸如 之类的错误Error: identifier "PORTB" is undefined
,但是,程序可以正确编译。
有趣的是,按下alt- F12Visual 会找到许多定义它们的文件。
您的 Makefile 使用选项 -mmcu=YOURCHIP 运行编译器。这隐含地定义了与您的芯片相对应的宏。例如 atmega32u4 的宏是AVR_ATmega32U4。Intellisense 在您的编译器“外部”运行,因此它不知道此宏以及在解析标准 avr 头文件时 - 就像avr/io.h
它跳过了为您的特定 MCU 正确包含头文件一样。它是这样的:
#elif defined (__AVR_ATmega32U4__)
# include <avr/iom32u4.h>
因此,如果您希望对这些标头中定义的内容具有智能感知支持,您可能需要在源代码的顶部定义该宏,如下所示:
#define __AVR_ATmega32U4__
#include <avr/io.h>
int main() {
char a = PORTB;
}
您可以在本页中间找到哪个宏对应哪个 MCU
我建议简单地使用原始 IDE 作为 Make-File 生成器,然后从 VS2013 调用该 makefile。这有维护两个不同项目的开销(但大多数需要更改 makefile 的操作很少见),但留下了良好 VS IDE 的舒适性,并让您回到原始 IDE 进行调试。
您还必须在 vs2013 项目设置中设置包含目录才能获得智能感知工作。