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)来调试固件工程的总结就完成了。

这个过程比刚开始做实验时,思路清晰了很多。

等以后按照这个笔记来做调试配置,要省心很多。

END

相关推荐
毕设源码-钟学长11 小时前
【开题答辩全过程】以 公交管理系统为例,包含答辩的问题和答案
java·eclipse
毕设源码-钟学长19 小时前
【开题答辩全过程】以 基于SSM的考研信息共享平台为例,包含答辩的问题和答案
java·eclipse
mike04121 天前
Eclipse+maven+selenium自动化测试用例入门
selenium·eclipse·maven
毕设源码-朱学姐2 天前
【开题答辩全过程】以 基于JavaWeb的疾病查询系统的设计与实现为例,包含答辩的问题和答案
java·eclipse
慧都小项2 天前
JAVA自动化测试平台Parasoft Jtest 插件Eclipse/IDEA安装教程
java·软件测试·测试工具·eclipse·intellij-idea
毕设源码-朱学姐3 天前
【开题答辩全过程】以 高校电子教室在线考试系统为例,包含答辩的问题和答案
java·eclipse
openinstall全渠道统计3 天前
开发者指南:广告投放系统搭建与前后端数据打通全流程
windows·git·oracle·eclipse·sqlite·github
毕设源码-赖学姐3 天前
【开题答辩全过程】以 高校课程建设管理系统为例,包含答辩的问题和答案
java·eclipse
曹牧3 天前
Eclipse 中 SVN 操作指南
java·svn·eclipse