微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

无法在 Windows 10 上使用 Visual Studio Code 打开源文件 avr/io.hhal.h 的依赖项

如何解决无法在 Windows 10 上使用 Visual Studio Code 打开源文件 avr/io.hhal.h 的依赖项

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

  1. 我为 Visual Studio 添加了 C/C++ 扩展
  2. 我为 cortex-m0 arm 安装了一个编译器:GNU Arm Embedded toolchain/gcc arm for windows。
  3. 安装的Makefiles:二进制文件+依赖文件
  4. 已安装 openOCD(打开片上调试器)
  5. 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 检测到错误。请更新您的包含路径。此翻译单元禁用了波浪线

无法打开源文件“avr/io.h”(“hal.h”的依赖)

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

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

我之前在其他项目中使用过 Keil。当我编译代码时,它自己调用了所有依赖项。在编译之前,我没有看到树部分的依赖或头文件依赖的任何错误

  • 但是,VS Code 如何在编译前找到依赖项?
  • 我也想知道是否应该在 VS Code 的配置文件添加 main.cpp 文件和其他 C 和 CPP 文件的路径来解决这些问题?
  • 对于调试,我在列表中没有看到任何调试器,尽管我安装了 openOCD 并在环境变量中添加了路径

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

解决方法

无法打开源文件avr/io.h(hal.h的依赖)

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

但是,VS Code 如何在编译前找到依赖项?

与编译器/预处理器相同的方式,包括配置包含路径、解析项目文件并考虑任何外部定义的(命令行)宏。

我也想知道是否应该在VS Code的配置文件中添加main.cpp文件和其他C、CPP文件的路径来解决这些问题?

我相信它会在任何情况下解析项目文件。它只需要找到源文件中包含的头文件,就可以为源文件的解析提供上下文。

对于调试,我在列表中没有看到任何调试器,尽管我安装了 openOCD 并在环境变量中添加了路径

这是一个完全不同的问题 - 为此发布一个新问题。

,

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

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

,

感谢您的回答。

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?