[单片机芯片] CH32V103 VScode及公版GCC配置(抛弃臃肿的MRS)

[复制链接]
565|20
手机看帖
扫描二维码
随时随地手机跟帖
obit|  楼主 | 2022-6-16 15:57 | 显示全部楼层 |阅读模式
本帖最后由 obit 于 2022-6-17 00:59 编辑

#申请原创#
一:下载以下软件
1.mingw64
x86_64-8.1.0-release-posix-seh-rt_v6-rev0.7z
https://nchc.dl.sourceforge.net/project/mingw-w64/Toolchains%20targetting%20Win64/Personal%20Builds/mingw-builds/8.1.0/threads-posix/seh/x86_64-8.1.0-release-posix-seh-rt_v6-rev0.7z
将bin目录下的mingw32-make.exe改名成make.exe
2.msys64
msys2-x86_64-latest.tar.xz
https://mirrors.tuna.tsinghua.edu.cn/msys2/distrib/msys2-x86_64-latest.tar.xz
这里的make命令不支持中文路径,改名成任意名字
3.xPack GNU GCC 最新公版
xpack-riscv-none-elf-gcc
https://github.com/xpack-dev-tools/riscv-none-elf-gcc-xpack/releases/download/v12.1.0-2/xpack-riscv-none-elf-gcc-12.1.0-2-win32-x64.zip
4.OpenOCD
从MRS安装目录提取,linux用户可直接从http://file.mounriver.com/tools/MRS_Toolchain_Linux_x64_V1.40.tar.xz下载
二:分别解压上述软件到指定目录,并在系统环境变量添加上述软件bin目录
此电脑->属性->高级系统设置->环境变量->Path
三:编写Makefile
四:VScode安装Shortcut Menu Bar扩展
在"配置->扩展->Shortcut Menu Bar configuration"中为VScode增加四个Button,
执行命令分别为
workbench.action.tasks.build
workbench.action.tasks.runTask | clean
workbench.action.tasks.runTask | download
workbench.action.debug.start
依次是构建、清除、下载、调试
五:配置VScode json文件,相关文件路径请改为自己的安装目录
tasks.json
{
    "tasks": [
        {
            "type": "shell",
            "label": "build",
            "command": "make -j",
            "problemMatcher":"$gcc",
            "group": {
                "kind": "build",
                "isDefault": true
            },
            "detail": "调试器生成任务。"
        },
        {
            "type": "shell",
            "label": "clean",
            "command": "make purge",
            "group": {
                "kind": "build"
            },
            "detail": "清除所有生成文件"
        },
        {
            "type": "shell",
            "label": "erase",
            "command": "openocd",
            "args": [
                "-c",
                "adapter driver wlink;wlink_set;jtag newtap riscv cpu -irlen 5 -expected-id 0x00001;target create riscv.cpu.0 riscv -chain-position riscv.cpu;riscv.cpu.0 configure  -work-area-phys 0x80000000 -work-area-size 10000 -work-area-backup 1;flash bank riscv.flash wch_riscv 0x00000000 0 0 0 riscv.cpu.0",
                "-c",
                "init;halt;flash erase_sector wch_riscv 0 last",
                "-c",
                "exit"
            ]
        },
        {
            "type": "shell",
            "label": "program",
            "command": "openocd",
            "args": [
                "-c",
                "adapter driver wlink;wlink_set;jtag newtap riscv cpu -irlen 5 -expected-id 0x00001;target create riscv.cpu.0 riscv -chain-position riscv.cpu;riscv.cpu.0 configure  -work-area-phys 0x80000000 -work-area-size 10000 -work-area-backup 1;flash bank riscv.flash wch_riscv 0x00000000 0 0 0 riscv.cpu.0",
                "-c",
                "init;halt;program build/output.hex verify;wlink_reset_resume;exit"
            ]
        },
        {
            "label": "download",
            "dependsOrder": "sequence",
            "dependsOn": [
                "erase",
                "program"
            ]
        },
        {
            "label": "start-openocd",
            "type": "shell",
            "command": "openocd",
            "args": [
                "-c",
                "adapter driver wlink;wlink_set;jtag newtap riscv cpu -irlen 5 -expected-id 0x00001;target create riscv.cpu.0 riscv -chain-position riscv.cpu;riscv.cpu.0 configure  -work-area-phys 0x80000000 -work-area-size 10000 -work-area-backup 1;flash bank riscv.flash wch_riscv 0x00000000 0 0 0 riscv.cpu.0",
            ],
            "isBackground": true,
            "problemMatcher": [
                {
                  "pattern": [
                    {
                      "regexp": ".",
                      "file": 1,
                      "location": 2,
                      "message": 3
                    }
                  ],
                  "background": {
                    "activeOnStart": true,
                    "beginsPattern": ".",
                    "endsPattern": ".",
                  }
                }
            ],
            "detail": "执行openocd后台"
        },
        {
            "label": "stop-openocd",
            "command": "echo ${input:terminate}",
            "type": "shell"
        }
    ],
    "inputs": [
        {
            "id": "terminate",
            "type": "command",
            "command": "workbench.action.tasks.terminate",
            "args": "terminateAll"
        }
    ],
    "version": "2.0.0"
}

launch.json
{
    "configurations": [
        {
            "name": "C/C++: riscv-none-elf-gcc.exe 生成和调试活动文件",
            "type": "cppdbg",
            "request": "launch",
            "program": "${workspaceFolder}/build/output.elf",
            "args": [],
            "stopAtEntry": false,
            "cwd": "${workspaceFolder}",
            "environment": [],
            "externalConsole": false,
            "MIMode": "gdb",
            "miDebuggerPath": "riscv-none-elf-gdb.exe",
            "setupCommands": [
                {
                    "description": "设置MCU架构",
                    "text": "set architecture riscv:rv32",
                    "ignoreFailures": false
                },
                {
                    "description": "指定调试目标文件",
                    "text": "file C:/Users/hys/Desktop/CH32V103/build/output.elf",
                    "ignoreFailures": false
                },
                {
                    "description": "连接GDB Server",
                    "text": "target extended-remote :3333",
                    "ignoreFailures": false
                },
                {
                    "description": "加载到MCU",
                    "text": "load",
                    "ignoreFailures": false
                },
                {
                    "text": "break main"
                }
            ],
            "preLaunchTask": "start-openocd",
            "postDebugTask": "stop-openocd",
//            "launchCompleteCommand": "None",
        }
    ],
    "version": "2.0.0"
}

六:注意
代码中所有__attribute__((interrupt("WCH-Interrupt-fast"))),需改为__attribute__((interrupt()))。参见http://m.**/bbs_thread-1155567-1-1.html
CFLAGS -march=rv32imac要改为-march=rv32imac_zicsr_zifencei
LDFLAGS 要增加-gdwarf-4,默认是dwarf-5调试有问题
GDB必须先执行命令set architecture riscv:rv32,否则连接Target会报错
Linux用户就不用下载mingw64和msys64了,只要设置好环境变量,gcc下载for linux的,其他基本一致




使用特权

评论回复
ufbycd| | 2022-6-17 21:51 | 显示全部楼层
官方的MRS_Toolchain_Linux包里有gcc呀,为何用公版。官方跟公版应该有点不一样。

使用特权

评论回复
评论
obit 2022-6-20 09:41 回复TA
官方是32位的,公版64位,而且编译出来的代码(14k的程序)大约小了200个字节,算是升级了吧 
ufbycd| | 2022-6-17 22:04 | 显示全部楼层
哦,是windows用户才要用公版。
不过话说,在2022年如果觉得eclipse类的IDE“臃肿”,那就应该是所使用电脑配置低了。我2019年就新配了16核心CPU、32G内存、2T固态硬盘的机器,eclipse之类的IDE装了好多个,一点也不觉得“臃肿”。
会用eclipse的话,其功能还是要比VS Code强点。

使用特权

评论回复
评论
obit 2022-6-20 09:47 回复TA
java的东西解释执行,效率总是差了那么点,一点洁癖了吧 普通笔记本的配置会稍微低点,除非是高端机器 
obit|  楼主 | 2022-6-17 23:25 | 显示全部楼层
ufbycd 发表于 2022-6-17 22:04
哦,是windows用户才要用公版。
不过话说,在2022年如果觉得eclipse类的IDE“臃肿”,那就应该是所使用电脑 ...

java类的东西都是解释执行,效率上总是差了点,一直很反感这东西,一点洁癖吧,应该有不少人同感。
笔记本的配置会低不少,除非很高端的

使用特权

评论回复
obit|  楼主 | 2022-6-17 23:29 | 显示全部楼层
ufbycd 发表于 2022-6-17 21:51
官方的MRS_Toolchain_Linux包里有gcc呀,为何用公版。官方跟公版应该有点不一样。 ...

官方的gcc是32位,公版是64位,而且编译出来的代码大约能小个200字节,算是升级了吧

使用特权

评论回复
xXjs| | 2022-6-20 09:43 | 显示全部楼层
我有这功夫下make工具,下公版GCC,还有“第三步自己写Makefile”,第四步做按钮,写配置。
请问我去下个插件不香么??

使用特权

评论回复
评论
obit 2022-6-20 11:50 回复TA
@xXjs :"工程移植后,头、库目录又要一个个添加,大工程呢怎么去除编译、单编译一个文件,就和执行命令行一模一样" 可以用find命令遍历目录树生成所有.h目录列表,就不需要一个个添加了,只要在当前目录中就自动编译。 另外你可以设置一个单独的app目录,还是可以用find遍历目录树,里面放一个文件就单编译一个文件,放两个就编译两个 
xXjs 2022-6-20 10:26 回复TA
@obit :使用过Embedde IDE挺好用的,需要在Win7以上。主要没有makefile确实不方便,自己写makefile就像按文件分类后各个执行一样,唉都是泪。全是全也不臃肿了,可麻烦。工程移植后,头、库目录又要一个个添加,大工程呢怎么去除编译、单编译一个文件,就和执行命令行一模一样。不过这一套是抽象的可应用到所有嵌入式厂家,VSCode只是个形式,后续有好的专门的插件就更好 
obit 2022-6-20 10:02 回复TA
插件确实香,但好像目前没有for沁恒riscv的吧。 makefile有两个好处,一是可以完全按自己需要定制,二是可以脱离IDE,特殊场合只有make也能用 还有个好处,就是一套工具包打天下,机器不用装各种各样的IDE一大堆 至于做按钮那就点点鼠标的事,花不了多少时间 
ufbycd| | 2022-6-21 02:50 | 显示全部楼层
obit 发表于 2022-6-17 23:25
java类的东西都是解释执行,效率上总是差了点,一直很反感这东西,一点洁癖吧,应该有不少人同感。
笔记 ...

哦我的CPU说错了,实际是8核16线程。其实稍微新点的电脑跑java都没什么问题。
像我的机器也不是很高端,但使用并行编译时,完整编译包含约50个C文件的工程耗时从来不会超过2秒。

使用特权

评论回复
obit|  楼主 | 2022-6-21 10:18 | 显示全部楼层
ufbycd 发表于 2022-6-21 02:50
哦我的CPU说错了,实际是8核16线程。其实稍微新点的电脑跑java都没什么问题。
像我的机器也不是很高端, ...

编译时是调用gcc,这个是原生的win32程序,并非解释执行。
看看启动速度吧,从点击图标到进入ide要几秒时间

使用特权

评论回复
ufbycd| | 2022-6-21 12:57 | 显示全部楼层
本帖最后由 ufbycd 于 2022-6-21 13:05 编辑
obit 发表于 2022-6-21 10:18
编译时是调用gcc,这个是原生的win32程序,并非解释执行。
看看启动速度吧,从点击图标到进入ide要几秒时 ...

开发工具都是一样开着的,我的台式机也很少关机,都是休眠或待机,看启动速度有何意义?
即使是启动速度我也测了下:mounriver-studio耗时5秒左右,VS Code则是3秒左右。两者其实差不了多少。
事实上,VS Code是基于web技术的,相当于浏览器,其实并不轻量。
真正轻量的是本地化的编辑器,如我常用Linux KDE桌面环境的kate编辑器,功能跟原生VS Code差不多(Code的可视化滚动条就抄kate的),只不过只为只支持Linux没什么插件,其启动速度才是秒开的。

真的在意这些的话,还不如升级下自己谋生的工具来得实在。

使用特权

评论回复
ufbycd| | 2022-6-21 13:19 | 显示全部楼层
补充下,以前要想在Windows上用kate不得不把KDE也装上,而现在kate已经能够和KDE分离了,Windows下也可以单独安装使用,甚至已经进入了微软的官方应用商店。
感兴趣的可以去了解下:https://kate-editor.org/zh-cn/

使用特权

评论回复
obit|  楼主 | 2022-6-21 15:04 | 显示全部楼层
ufbycd 发表于 2022-6-21 12:57
开发工具都是一样开着的,我的台式机也很少关机,都是休眠或待机,看启动速度有何意义?
即使是启动速度我 ...

一个5秒,一个3秒,差了快一倍还不够吗
看来我2019配的4核8线程,16G内存,2.5T SSD笔记本要升级了

使用特权

评论回复
ufbycd| | 2022-6-21 23:35 | 显示全部楼层
说真的,VS Code内置了chromium,本质上主是个浏览器,一样是臃肿。不如用kate这种秒开的本地化的软件,它也跟VS Code一样可以使用clangd作语言服务器后端,一样支持语法分析,输入时的动态语法检测、自动补全,编译输出的警告错误的源码定位等。

使用特权

评论回复
obit|  楼主 | 2022-6-22 13:09 | 显示全部楼层
ufbycd 发表于 2022-6-21 23:35
说真的,VS Code内置了chromium,本质上主是个浏览器,一样是臃肿。不如用kate这种秒开的本地化的软件,它也 ...

用kate还不如用Sublime Text,整个安装包才十几兆,还少了那些花哨的功能

使用特权

评论回复
ufbycd| | 2022-6-22 14:35 | 显示全部楼层
obit 发表于 2022-6-22 13:09
用kate还不如用Sublime Text,整个安装包才十几兆,还少了那些花哨的功能

付费软件……

使用特权

评论回复
obit|  楼主 | 2022-6-22 20:23 | 显示全部楼层

不知道我国国情吗

使用特权

评论回复
ufbycd| | 2022-6-23 08:01 | 显示全部楼层
obit 发表于 2022-6-22 20:23
不知道我国国情吗

谋生工具都名不正言不顺。结贴吧,多说无益。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则