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

在vscode上安装opencv_编辑器


在vscode上安装opencv_环境变量_02


在vscode上安装opencv_编辑器_03

在vscode上安装opencv_编辑器_04

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

在vscode上安装opencv_ide_05


在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编译出的文件
  2. 在vscode上安装opencv_vscode_06

  3. arm_noneabi_gcc编译出的文件

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

2.2 log信息

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

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