Visual Studio Code 的智能感知无法识别 Arduino 端口管理

4 intellisense arduino visual-studio-code

我正在尝试使用 VScode 进行 Arduino Uno 早期开发。我想使用智能感知,但在“问题选项卡”中它显示错误:

identifier "DDRD" is undefined
identifier "PIND" is undefined
identifier "PORTD" is undefined
identifier "PORTD" is undefined
Run Code Online (Sandbox Code Playgroud)

我可以完美地编译和上传代码并且它可以工作。

我到处都读到解决这个问题的方法是在代码的最顶部添加微控制器的宏定义,但这似乎不仅仅对我有用。

这是我的代码

#define __AVR_ATmega328P__
#include <avr/io.h>
#include <util/delay.h>

int main(void) {
    int switchState = 0;

    DDRD &= ~(1 << 2);
    DDRD |= 1 << 3;
    DDRD |= 1 << 4;
    DDRD |= 1 << 5;

    for (;;) {
        switchState = 0x01 & (PIND >> 2);

        if (!switchState) {
            PORTD |= 1 << 3;
            PORTD &= ~(1 << 4);
            PORTD &= ~(1 << 5);
        } else {
            PORTD &= ~(1 << 3);
            PORTD &= ~(1 << 4);
            PORTD |= 1 << 5;
            _delay_ms(250);
            PORTD |= 1 << 4;
            PORTD &= ~(1 << 5);
            _delay_ms(250);
        }
    }

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

如果我右键单击带下划线的 DDRD 宏并选择“转到定义”,它会将我带到 io76c711.h 中的 DDRD 宏定义,而我希望在 iom328p.h 中重定向,因为 io.h 包含

#elif defined (__AVR_ATmega328P__)
#  include <avr/iom328p.h>
Run Code Online (Sandbox Code Playgroud)

似乎AVR_AT76C711是在其他地方定义的,但我不知道在哪里。

您有什么建议吗?如果 VScode Arduino 扩展生成的 c_cpp_properties.json 有问题,我也会发布我的 c_cpp_properties.json

{
    "configurations": [
        {
            "name": "Win32",
            "includePath": [
                "C:\\Program Files (x86)\\Arduino\\tools\\**",
                "D:\\Arduino\\libraries\\**",
                "C:\\Program Files (x86)\\Arduino\\libraries\\**",
                "C:\\Program Files (x86)\\Arduino\\hardware\\tools\\**",
                "C:\\Program Files (x86)\\Arduino\\hardware\\arduino\\avr\\**"
            ],
            "forcedInclude": [
                "C:\\Program Files (x86)\\Arduino\\hardware\\arduino\\avr\\cores\\arduino\\Arduino.h"
            ],
            "defines": [
                "USBCON"
            ],
            "intelliSenseMode": "gcc-x64",
            "compilerPath": "/usr/bin/gcc",
            "cStandard": "gnu11",
            "cppStandard": "gnu++14"
        }
    ],
    "version": 4
}
Run Code Online (Sandbox Code Playgroud)

小智 6

添加"__AVR_ATmega328P__"到 c_cpp_properties.json 文件的定义部分,如下所示:

"defines": [
    "__AVR_ATmega328P__",
Run Code Online (Sandbox Code Playgroud)

然后它就能找到正确的 AVR IO 包含文件。

在您的情况下,AVR_AT76C711只是定义的一种可能性,但它可能并未在您的项目中实际定义。

注意:下次重建 IntelliSense 配置时(例如:验证或上传),该定义将自动删除。目前已在此处跟踪此问题。