文章目录
-
- [eclipse-embedcpp + JLink-edu-mini + MKS SGEN_L V1.0 调试固件工程 v1](#eclipse-embedcpp + JLink-edu-mini + MKS SGEN_L V1.0 调试固件工程 v1)
- 概述
- 笔记
- 硬件连接
- 软件环境
- 固件先要在命令行下编译过才行
- 启动eclipse-embedcpp的脚本
- 将makefile工程导入eclipse-embedcpp
- 如果要想正常单步调试,必须要用eclipse-embedcpp的向导来安装CMSIS的包
- 用eclipse-embedcpp来安装CMSIS包
- 导入makefile工程
- 配置arm-gnu工具链
- 在配置调试选项前,先设置工程对应的MCU
- 配置调试选项
- 试一下单步调试是否好使
- 备注
- END
eclipse-embedcpp + JLink-edu-mini + MKS SGEN_L V1.0 调试固件工程 v1
概述
正在学习冰沙相关的工程(LPC17xx-DFU-Bootloader-triffid, Smoothieware), 现在硬件调试环境已经搭建完成,做个总结。
前面已经实验了openocd + jlink-edu-mini来调试固件工程,可以调试,但是很慢。特别是Smoothieware工程,下载到板子中都要很久,不能忍。openocd用法很简单,没啥可以多配置的,不好用就是不好用。如果是刚需,能用总比不能用强。如果有的选的话,就不用openocd.
开始以为是JLink-edu-mini的问题,正好LPC17xx-DFU-Bootloader-triffid中有个MDK4的配置,用MDK4配合jlink-edu-mini速度嗖嗖的。
jlink-edu-mini的速度可以设置为10MHZ.
我不想用MDK4, 因为开源工程大都是makefile的工程。如果将makefile工程移植到MDK4工程,麻烦死了。
所以我现在用eclipse-embedcpp,就是为了方便的导入/学习/单步开源的makefile工程。
现在所有的embedIDE, 对JLink支持的都是最好的。既然我有jlink-edu-mini, 也不去想用手头其他的硬件调试器了。就用jlink-edu-mini.
eclipse-embedcpp中调试配置中,有好几个JLink调试器的配置可选,试了一下,只有最后一个官方JLink的配置好使。
其他配置,都不能正确的从main()开始单步,明显搞错了。
如果不写这个总结,以后用到时,看前面相关的笔记,拼在一起,也能想起来怎么用,不过很麻烦,很零碎。
当实验通过时,也有一些前面实验没记录的细节(e.g. CMSIS包的安装; 如果手工将所有窗口都关了,如何恢复).
在这个笔记中,将从启动eclipse-embedcpp的脚本到单步调试到main(), 都记录一下(包括一些值得注意的细节)。以后再用这个配置来做实验的时候,回头来看一眼,就能简单复现实验环境。
笔记
硬件连接
先做了Jlink的测试 = openpnp - Smoothieware - MKS SGEN_L V1.0 + JLink-edu-mini 连接测试
上面实验只接了板子和Jlink
在上面实验的基础上,又接了USB接口的USB线,串口线到电脑的USBhub.
这样实验的接线就全了。

1 = Jlink-edu-mini + 转接板(1.27mm to 2.54mm排针转换)
2 = 24V电源(实际用DC可调电源供电17V)
3 = MCU的USB接口
4 = MCU的串口 + ttl-usb模块
5 = SD卡
软件环境
JLink_Windows_V894_x86_64.exe 安装, 如果被zadig-2.9.exe替换过驱动,重新装一次,驱动就恢复了。
eclipse-embedcpp-2025-12-R-win32-x86_64.zip 解压。
固件先要在命令行下编译过才行
我没有用官方的编译方式,麻烦。
我选择在msys2-mingw64下先编译过,然后再导入eclipse-embedcpp.
不用担心工具链和官方版本不一样,就会出问题。LPC17xx-DFU-Bootloader-triffid早期版本就出过一个gcc6高版本时,SD卡不能操作的问题(openpnp - LPC17xx-DFU-Bootloader - SDCARD_V2HC可以正常使用的git提交点),官方最新版没有这个问题。
如果arm-gcc版本和官方不一致,可能在学习早期版本时会有问题。不过,我们大部分人都是从官方发布的最新版或者稳定版上开始的,编译器版本影响不大。
编译工程的笔记:
openpnp - Smoothieware - 固件工程编译(msys2-mingw64环境)
上面笔记将Smoothieware在msys2-mingw64下编译过了。
Smoothieware工程中没有使用硬件调试器的SWD接口来调试,而是使用了内置的MRI库,用串口+GDB来调试。
这上面笔记基础上,打掉MRI, 将代码开始地址改为从0开始(而不是从0x4000开始), 可以正常单步调试了,已经写了笔记(因为实验还没做完,笔记还没改变为公开状态)。
openpnp - LPC17xx-DFU-Bootloader - 固件调试环境搭建
上面笔记将LPC17xx-DFU-Bootloader在msys2-mingw64下编译过了。
启动eclipse-embedcpp的脚本
如果只是手工启动了eclipse-embedcpp, 即使配置好了工具链,也会编译不过。
原因: 开源工程的makefile中,除了make, arm-none-eabi-gcc, 可能还用到了其他命令(git, find, grep)
只要在msys2-mingw64中编译过了,将msys2环境, git环境,工具链环境都代入eclipse-embedcpp的运行环境path中,在eclipse-embedcpp中配置好了工具链,就是可以编译过的。
所以,才需要一个脚本来启动eclipse-embedcpp,而不是直接手工启动eclipse-embedcpp。
start_only_embedcpp.bat
bash
@echo off
rem @file start_only_embedcpp.bat
rem @breif 单独启动embedcpp, 不用去目录中单独找了
rem 在embedcpp用make编译makefile时,还需要msys2中的其他程序(e.g. find, grep), 所以要带上msys2中所有程序的path
rem for git.exe
set path=C:\Program Files\Git\cmd;%path%
rem for make.exe and msys2环境中的make周边程序, 只有make时,编译不过,还需要其他程序(e.g. find)
set path=C:\msys64\mingw64\bin;C:\msys64\usr\bin;%path%
rem for eclipse.exe
set path=D:\tools\eclipse\eclipse-embedcpp-2025-12-R-win32-x86_64\eclipse;%path%
start eclipse.exe
cmd /k "echo %~nx0 && title %~nx0"
rem 当启动eclipse之后,此cmd还在。在此cmd中,单独运行 make clean && make all 能通过,在eclipse中才能编译通过。
将makefile工程导入eclipse-embedcpp
导入前注意事项
eclipse-embedcpp启动后,不要勾选默认的工作区。
一个工程最好开一个单独的工作区。

eclipse-embedcpp的工作区不要和项目根目录在一起。
如果eclipse-embedcpp升级了版本,最好重新导入makefile工程(不麻烦)
项目目录中,eclipse-embedcpp也会留下配置文件,如果要重新导入makefile, 将项目目录中的配置用sourcetree移除。

如果要想正常单步调试,必须要用eclipse-embedcpp的向导来安装CMSIS的包
当发现只有用调试配置中的"GDB SEGGER J-Link Debugging"向导时,单步调试才好使(才能从main()开始)。
此时如果没安装CMSIS包,会显示Device-name没填的错误,导致无法单步调试。



用eclipse-embedcpp来安装CMSIS包
如果只是为了编译工程,只要makefile依赖的环境正常,直接就能编译过。和CMSIS包没关系。
装CMSIS包,主要是为了正常单步调试。
现在开一个新工作区来做实验,不过CMSIS包不是针对工程或者工作区的,而是全局的。
CMSIS包的位置是没办法指定的,好像是和当前用户的名称有关。
因为我已经安装完,只是记录一下,以便下次在新环境(e.g. win10重新装了,或者在新用户身份下使用eclipse-embedcpp).

开个新工作区做实验。
每次启动时,都不要勾选默认的工作区,方便给每个工程开单独的工作区。
如果窗口布局不对劲了,重置窗口布局
如果自己手工关掉了一些工具条和窗口,导致操作和自己笔记记录的不同。
如果做个最极端的实验,手欠的将IDE所有能叉掉的框框都叉掉了。那么就看到如下的IDE窗口布局.
如果认为关掉eclipse-embedcpp,再打开eclipse-embedcpp,窗口布局就恢复了,那就会失望了。

可以重置窗口布局。

我的个天,reset布局变灰不能操作。
尝试打开默认布局。


现在默认窗口就回来了。

如果在此默认的窗口中,手欠,将框框都叉掉了,如下。

可以针对于这个大窗口,将布局重置。


叉掉的框框又回来了,可以继续干活了。

打开CMSIS包向导



我这是已经刷新过CMSIS包列表。
如果是第一次,需要点击那个红圈框中的CMSIS包列表信息刷新按钮。
如果是第一次,会在console窗口看到log, 说自己的用户名目录下的一个目录为CMSIS的包目录。
bash
C:\Users\当前用户名\AppData\Roaming\CMSIS-Packs

第一次时,该CMSIS包目录下只有一个配置文件.repos.xml, 里面有一个总目录文件,包含所有的包该去哪里下载。
试了访问了https://www.keil.com/pack/index.pidx,在浏览器中返回了一个巨大的XML文件。

eclipse-embedcpp根据https://www.keil.com/pack/index.pidx返回的内容,就知道有多少种MCU可以被支持,每种MCU的CMSIS包去哪里下载。
点击CMSIS包信息刷新按钮,eclipse-embedcpp就会弹出一个进度框,慢慢去根据返回的XML内容,将所有MCU内容都缓存到本地C:\Users\chenx\AppData\Roaming\CMSIS-Packs\.cache,这些要缓存的信息非常大,且要访问一些受限的站点(e.g. github),需要保持网络畅通。
也有一些包所在的站点的包被删了,或者访问不到,此时点击弹框中的"忽略所有",就可以让eclipse-embedcpp慢慢去刷新下载。
eclipse-embedcpp如果下载包的信息不更新了(等了10分钟,下载包的提示也不变化,有可能eclipse-embedcpp出bug了),用任务管理器杀掉eclipse-embedcpp,再打开eclipse-embedcpp,重新刷新,直到刷新完成。

因为网速非常低,要下载1个小时左右。
等下载完,最好先备份一下,等以后再从头使用eclipse-embedcpp, 就观察一下console窗口的日志,看eclipse-embedcpp将CMSIS包放在哪个目录,将备份释放到那里,就不用去网上下载了。

刷新完后,就可以按照自己板子的MCU型号去找包来安装了

现在的实验板对应的MCU是LPC1768, 从左边列表找到NXP文件夹,展开,找LPC1700, 然后在中间view选中LPC1700_DFP下的2.7.2节点,点击"CMSIS Packs"view工具条上的安装按钮,很快就能安装完。
此时,再去配置板子的调试选项时,就能选设备名称为LPC1768, 单步调试就不会缺东西了。
回到默认的工程源码窗口



导入makefile工程
要保持makefile工程只有官方git的内容,而没有旧版eclipse-embedcpp产生的配置文件,也没有其他IDE(e.g. MDK4, MDK5)的文件(e.g. obj目录),这可以用git工具(sourcetree,git命令本身)来确认。
要确保在msys2-mingw64环境下已经将工程用arm-gcc工具链编译过。



配置arm-gnu工具链
刚导入的工程,因为没有配置arm-gnu工具链,clear工程和build工程时,是没有在命令行下编译的效果的(根本没干活)。
所有的工程配置,都在工程节点右键菜单的属性条目中。

将arm-gnu工具链选择为自定义,这时用到的arm-gnu工具链,依赖启动eclipse-embedcpp时的脚本。

因为我做的启动eclipse-embedcpp时的脚本,已经将msys2命令行中能编译过工程的path都带上了。
此时, clean prj 和 build prj 都是和msys2-mingw64命令行下编译工程效果是一样的。

此时,经过选择菜单上的"Clean Project"和"Build Project", 工程编译成功,输出了elf供下载和调试。
在配置调试选项前,先设置工程对应的MCU
如果不设置MCU, 调试选项配置无法成功。
这就是为啥需要用eclipse-embedcpp的向导,先装全局的CMSIS的包。因为这些包中有具体MCU的配置(内存布局)。

配置调试选项
在配置调试选项前,确认已经指定了MCU型号。确认工程(makefile中最好用-Og选项来编译)已经清除并且编译过(相当于命令行下已经重新编译了工程,产生了elf输出)。


实验过了,只能是在"GDB SEGGER J-Link Debugging"这个配置上来新建配置,才能使用JLink-edu-mini来嗖嗖快的调试固件工程。
因为前面已经指定了MCU, 现在调试配置上面的红圈处的空白区,不会提示"Device name?"的报错信息。

点击"Search Project ...", 选中工程输出的elf文件。此时会自动填写工程名称和调试用的elf文件。

JLink的GDB服务器选择的是命令行版本 JLinkGDBServerCL.exe
速度选10MHZ, 这个速度已经用JFLASH测试过,没问题。


板子上没有SWO引脚接入,不选SWO选项。
也不选择半主机模式。

在main()入口下断点,连接MCU开始时,都先复位。
最后一步,是要设置MCU对应的SVD文件,这也是装CMSIS包时,一起装上的。
如果不确定位置,可以找一下。


现在单步调试的选项就配置完成了。
试一下单步调试是否好使
保证硬件连接正常(板子上电,JLink和电脑连接正常,用JFLASH测试过)
保证固件工程已经在eclipse-embedcpp正常编译过
调试配置已经完成



从日志看,接口速度是4MHZ, 不是10MHZ, 先不管了,可能还是没设置对。
不过单步开始到停下来,弹框选择还是挺快的。
弹框提示:"是否切到到调试视图",选择"切换"。

从调用链看到,现在是在main()入口,按F6/F5单步调试。

按F6/F5单步调试,速度非常快。几乎刚按下F6, 就已经走到了下一行。非常满意。
备注
至此,用eclipse-embedcpp + JLink(JLink-edu-mini)来调试固件工程的总结就完成了。
这个过程比刚开始做实验时,思路清晰了很多。
等以后按照这个笔记来做调试配置,要省心很多。