在Linux环境下使用JLink一键编译烧录调试包括但不限于Cortex-M芯片,如STM32、SAM、K60等
本文描述了一种通过JLINK下载烧录程序,并配置Vscode脚本,实现一键编译烧录的方案。
在Linux环境下使用JLink编译烧录调试Cortex-M芯片
一.前言
本文是基于makefile
+Jlink
+GDB
+VScode
插件进行一键编译下载烧录
所以前提条件是需要一个Jink
和你的工程是用makefile
进行的(当然你不用makefile也行,但是必须得有.bin or .hex or .elf
)。为什么一定要Jlink,后面再说。
这里就随便用STM32CUBEMX构建一个工程。
二.准备工作
2.1 环境搭建
编译、烧录、调试的核心都是利用VScode
执行脚本,所以需要手动编写脚本,并导入到VScode
的配置中,一键执行。为了使Shell
程序能够正确执行命令,我们需要添加环境。
Jlink
:核心是使用JLinkExe
进行烧录,下载地址:https://www.segger.com/downloads/jlink/
。
需要通过.deb
安装JLink
驱动,否则需要自行添加环境。直到在shell
环境下运行命令JLinkExe
能出现以下界面(得插上Jlink哦):
arm-gcc
:下载地址https://developer.arm.com/downloads/-/gnu-rm
下载解压,并在shell
里根据喜好添加环境变量,比如/etc/environment
,
我就在.bashrc
里添加了,具体流程如图:
保存后,在shell
里输入:arm-none-eabi-gcc -v
,会出现gcc version
的版本号, 输入arm-none-eabi-gdb
会出现gdb的信息:
如果缺少文件,可以试试:sudo apt-get install libncurses5
附上刚才的添加环境的代码:
gedit .bashrc
export PATH=$PATH:/home/kanna/gcc-arm-none-eabi-10.3-2021.10/bin
source .bashrc
2.2 VSCode导入项目
-
打开
VSCode
主界面,左上角点击File-Open Folder
,选择项目根目录即可:
-
修改代码权限:若以前使用
eclipse
会导致某些文档需要root
权限,而由于VSCode
的保护机制,我们并没有这些权限。如果项目存在root
权限的文档,需要在根目录使用命令sudo chmod -R 777 ./*
,会将所有目录与子目录修改为当前用户的权限。
2.3 安装插件
离线安装,需要在插件商城https://marketplace.visualstudio.com/vscode
下载离线包.vsix
然后手动选择离线包安装。当然也可以左侧商店栏搜索安装
必须安装:
C/C++
提供C语言代码编写支持Cortex-Debug
提供可视化调试
离线通过以下方式安装插件:
三.编译
3.1 编写脚本
在项目的根目录,也就是在Makefile
同级目录下创建:flash.sh
,写入并赋予权限
#!/bin/bash
JlinkScript="./flash.jlink"
if [ -f $JlinkScript ]; then
rm $JlinkScript
fi
touch $JlinkScript
echo h > $JlinkScript
echo loadfile $1 >> $JlinkScript
echo r >> $JlinkScript
echo g >> $JlinkScript
echo exit >> $JlinkScript
JLinkExe -device STM32F103C8 -autoconnect 1 -if SWD -speed 4000 -CommanderScript $JlinkScript
- 更多的命令可以在
https://wiki.segger.com/J-Link_Commander
查询 - 如果不是
hex
或需要烧写到指定位置需要添加起始位置。 - 这里的
STM32F103C8
可以填写Jlink
支持的芯片,这就是为什么选Jlink,因为Jlink支持的芯片太多太多辣:
支持以下芯片:https://www.segger.com/downloads/supported-devices.php
然后修改Makefile
:
具体什么意思你得去学习makefile
的规则才行
flash:all
@echo "start to flash:"
@./flash.sh $(BUILD_DIR)/$(TARGET).hex
脚本添加成功后,在项目目录下用shell
使用make flash -j12
或make flash
等命令,均可实现下载:
3.2 配置脚本
在工程.vscode
里添加tasks.json
即可使用Build
与Run Task..
编译、烧录程序,举个最简单的例子:
{
"version": "2.0.0",
"tasks": [
{
"label": "Build",
"type": "shell",
"command": "make all -j12",
"problemMatcher": [],
"group": {
"kind": "build",
"isDefault": true
}
},
{
"label": "Download",
"type": "shell",
"command": "make flash -j12",
"problemMatcher": [],
"group": {
"isDefault": false
}
},
]
}
-
此时有快捷选项和快捷键的
Build
只是编译
-
而
Run Task...
选项手动选择运行的task
,然后选择Download
即可烧录
-
因为根据真实情况,通过编译验证代码是否有误的情况最多,所以将有快捷键和默认任务的
Build
绑定为编译。Download
可以手动选择使用,亦或者通过Debug
时自动烧录。当然,你也可修改自己的task.json
执行自定义任务,毕竟VScode
的核心是调用外部脚本。
四.调试
4.1 添加环境
安装Cortex-Debug
之后,我们需要为该插件配置armToolchainPath
和JLinkGDBServerPath
两个工具的路径,因为这个配置不在.vscode/
下,所以是全局配置
将这两个工具的绝对路径添加到全局设置里(JlinkGDBServer一般就在这):
"cortex-debug.armToolchainPath": "/home/kanna/gcc-arm-none-eabi-10.3-2021.10/bin",
"cortex-debug.JLinkGDBServerPath": "/opt/SEGGER/JLink_V766g/JLinkGDBServer",
4.2 添加启动脚本
因为每一个项目的配置不一样,所以Debug
然后根据项目配置,在.vscode/
目录下添加launch.json
修改配置:
{
"version": "0.2.0",
"configurations": [
{
"type": "cortex-debug",
"request": "launch",
"name": "Debug (J-Link)",
"cwd": "${workspaceRoot}",
"executable": "./build/C8T6.elf",
"servertype": "jlink",
"device": "STM32F103C8",
"interface": "swd",
"preLaunchTask": "Download",
"runToEntryPoint": "main"
}
]
}
解释一下:
preLaunchTask
可以添加我们在task.json
里创建的任务,并且在Debug
执行前,自动执行这些插件,所以我们可以添加刚才的烧录
任务- 如果需要开始
Debug
后自动运行到主函数再暂停,可以将runToEntryPoint
修改为true
,否则改为false
。这样可以更好的跳转到程序入口。 - 该插件的更多脚本命令查询地址:
https://lonesometraveler.github.io/2020/03/27/debug.html
,可根据里面提供的项目自行配置。
4.3 使用
点击Start Debugging
即可:
效果预览:
五.后记
前面.vscode
里面的配置和.flash
可以自己保存起来,添加到工程里方便。
还有就是使轻量级的编辑器VScode
更强大的方式是安装更多的插件,笔者推荐几个:
-
C++ Intellisense
:提供代码补全、实时错误检查与改进等功能 -
vscode-icons
: 为左侧资源目录提供更好的浏览体验,根据文件不同,显示简明的图标 -
One Dark Pro
:一个提供比默认暗色主题代码颜色层次更丰富的主题 -
如果只使用虚拟机作为一个编译的工具,那么Windows的Linux子系统,
Windows Subsystem for Linux(WSL)
可能是比虚拟机更好的一个选择。
更多推荐
所有评论(0)