C 如何教授有关fp16的Visual Studio代码?

C 如何教授有关fp16的Visual Studio代码?,c,visual-studio-code,arm,intellisense,C,Visual Studio Code,Arm,Intellisense,我有一个用arm none eabi编译器编译的Cortex-M4F微控制器的makefile项目,我正在对一些浮点使用_fp16存储类型。我正在使用VisualStudio代码编辑代码,并使用makefile进行编译 我的代码编译得很好,但Visual Studio代码无法识别_fp16存储类型 我使用c_cpp_properties.json来配置编译器和compile_commands.json { "configurations": [ {

我有一个用arm none eabi编译器编译的Cortex-M4F微控制器的makefile项目,我正在对一些浮点使用_fp16存储类型。我正在使用VisualStudio代码编辑代码,并使用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代码有关\uu fp16存储类型的知识?我以为它会通过
-mfp16 format=ieee
参数,通过
-compilerArgs
设置来发现类型,但它似乎没有什么区别(我在这里尝试了各种组合…。

这看起来像是智能感知错误。Intellisense会在键入时快速编译代码,以捕获简单错误。但这不是完整的GCC编译器。智能感知不生成ARM代码,它只检查合法的C++。
您可以通过在
c\u cpp\u properties.json
中的
定义中添加
\u fp16=float
来愚弄Intellisense。如果正确,则不会传递给实际的编译器,而是传递给Intellisense。

这看起来像是Intellisense错误。Intellisense会在键入时快速编译代码,以捕获简单错误。但这不是完整的GCC编译器。智能感知不生成ARM代码,它只检查合法的C++。
您可以通过在
c\u cpp\u properties.json
中的
定义中添加
\u fp16=float
来愚弄Intellisense。如果是正确的,那就是不是传递给实际的编译器,只是传递给Intellisense。

我尝试了这个,但它不起作用。根据文档,这是因为我使用的是compile_commands.json文件,定义仅在没有compile_commands文件时使用。“它不工作”?这意味着您的问题保持不变,即说
\uu fp16
的红色智能感应波形未定义?是的,没错。根据您在文档中链接的页面,仅当没有compile_commands.json时才使用
定义
。我想我可以试着去编译commands.json….@SolArnu:另一种方法是在代码中使用
\ifdef\uuuu INTELLISENSE\uuu35; define\uu fp16 float\endif
。但我不确定宏是否在VS代码中工作,这种变通方法是有效的,而且至少在VisualStudio中,它似乎是一个文档化的特性。我试过了,但没用。根据文档,这是因为我使用的是compile_commands.json文件,定义仅在没有compile_commands文件时使用。“它不工作”?这意味着您的问题保持不变,即说
\uu fp16
的红色智能感应波形未定义?是的,没错。根据您在文档中链接的页面,仅当没有compile_commands.json时才使用
定义
。我想我可以试着去编译commands.json….@SolArnu:另一种方法是在代码中使用
\ifdef\uuuu INTELLISENSE\uuu35; define\uu fp16 float\endif
。但我不确定宏是否在VS代码中工作,这种变通方法是有效的,而且至少在VisualStudio中,它似乎是一个文档化的特性。