无法使用 Visual Studio 代码打开源文件 avr/io.h(hal.h 的依赖项)10

Cannot open source file avr/io.h (dependency of hal.h) with Visual Studio Code on windows 10

我想使用 stm32F0(基于 arm)和 VS Code 实现一个嵌入式项目。该项目 运行 在其他系统上正常运行。

  1. 我为 visual studio
  2. 添加了 C/C++ 扩展
  3. 我为 cortex-m0 arm 安装了一个编译器:GNU Arm Embedded toolchain/gcc arm for windows.
  4. 安装的 Makefiles:二进制文件 + 依赖文件
  5. 已安装 openOCD(打开片上调试器)
  6. tasks.json(构建说明)、c_cpp_properties.json(编译器路径和 IntelliSense 设置)已创建。我修改了包含路径,因为我的程序包含不在我的工作区中的头文件,并且不在标准库路径中。

c_cpp_properties.json 文件

{
    "configurations": [
        {
            "name": "Win32",
            "includePath": [
                "${workspaceFolder}/**" ,
                "C:\Users\lib\chibios\ChibiOS-313416b8fda90d9973a749a0a35970956852c286\os\hal\include",
                "C:\Users\lib\chibios\ChibiOS-313416b8fda90d9973a749a0a35970956852c286\os\common\ports\ARM\compilers\GCC",
                "C:\Users\lib\chibios\ChibiOS-313416b8fda90d9973a749a0a35970956852c286\os\nil\include"
            ],
            "defines": [
                "_DEBUG",
                "UNICODE",
                "_UNICODE"
            ],
            "compilerPath": "E:\tools-vs\gcc-arm-none-eabi-10-2020-q4-major\bin\arm-none-eabi-g++", 
            "cStandard": "gnu11",
            "cppStandard": "gnu++14",
            "intelliSenseMode": "gcc-arm",
            "browse": {
                "path": [
                    "E:\tools-vs\gcc-arm-none-eabi-10-2020-q4-major\lib\gcc\arm-none-eabi\10.2.1\include"
                ]
            }
        }
    ],
    "version": 4
}

添加这些路径后,还是报错:

#include errors detected. Please update your includePath. Squiggles are disabled for this translation unit

cannot open source file "avr/io.h" (dependency of "hal.h")

由于嵌入式项目的库和依赖较多,无法一一添加依赖路径。一个依赖解决并添加路径后,应该还有一个错误。

还有一个问题就是我自己在目录里找不到依赖avr/io.h

我以前在其他项目中使用过Keil。当我编译代码时,它会自行调用所有依赖项。编译前没有看到树段依赖,也没有看到头文件依赖报错

非常感谢任何命令或有用的资源,提前。

Cannot open source file avr/io.h (dependency of hal.h)

您似乎正在使用 ChibiOS,它有一个文件 hal.h,其中包含 halconf.h,其中包含 mcuconf.h。很明显,您似乎有一个 ChibiOS 的 AVR 端口,您需要 STM32 或 ARM Cortex-M 支持。

But, how VS Code can find dependencies before compiling?

与 compiler/pre-processor 的方式相同,通过配置包含路径、解析项目文件并考虑任何外部定义的(命令行)宏。

I also was wondering if I should add a path for main.cpp file and other C and CPP files in the configuration file of VS Code to solve these problems?

我相信无论如何它都会解析项目文件。它只需要找到源文件中包含的头文件,为源文件的解析提供上下文。

For debugging, I don't see any debugger in the list, though I installed openOCD and add the path in the environment variable

这是一个完全不同的问题 - post 这是一个新问题。

您有 8 位 AVR 微控制器的代码,您尝试使用 ARM 工具链直接编译它。不起作用。您将需要重写此程序(不仅包括,而且几乎所有内容。中断处理程序、寄存器,甚至硬件架构都不同(Harvard/von Neumann))。

对于初学者来说,这是不可能完成的任务。

感谢您的回答。

  • 使用 Visual Studio 代替 Visual Studio 代码
  • 使用正确的工具链(GCC:gcc-arm-none-eabi)
  • 将 visualGDB 插件从 sysProgs 添加到 VS
  • 具有IntelliSense配置(VS中的扩展在检查默认位置后找到路径&使用我们在pc上的编译器配置IntelliSense。如果include文件有错误,您可以编辑IntelliSense告诉C++编译器所在的扩展名并包含头文件。但 visualGDB 会自动找到它们)
  • 已配置包含路径
  • 构建项目
  • 并重新扫描解决方案

所有这些步骤都解决了我的问题。