使用Visual Studio编写AVR代码

3
我正在使用Visual Studio 2013编写AVR代码。我一直在遵循this教程。
在编写代码时,我注意到Visual Studio不断地将像DDRBPORTB这样的内容下划线标出,并且我不断收到类似于Error: identifier "PORTB" is undefined的错误提示,但是程序可以正确编译。
有趣的是,在按下alt-F12后,Visual会找到许多定义文件。
2个回答

12

你的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。


3
在项目属性中,您可以告诉IntelliSense可以在哪里找到标头文件,并定义它应该假定设置的内容。 - vlad_tepesch

1
我建议直接使用原始IDE作为Makefile生成器,并从VS2013中调用该makefile。这样会增加维护两个不同项目的成本(但大多数需要更改makefile的操作很少),但保留了良好的VS IDE的舒适性,并且可以为调试返回原始IDE。
您还需要在VS2013项目设置中设置包含目录,以使Intellisense正常工作。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接