【问题标题】:TI C2000 compiler not recognized by VS CodeVS Code 无法识别 TI C2000 编译器
【发布时间】:2020-12-13 20:59:42
【问题描述】:

我正在尝试在“compilerPath”中设置 TI C2000 C/C++ 编译器 (cl2000.exe),但 VS Code 显示:

无法使用 compilerPath ".../bin/cl2000.exe" 解析配置。改用“cl.exe”。

有没有办法让这个工作,例如手动指定在哪里找到包含文件等,或者除了大的编译器(gcc、clang)之外的编译器不管我做什么都不能与 VS Code 一起工作?

我不需要调试器、库文档等功能,但我需要智能感知 (msvc-x64)。我可以只使用cl.exe 作为定义的编译器,但它不能识别一些编译器特定的东西,比如__attributes__((ramfunc)),它不使用正确的<stdint.h> 等。

【问题讨论】:

  • 即使编译器工作正常,VSCode 仍然可能缺少其他重要的 IDE 功能,用于(相当专业的)微控制器开发:调试器、库文档、智能感知等。建议:如果您需要 IDE,请考虑 TI 的 Code Composer Studio:ti.com/tool/CCSTUDIO-C2000
  • 我不需要调试器、库文档或类似的东西。我只需要它来识别特定于编译器的函数,而智能感知是必须的。我希望 msvc-x64 仍然可以与 cl2000 一起使用。 TI 的 CCS 不是一种选择,说来话长。

标签: visual-studio-code


【解决方案1】:

使用当前的 C/C++ 扩展 (v1.7.1) 我不认为您想要什么是可以实现的,因为它似乎需要与编译器进行某种集成才能从中提取大量“隐藏”信息它,目前只支持微软的 C 编译器、Clang 和 GCC (source)。

无论如何,使用正确的c_cpp_settings.json,您可以获得很多功能。

这是我当前在 F280049C 上的项目设置的副本。我在项目文件夹中添加了电机控制 SDK 作为子模块,您可能不需要。确保添加与您的项目相关的所有不同的 SDK 和其他零碎。

对于defines 属性,我在Code Composer 中检查了项目属性,然后在CSS Build / C2000 Compiler / Predefined Symbols 中有一个通过命令行传递的定义列表。有一堆“隐藏”的定义我不知道如何获取,请参阅下面代码中的评论。拿例子中的那些加点盐,你的定义可能会有所不同。

可以在命令行中传递的标志中检查 C 和 C++ 标准(在我的项目中它们是 C++03 和 C11)。

编译器路径必须留空 (""),因为扩展无法使用 C2000 编译器,这就是您收到 Unable to resolve configuration with compilerPath ".../bin/cl2000.exe". Using "cl.exe" instead. 错误的原因。我猜 VS Code 看到了“cl.exe”编译器,C/C++ 扩展可以使用的编译器(它是微软的 VS 编译器,可能它的名字与 TI 的相似这一事实会误导你)

关于intelliSense 模式,C2000 的恶魔架构将无法正常工作。我更喜欢将 intelliSense 设置为 32 位,但这与 64 位一样错误,所以在那里选择你的毒药。请记住,在 VS Code 中,sizeof 或指针之类的值将是错误的(因为您告诉它将它们视为 32 位架构)。

试试这个配置。您会在某些包含下看到许多红色波浪线,但其中大部分应该在您的 browse 路径中,并且可以通过单击黄色灯泡图标自动添加。

{
    "env": {
        "SDKPath": "${workspaceFolder}/../lib/C2000Ware_MotorControl_SDK_3_01_00_00",
        "StdLibPath": "C:/ti/ccs1031/ccs/tools/compiler/ti-cgt-c2000_20.2.5.LTS",
        "XDCTools": "C:/ti/ccs1031/xdctools_3_62_00_08_core",
        "TIBIOS": "C:/ti/bios_6_83_00_18/packages/"
    },
    "configurations": [
        {
            "name": "TI",
            "includePath": [
                "${workspaceFolder}/**"
            ],
            "browse": {
                "path": [
                    "${StdLibPath}/**",
                    "${SDKPath}/**",
                    "${XDCTools}/**",
                    "${TIBIOS}/**"
                ]
            },
            "defines": [
                "_F28004x",
                "DEBUG",
                "_INLINE",
                "_FLASH",
                "DRV8353_SPI",
                // Hidden predefined symbols. They are set by the compiler by default, but
                // they are not output on the command line and I haven't found a way to
                // list them yet
                // needed for STL (see s_c__system.h)
                "_STLP_COMPILER",
                "__TI_COMPILER_VERSION__"
            ],
            "compilerPath": "",
            "cStandard": "c11",
            "cppStandard": "c++03",
            "intelliSenseMode": "gcc-x86"
        }
    ],
    "version": 4
}

请记住,使用微控制器时需要进行大量自定义,但我认为这会让您走上正轨。

【讨论】:

  • 感谢您的努力!我实际上做了类似的事情,即我将 MSVC 用于 IntelliSense,为了避免 C2000 特定内在函数的错误,我在 c_cpp_properties.json 中使用了虚拟宏函数,例如“__attribute__(X)=" 等。谢谢!跨度>
猜你喜欢
  • 2021-08-26
  • 2020-09-08
  • 1970-01-01
  • 2022-10-05
  • 1970-01-01
  • 2020-08-02
  • 2023-04-08
  • 1970-01-01
  • 2022-01-18
相关资源
最近更新 更多