3

我正在使用 Visual Studio 2013 为 AVR 编写代码。我一直在关注教程。

在编写代码时,我注意到 Visual Studio 一直在强调诸如DDRB或之类的内容,PORTB并且我不断收到诸如 之类的错误Error: identifier "PORTB" is undefined,但是,程序可以正确编译。

有趣的是,按下alt- F12Visual 会找到许多定义它们的文件。

4

2 回答 2

11

您的 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

于 2014-02-15T23:15:04.810 回答
1

我建议简单地使用原始 IDE 作为 Make-File 生成器,然后从 VS2013 调用该 makefile。这有维护两个不同项目的开销(但大多数需要更改 makefile 的操作很少见),但留下了良好 VS IDE 的舒适性,并让您回到原始 IDE 进行调试。

您还必须在 vs2013 项目设置中设置包含目录才能获得智能感知工作。

于 2014-03-17T14:08:19.660 回答