核心内容摘要
撸撸社区:点燃你的热爱,点亮你的精彩
在用VScode 开发stm32的时候有些场景下不得不用GB2312编码格式的c文件如采用液晶中文字库等。
常规的UTF-8格式下一个中文字符占用3个字节而GB2312是占用2字节的为能让字库正常识别中文不得不定义中文数组编译的时候就是一堆警告。
如果想让 VS Code 的智能感知也识别这些参数避免编辑器标红同时方便一键编译可修改c_cpp_properties.json和tasks.json解决方法1》修改tasks.json一键编译用按 CtrlShiftP → 输入Tasks: Configure Task→ 选择Create tasks.json file from template→ 选择Others修改生成的tasks.json添加编译参数{ // See https://go.microsoft.com/fwlink/?LinkId733558 // for the documentation about the tasks.json format version:
2.
0, tasks: [ { label: echo, type: shell, command: echo Hello }, { // 任务名称自定义比如 编译menu_fun.c label: build-menu-fun, type: shell, // 编译器路径根据你的实际路径修改嵌入式替换为 arm-none-eabi-gcc command: arm-none-eabi-gcc, // 嵌入式编译器 args: [ // 输出可执行文件名称比如生成 menu_fun.exe -o, ${fileDirname}/App/OLED/menu_fun, // 要编译的文件当前目录下的 menu_fun.c ${fileDirname}/App/OLED/menu_fun.c, // 核心适配 GB2312 中文编码 -finput-charsetGB2312, -fexec-charsetGB2312, // 屏蔽中文数组触发的警告 -Wno-multichar, // 可选屏蔽其他可能的中文相关警告 -Wno-implicit-int, -Wno-unused-variable ], // 设置为默认构建任务按 CtrlShiftB 可直接执行 group: { kind: build, isDefault: true }, // 识别 GCC 编译错误/警告 problemMatcher: [$gcc], // 任务描述可选 detail: 编译 menu_fun.c适配 GB2312 中文编码屏蔽多字符警告 } ] }示例中仅屏蔽了根目录/APP/OLED/menu_func.c如有其他文件可依样添加。
2》修改c_cpp_properties.json语法检查用tasks.json只负责编译编辑器语法检查需单独配置c_cpp_properties.json格式如下{ configurations: [ { name: Win32, // 或 ARM-GCC嵌入式 includePath: [${workspaceFolder}/**], defines: [], compilerPath: C:/MinGW/bin/gcc.exe, // 你的 GCC 路径 cStandard: c17, cppStandard: c17, intelliSenseMode: gcc-x64, // 核心添加编码和警告参数 compilerArgs: [ -finput-charsetGB2312, -fexec-charsetGB2312, -Wno-multichar ] } ], version: 4 }3》验证是否生效编译完成后可通过以下方式验证参数是否生效编译时无「multi-character character constant」「illegal character encoding」等警告运行生成的可执行文件中文字符能正常显示无乱码若用嵌入式编译器可通过arm-none-eabi-objdump -s test.elf查看字符串段中文字符的十六进制值符合 GB2312 编码如「中」是 0xD6 0xD0。