使用VSCODE搭建32位MCU开发环境

1. 环境搭建

本节了描述了使用VSCode + ARM_toolchain + Jlink server(or OpenOCD)开发的环境
demo附后

1.1 软件安装

1.1.1 软件与工具清单

  • 基本工具
    1. vscode:编辑器,基本环境,安装cortex-debug组件
    2. GNU Arm Embedded Toolchain: 不建议下载最新版,笔者下载的是GNU Arm Embedded Toolchain 9-2020-q2-update这个版本,最新版本会有问题,暂未解决
    3. Mingw-w64 GCC for Windows 64 & 32 bits:安装(或解压缩)完毕, 会得到一个bin目录(后面要添加系统环境变量里面Path)。安装之后添加环境变量之后,可以将bin目录下的mingw32-make.exe重命名为make.exe,后续即可直接使用make命令。
  • 使用openocd时:
    1. openocd:一个开源的片上调试器(Open On-Chip Debugger),OpenOCD建议直接下载编译好的可执行文件
    2. zadig:用来装jlink 的USB驱动的,Jlink插上就能装驱动,但是直接装的OpenOCD识别不到。不用JLink可视这条。
  • 使用cmake构建工程时:
    1. cmake

1.1.2 安装,添加环境变量

Arm工具链安装目录下的bin文件夹和openOCD安装目录下的bin文件夹都添加到PATH环境变量中。可打开powershell,分别键入如下命令,若看到版本信息,则说明安装成功

arm-none-eabi-gcc --v
arm-none-eabi-gdb --v
openocd --version
make -v
cmake -version

arm-gcc -v
arm_gdb-v
openocd

make-v.

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
创建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

  2. arm_noneabi_gcc编译出的文件

    gcc

可明显看出无论是调试文件,十六进制文件与二进制文件,gcc编译出的文件大小均比armcc大

2.2 log信息

  1. armcc
    armcclog

    • 烧写的时,占用FLASH的段为: Code + RO-data + RW-data = 7924
    • 程序运行时,芯片内部RAM占用的空间为:RW-data + ZI-data = 2160
  2. arm_noneabi_gcc
    gcclog

    • 烧写的时,占用FLASH的段为: FLASH = text + data = 30720
    • 程序运行时,芯片内部RAM占用的空间为:RAM = bss + data = 3940

使用gcc开启多核编译时编译效率比armccv5高,但编译后的文件体积更大,胜在免费
若有不对,望指正
demo下载

  • 24
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值