VSCode,定义要在任务,lauch和cpp属性中使用的自定义变量

问题描述

我正在使用北欧NRF52设置VSCode进行嵌入式开发。 我注意到在nrf_sdk中有几个板和几个软设备的示例。 我已经看到,可以引用先前在任务,启动和扩展属性中都定义的env变量,例如:c_cpp,stm32-for-vscode。但是,如何在工作区文件中将一节定义为my_vars,使工作区文件看起来像这样?

{
"my_vars": {
    "BOARD_NAME": "NRF52840_MDK_USB_DONGLE","MCU_NAME": "NRF52840","SOFT_DEVICE": "S140","BOARD_VARIANT_PATH": "/pca10059/mbr"

},"launch": {
"version": "0.2.0","configurations": [
    {
    "name": "Cortex Debug","cwd": "${workspaceRoot}","executable": "${workspaceFolder}${my_vars:BOARD_VARIANT_PATH}/armgcc/_build/${my_vars:MCU_NAME}_xxaa.out","request": "launch","type": "cortex-debug","servertype": "jlink","device": "nrf52","interface": "swd","ipAddress": null,"serialNumber": null,"armToolchainPath": "${env:VSARM}/armcc/bin/"
    },]

},"folders": [
    {
        "path": "."
    }
],"settings":{
    // "C_Cpp.name": "nRF52840 DK","C_Cpp.default.includePath": [
        "${workspaceFolder}/**","${env:GNU_GCC}/arm-none-eabi/include","${env:NRF_SDK}/modules/**","${env:NRF_SDK}/components/**"
    ],"C_Cpp.default.defines":  [
        "${my_vars:BOARD_NAME}","CONfig_GPIO_AS_PINRESET","INITIALIZE_USER_SECTIONS","FLOAT_ABI_HARD","NRF52","${my_vars:MCU_NAME}_XXAA","NRF_SD_BLE_API_VERSION=6","${my_vars:SOFT_DEVICE}","SOFTDEVICE_PRESENT","SWI_disABLE0"
    ],"C_Cpp.default.compilerPath": "${env:GNU_GCC}/bin/arm-none-eabi-gcc","C_Cpp.default.cStandard": "c11","C_Cpp.default.cppStandard": "c++17","C_Cpp.default.intelliSenseMode": "clang-x64"
},"tasks": {
    "version": "2.0.0",// See https://go.microsoft.com/fwlink/?LinkId=733558
        // for the documentation about the tasks.json format
        "tasks": [
        {
            "label": "nRF52 build","type": "shell","command": "make","options": {
                "cwd": "${workspaceFolder}${my_vars:BOARD_VARIANT_PATH}/armgcc"
            },"problemmatcher": [],"group": {
                "kind": "build","isDefault": true
            }
            },{
            "label": "nRF52 build clean","command": "make clean","isDefault": true
                }
            },{
            "label": "nRF52 flash","command": "make flash","isDefault": true
            },"problemmatcher": []
            },{
            "label": "nRF52 dfu upload","command": "make bootload",{
            "label": "nRF52 flash_softdevice","command": "make flash_softdevice",},{
            "label": "nRF52 sdk_config","command": "make sdk_config",{
            "label": "nRF52 erase","command": "make erase",}
        ]
}
}

我尝试执行一个名为set_env的任务,在我的情况下,由于我在Windows中,因此运行一个执行以下操作的批处理脚本:

set BOARD_NAME=NRF52840_MDK_USB_DONGLE
set MCU_NAME=NRF52840
set SOFT_DEVICE=S140
set BOARD_VARIANT_PATH=/pca10059/mbr

https://marketplace.visualstudio.com/items?itemName=bmd.stm32-for-vscode一样,这将大大简化SDK示例的使用,并且可能是NRF52 VSCode扩展的潜在工作。

解决方法

看看扩展名Command Variable

它可以将文件的内容用作key-value pairs