# mm32jlink_vscode_gcc **Repository Path**: zaneyu/mm32jlink_vscode_gcc ## Basic Information - **Project Name**: mm32jlink_vscode_gcc - **Description**: 使用VSCODE+GCC开发调试ARM内核单片机 - **Primary Language**: Unknown - **License**: GPL-3.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 3 - **Created**: 2024-09-18 - **Last Updated**: 2024-09-18 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README [toc] # 1. 环境搭建 本节了描述了使用用**VSCode + ARM_toolchain + Jlink server(or OpenOCD)**开发的环境 ## 1.1 软件安装 ### 1.1.1 软件与工具清单 + 基本工具 1. [vscode](https://code.visualstudio.com/):编辑器,基本环境,安装cortex-debug组件 2. [GNU Arm Embedded Toolchain](https://developer.arm.com/downloads/-/gnu-rm): 不建议下载最新版,笔者下载的是**GNU Arm Embedded Toolchain 9-2020-q2-update**这个版本,最新版本会有问题,暂未解决 3. [Mingw-w64 GCC for Windows 64 & 32 bits](https://nchc.dl.sourceforge.net/project/mingw-w64/Toolchains%20targetting%20Win64/Personal%20Builds/mingw-builds/8.1.0/threads-win32/seh/x86_64-8.1.0-release-win32-seh-rt_v6-rev0.7z):安装(或解压缩)完毕, 会得到一个bin目录(后面要添加系统环境变量里面Path)。安装之后添加环境变量之后,可以将bin目录下的mingw32-make.exe重命名为make.exe,后续即可直接使用make命令。 + 使用openocd时: 1. [openocd](https://gnutoolchains.com/arm-eabi/openocd/):一个开源的片上调试器(Open On-Chip Debugger),OpenOCD建议直接下载编译好的可执行文件 2. [zadig](https://zadig.akeo.ie/):用来装jlink 的USB驱动的,Jlink插上就能装驱动,但是直接装的OpenOCD识别不到。不用JLink可视这条。 + 使用cmake构建工程时: 1. [cmake](https://objects.githubusercontent.com/github-production-release-asset-2e65be/537699/e66b53a9-6c84-4bbe-97f1-78471d8b0555?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAIWNJYAX4CSVEH53A%2F20220603%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20220603T053620Z&X-Amz-Expires=300&X-Amz-Signature=391dcbfc6aac68bb7c11568fce8bb7bc7a4f12d2ba17ee377d8d54cbd53ce547&X-Amz-SignedHeaders=host&actor_id=0&key_id=0&repo_id=537699&response-content-disposition=attachment%3B%20filename%3Dcmake-3.23.2-windows-x86_64.msi&response-content-type=application%2Foctet-stream) ### 1.1.2 安装,添加环境变量 Arm工具链安装目录下的bin文件夹和openOCD安装目录下的bin文件夹都添加到PATH环境变量中。可打开powershell,分别键入如下命令,若看到版本信息,则说明安装成功 ```shell arm-none-eabi-gcc --v arm-none-eabi-gdb --v openocd --version make -v cmake -version ``` ![arm-none-eabi-gcc](https://note.youdao.com/yws/api/personal/file/WEB59d9c1e0e8711eab0e846517587a0a9f?method=download&shareKey=4820f7d200659d44909e0d78525b5022) ![arm-none-eabi-gdb](https://note.youdao.com/yws/api/personal/file/WEBa7553d17da195351cb15a21bb5984985?method=download&shareKey=42dc40422ec305953f98e7d1b1f56866) ![openocd](https://note.youdao.com/yws/api/personal/file/WEB923f7c9886d4742fba38f62ef6f42ef4?method=download&shareKey=d81300553b324b17ba838d8fd19eee38) ![make -v](https://note.youdao.com/yws/api/personal/file/WEB1f67a4af791e6a8ceefcb887741c5baf?method=download&shareKey=d3541e29cdc7d1ad79a83ef340452cc8) 均需要出现如图所示的版本信息则说明安装并添加到环境变量成功 ## 1.2 编译 编写好Makefile或者配置Cmake的脚本进行make编译整个工程,需要编译出*.elf文件用以调试 ## 1.3. debug-使用Jlink GDB Server ### 1.3.1 svd文件 SVD是一个组件,它包含完整微控制器系统(包括外设)的程序员视图的系统视图描述 XML 文件。简单来说,VS Code可以通过它来知道外设寄存器的地址分布,从而把寄存器内容展示到窗口中。 ### 1.3.2 配置VS Code的调试功能 代码编译完成后,按下ctrl+shift+d,若工程中没有launch.json文件,出现下图,点击创建launch.json文件,选择cortex-debug ![创建launch.json](https://note.youdao.com/yws/api/personal/file/WEBb88170273a8d92685b3d78ca1522aed3?method=download&shareKey=ff6a5f1066d2463dfeaacd7555486510) 在json文件中输入如下内容 ```json { "configurations": [ { "name": "${workspaceRootFolderName}", "cwd": "${workspaceFolder}", "executable": "${workspaceFolder}/${workspaceRootFolderName}/${workspaceRootFolderName}.elf", "request": "launch", "type": "cortex-debug", "device": "MM32F3277G9P", "runToEntryPoint": "main", "showDevDebugOutput": "raw", "servertype": "jlink", "svdFile": "MM32F3270.svd", } ] } ``` 解释几个选项: - "executable":编译出的二进制文件,也就是最终烧录到单片机中的,这里是elf文件。根据芯片的不同,可能产生不同的名称和后缀 - "request":可以选launch或attach。launch是指启动调试时同时开始执行程序;attcah是指程序已经在运行了,然后开始调试。未测试过attach。 - "type":调试的类型,选cortex-debug,这是我们装的插件。 - "device":目标芯片,如果使用J-LINK GDB Server时必须要设置。 - "svdFile":svd文件的路径。 - "servertype":要选择的gdb server。 - "name":工程名字 保存后,按下F5即可自动烧录并且debug。 ## 1.4 debug-使用openocd (TBD) # 2 armccV5与arm_noneabi_gcc对比 以下对比在编译内容与文件相同的情况下,除启动文件不同。优化等级均为0 ## 2.1 编译出的文件大小 1. armcc编译出的文件 ![armcc](https://note.youdao.com/yws/api/personal/file/WEB8137a23185ebacf365e3d340da597a6a?method=download&shareKey=6b71c41738a927c01b9d538ce6985f0e) 2. arm_noneabi_gcc编译出的文件 ![gcc](https://note.youdao.com/yws/api/personal/file/WEB279f2f126ec0eea752c4c4e4aadd38b1?method=download&shareKey=9c8e93614d215e988bdbab7d3753d60f) 可明显看出无论是调试文件,十六进制文件与二进制文件,gcc编译出的文件大小均比armcc大 ## 2.2 log信息 1. armcc ![armcclog](https://note.youdao.com/yws/api/personal/file/WEBfc67eae7a648ad2cb6caa53a54a010e8?method=download&shareKey=5504154ee344c515a30fb7b452581b16) + 烧写的时,占用FLASH的段为: Code + RO-data + RW-data = 7924 + 程序运行时,芯片内部RAM占用的空间为:RW-data + ZI-data = 2160 2. arm_noneabi_gcc ![gcclog](https://note.youdao.com/yws/api/personal/file/WEB2b2c071876177a1a038d3f9e0649f825?method=download&shareKey=ae3ca381d6f7233c65028156fe6d7bee) + 烧写的时,占用FLASH的段为: FLASH = text + data = 30720 + 程序运行时,芯片内部RAM占用的空间为:RAM = bss + data = 3940 使用gcc开启多核编译时编译效率比armccv5高,但编译后的文件体积更大,胜在免费