我如何教 Visual Studio 关于 __fp16 的代码?

How can I teach Visual Studio Code about __fp16?

我有一个用 arm-none-eabi 编译器编译的 Cortex-M4F 微控制器的 makefile 项目,我正在为一些浮点数使用 __fp16 存储类型。我正在使用 Visual Studio Code 来编辑代码,并使用 makefile 来编译。

我的代码编译正常,但是 Visual Studio 代码无法识别 __fp16 存储类型。

我正在使用 c_cpp_properties.json 配置编译器和 compile_commands.json。

{
    "configurations": [
        {
            "name": "Mac",
            "includePath": [
                "${workspaceFolder}/**",
                "${workspaceFolder}/../**",
                "/usr/local/FreeRTOSv10.2.0/FreeRTOS/**"
            ],
            "defines": [
                "DEBUG=1",
                "FIRMWARE_VERSION=\"DUMMY\""
            ],
            "compilerPath": "/usr/local/bin/gcc-arm-none-eabi-8-2018-q4-major/bin/arm-none-eabi-gcc",
            "compilerArgs": [
                "-mcpu=cortex-m4",
                "-march=armv7+fp",
                "-mfpu=fpv4-sp-d16",
                "-mfloat-abi=hard",
                "-mfp16-format=ieee"
            ],
            "intelliSenseMode": "gcc-arm",
            "cStandard": "c11",
            "compileCommands": "${workspaceFolder}/compile_commands.json"
        }
    ],
    "version": 4
}

如何教 Visual Studio 代码关于 __fp16 存储类型?我认为它会发现具有 compilerArgs 设置和 -mfp16-format=ieee 参数的类型,但它似乎没有什么不同(我在这里尝试了各种组合......)。

这看起来像是 Intellisense 错误。 Intellisense 在您键入时快速编译代码,只是为了捕获简单的错误。但这不是完整的 GCC 编译器。 Intellisense 不生成 ARM 代码,它只检查合法的 C++。

您可以通过将 __fp16=float 添加到 c_cpp_properties.json 中的 defines 来欺骗 Intellisense。如果 documentation 是正确的,那就是 不是 传递给实际的编译器,只是传递给 Intellisense。