embedded - 无法在 Windows 10 上使用 Visual Studio Code 打开源文件 avr/io.h(hal.h 的依赖项)
问题描述
我想使用 stm32F0(基于 arm)和 VS Code 来实现一个嵌入式项目。该项目在其他系统上正常运行。
- 我向 Visual Studio 添加了 C/C++ 扩展
- 我为 cortex-m0 arm 安装了一个编译器:GNU Arm Embedded toolchain/gcc arm for windows。
- 安装的 Makefile:二进制文件 + 依赖文件
- 已安装 openOCD(打开片上调试器)
- 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 检测到错误。请更新您的 includePath。此翻译单元已禁用 Squiggles
无法打开源文件“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 并在环境变量中添加了路径
这是一个完全不同的问题 - 为此发布一个新问题。
推荐阅读
- ruby-on-rails - ActiveRecord 使请求参数中不存在的值无效
- git - 通过 Git Bash 访问桌面
- r - 在几何线中以不同比例绘制辅助轴
- angular - 无法将具有 Angular Universal 的 Angular 9 应用程序部署到具有 Firebase 功能的 Firebase
- java - JSON 映射集合到 ArrayList
- ruby-on-rails - lazyload-rails 显示扭曲的 PNG
- google-analytics - 是不是像加 onclick=”ga('send', 'event', 'Category', 'Action', 'Label', 'Value');》这么简单 到我的链接以跟踪点击事件?
- postgresql - 在 Postgres 的另一列中获取具有最大字符串长度的行
- javascript - Discord.js V12 如何显示具有特定角色的所有成员?
- node.js - 如果在 NodeJS 中未确认电子邮件,则自动删除 Mongo 文档