debug - eclipseCPP + openocd + 引入arm-gcc makefile工程来单步调试 - 教程

news/2025/11/21 17:46:41/文章来源:https://www.cnblogs.com/yangykaifa/p/19253962

文章目录

    • debug - eclipseCPP + openocd + 引入arm-gcc makefile工程来单步调试
    • 概述
    • 笔记
    • 实验环境
    • 实验
    • 实验的makefile工程
    • 将makefile工程引入eclipseCPP
      • 启动eclipseCPP工程时要带环境
        • start_eclipsecpp_with_arm_gcc_and_make.bat
      • 新建工作区
    • 配置arm-gcc工具链
      • 确认工具链明显没有配置?
      • 配置arm-gcc
    • 配置openocd
      • 指定openocd调试参数
    • 开始调试
    • 备注
    • openocd的提示信息备份
    • END

debug - eclipseCPP + openocd + 引入arm-gcc makefile工程来单步调试

概述

开源工程如果是用IDE建立的工程,跟着人家走就行。

但是如果开源工程是用arm-gcc + makefile工程来实现的,这时,为了单步调试方便,就不能跟着作者的调试思路走。
想当然的就会想将开源工程迁移到可以图形化调试的IDE中。

前面做了实验,已经可以将arm-gcc + makefile的工程导入MCUXpresso来单步调试。
不过,好像MCUXpresso有bug, 导致有些开源工程(arm-gcc + makefile)工程导入MCUXpresso后,无法单步调试。
现象:开始调试后,已经连上了板子上的调试器,但是会快就会显示reset, 调试器进程就断开了。

如果用MCUXpresso自己做的工程当然没问题,能单步调试。这没用啊。
如果不能引入makefile工程并稳定的单步调试,那就不能用MCUXpresso来干这事。

我前面的实验,将正常单步调试的MDK工程,整理了一个makefile工程,产生的elf是一样的. 但是导入MCUXpresso后,无法单步调试。连接板子后,就会显示reset后,就断开了。这明显就是MCUXpresso的LinkServer有bug了。

也不能说一定是LinkServer有bug, 也许是LinkServer要求的elf格式更严格(e.g. elf的cheksum的细节检查更严格之类的问题)
也许导入makefile到MCUXpresso后,可能makefile和.ld的规则控制要更精细,才能生成符合LinkServer要求的elf, 这不是正常研发能搞得定的事情。毕竟不是每一个人都对gcc编译器的内部实验那么熟悉。

MCUXpresso转发arm-none-eabi-gdb的消息时,显示reset连接,错误是未知的reset.
如果硬要去搞定这个问题,就需要看看reset提示是咋来的,要去调试arm-none-eabi-gdb, 这哪是普通研发能搞定的事情?
如果是刚需,那硬着头皮也要去搞(缺啥学啥,堆够时间,弄懂细节,水到渠成)。如果还有其他方法,就去实验其他方法。

今天试了一下eclipseCPP, 导入正常的makefile工程,配好arm-gcc工具链 + openocd, 是可以正常单步调试的。
那以后要研究arm-gcc + makefile的开源工程时,就用这种调试方法了。

笔记

实验环境

win10
arm-gnu-toolchain-14.3.rel1-mingw-w64-x86_64-arm-none-eabi

openocd-20250710
openocd还有一个预编译版本(xpack-openocd-0.12.0-7-win32-x64), 因为实验已经成功,就没有实验这种openocd

eclipse-cpp-2025-09-R-win32-x86_64

实验

实验的makefile工程

我用的前面笔记(debug - MDK - arm-none-eabi - 从MDK工程做一个makefile工程出来)中的makefile v0.9

先确认makefile工程是可以正常编译的,因为我前面笔记已经确认过elf和相同源码的mdk工程的elf一致。我现在只要确认能正常编译过,就可以进入后续实验了。

将makefile工程引入eclipseCPP

启动eclipseCPP工程时要带环境

直接启动eclipseCPP时,是没有make和arm-gcc环境的.
为了不污染win10全局的path, 做一个bat来带上环境,并启动eclipseCPP.

start_eclipsecpp_with_arm_gcc_and_make.bat
@echo off
rem @file start_eclipsecpp_with_arm_gcc_and_make.bat
rem @breif 通用的arm-gcc工具链,编译哪个工程都可以
set path=%~dp0arm-gnu-toolchain\bin;%~dp0gnuwin32\bin;%~dp0curl;%path%
set path=D:\tools\eclipse\eclipse-embedcpp-2025-09-R-win32-x86_64\eclipse;%path%
start eclipse.exe
cmd /k "echo %~nx0 && title %~nx0"

运行 start_eclipsecpp_with_arm_gcc_and_make.bat ,启动eclipseCPP

新建工作区

整一个新工作区开始实验。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

配置arm-gcc工具链

确认工具链明显没有配置?

在这里插入图片描述
在这里插入图片描述
如果不确定arm-gcc工具链是否已经配置,可以先清理一下工程,如果看到没动静,或者和自己的makefile清理逻辑不一样,就需要配置arm-gcc工具链。

配置arm-gcc

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

尝试编译或者清除工程,和自己的makefile逻辑一样就ok.
我的makefile中,打印出了用到的arm-gcc的全路径,这样我就知道是不是用到了我指定版本的arm-gcc.

在这里插入图片描述
在这里插入图片描述

配置openocd

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
工程编译过后,来配置openocd.
如果工程中不止一个elf, 或者eclipseCPP将elf填错了,自己重新指定一下。
在这里插入图片描述
如果自己确认时,没看到openocd的全路径,就需要自己指定openocd的exe全路径
在这里插入图片描述

指定openocd调试参数

在这里插入图片描述

-f interface/cmsis-dap.cfg -f target/lpc17xx.cfg

这个参数指定了调试器是啥,MCU是啥。
因为我用的是官方开发板OM11043(mbed-NXP-LPC1768), 板载调试器LPC-LINK原始刷的是CMSIS-DAP固件,所以调试器配置文件选为 cmsis-dap.cfg. 官方板子的MCU是LPC1768, 所以MCU配置文件选的是lpc17xx.cfg.
interface/cmsis-dap.cfgtarget/lpc17xx.cfg都是在openocd的目录下,openocd.exe他自己会去找相对路径,我们不用管。
在这里插入图片描述

开始调试

将板子连上计算机,没有win10错误配置信息。
在代码上先下好断点。

在这里插入图片描述
在这里插入图片描述
如果不在调试UI, 会提示是否切到调试UI, 选择“切换”
可能由于通讯速度的问题,有点慢,等一下。反正不是成功,就是报错。等着他。
如果等的不耐烦,或者不确定是否停了下来。去看一眼run菜单。
在这里插入图片描述
如果在下了断点的情况下,只有挂起和中止,openocd又没有报错信息,说明还在连接调试器,或者已经跑起来了(所以要先下断点)。
如果等了一会,还不确定是否已经断下来了,可以去看run菜单。
在这里插入图片描述
如果看到可以单步的F5, F6菜单,就说明已经可以单步了。
在这里插入图片描述
那现在就可以F5/F6的单步了。
在这里插入图片描述

备注

现在可以单步调试了,实验就完成了。
具体的openocd参数是否合适(是不是单步时,显得有点慢)?可以看一下openocd的提示信息,看看是不是可以在openocd参数配置那里,覆盖一些 interface/cmsis-dap.cfg , target/lpc17xx.cfg 中提供的参数。

反正如果是正常情况,就用默认的openocd官方配置好的参数,就能用(能单步调试)。

openocd的提示信息备份

Open On-Chip Debugger 0.12.0 (2025-07-10) [https://github.com/sysprogs/openocd]
Licensed under GNU GPL v2
libusb1 d52e355daa09f17ce64819122cb067b8a2ee0d4b
For bug reports, read
http://openocd.org/doc/doxygen/bugs.html
DEPRECATED! use 'gdb port', not 'gdb_port'
DEPRECATED! use 'telnet port', not 'telnet_port'
DEPRECATED! use 'tcl port' not 'tcl_port'
Warn : DEPRECATED: auto-selecting transport "swd". Use 'transport select swd' to suppress this message.
cortex_m reset_config sysresetreq
Started by GNU MCU Eclipse
Info : Listening on port 6666 for tcl connections
Info : Listening on port 4444 for telnet connections
Info : CMSIS-DAP: SWD supported
Info : CMSIS-DAP: Atomic commands supported
Info : CMSIS-DAP: FW Version = 1.10
Info : CMSIS-DAP: Serial# = 16017043
Info : CMSIS-DAP: Interface Initialised (SWD)
Info : SWCLK/TCK = 1 SWDIO/TMS = 0 TDI = 0 TDO = 0 nTRST = 0 nRESET = 1
Info : CMSIS-DAP: Interface ready
Info : clock speed 10 kHz
Info : SWD DPIDR 0x2ba01477
Info : [lpc17xx.cpu] Cortex-M3 r2p0 processor detected
Info : [lpc17xx.cpu] target has 6 breakpoints, 4 watchpoints
Info : [lpc17xx.cpu] Examination succeed
Info : [lpc17xx.cpu] starting gdb server on 3333
Info : Listening on port 3333 for gdb connections
Info : accepting 'gdb' connection on tcp/3333
Warn : keep_alive() was not invoked in the 1000 ms timelimit. GDB alive packet not sent! (1078 ms). Workaround: increase "set remotetimeout" in GDB
Warn : Prefer GDB command "target extended-remote :3333" instead of "target remote :3333"
[lpc17xx.cpu] halted due to debug-request, current mode: Thread
xPSR: 0x01000000 pc: 0x1fff0080 msp: 0x10001ffc
[lpc17xx.cpu] halted due to debug-request, current mode: Thread
xPSR: 0x01000000 pc: 0x1fff0080 msp: 0x10001ffc, semihosting
Warn : keep_alive() was not invoked in the 1000 ms timelimit. GDB alive packet not sent! (1471 ms). Workaround: increase "set remotetimeout" in GDB
Warn : Boot verification checksum in image (0x00000000) to be written to flash is different from calculated vector checksum (0xefff7a2e).
Warn : OpenOCD will write the correct checksum. To remove this warning modify build tools on developer PC to inject correct LPC vector checksum.
Warn : keep_alive() was not invoked in the 1000 ms timelimit. GDB alive packet not sent! (3273 ms). Workaround: increase "set remotetimeout" in GDB
[lpc17xx.cpu] halted due to debug-request, current mode: Thread
xPSR: 0x01000000 pc: 0x1fff0080 msp: 0x10001ffc, semihosting
[lpc17xx.cpu] halted due to debug-request, current mode: Thread
xPSR: 0x01000000 pc: 0x1fff0080 msp: 0x10001ffc, semihosting
  1. 从提示信息可以看到,我们没有显势指定去连接SWD.
  2. clock speed 10 kHz, 有点慢。可以查一下配置,覆盖一下默认参数。
  3. set remotetimeout 超时没设置,现在默认的参数是一秒,可以改大点。
  4. “target extended-remote :3333” instead of “target remote :3333” 端口规则格式要改一下。
  5. elf的checksum是0,openocd帮我们改了。这个应该是makefile和ld该做的事情,不过暂时不知道怎么搞。
  6. 当看到 halted due to debug-request, current mode: Thread时,就是断下来了。

刚接触openocd, 也不知道这些参数该覆盖成啥?参数格式怎么写?
那等以后有就会再去研究。

反正现在用eclipseCPP + openocd 已经可以引入并调试 arm-gcc + makefile的工程。
且用eclipseCPP比用MCUXpresso好太多了。

MCUXpresso只适合他自己建立的工程,可以正常调试。对于引入的第三方的makefile工程,可能检查过于严格(e.g. elf的cheksum值),导致无法单步调试。

END

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/972394.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2025 年 11 月羊绒衫厂家推荐排行榜,女式羊绒衫,男士羊绒衫,小香风羊绒衫,精选优质羊绒衫公司推荐

2025 年 11 月羊绒衫厂家推荐排行榜:女式羊绒衫、男士羊绒衫、小香风羊绒衫专业选购指南 随着消费升级和品质需求的提升,羊绒衫市场呈现出多元化、个性化的发展趋势。作为高端服饰品类,羊绒衫在保暖性、舒适度和时尚…

数字时代的质量新篇:当工厂开始“思考”

从休哈特的控制图到六西格玛,过去一百年,质量的核心是“减少变异,逼近标准”。但自六西格玛设计之后,质量理论似乎撞上了天花板。就在人们以为质量领域难有颠覆性创新时,一股新的力量正悄然重塑一切——数字化。 …

年末冲刺 | 2025年12月国际会议日历 | 覆盖理工文管全领域,快速投稿通道

2025年12月学术日程 | 12月5-7日、12月12-14日、12月19-21日、12月26-28日,国际会议合集,覆盖全领域,EI/Scopus快速通道| 第十一届材料加工与制造工程国际学术会议 (ICMPME 2025) | 2025年12月2-4日 …

阿里云ESA:国内业务加速的务实之选

作为开发者,用过Cloudflare和阿里云ESA后说句实在话:ESA在国内业务的优势就两点。一是63个国内节点让延迟稳在200ms内,比Cloudflare跨境快太多了;二是CNAME接入太香了,轻松实现国内外流量分治。中文工单响应也快,…

2025留学咨询机构实力榜 TOP10专业团队文本输出强强对决

留学申请的“内卷”终局,往往落在文书的竞争力上。在近期梳理的中介TOP10榜单中,各家凭借细分优势占据一席之地,但能把文书做成“加分利器”的并不多。以下结合服务逻辑与真实案例,用百分制给出评级,帮大家看清核…

留学咨询效率哪家高?2025十大留学机构榜单推荐

2025年留学申请进入“精耕细作”时代,中介TOP10的比拼早已跳出“资源战”,转向文书质感、服务适配度的较量。文书作为招生官认识学生的第一扇窗,其个性化与学术性直接决定申请上限。这份结合近千份案例的测评,用百…

留学咨询选对才靠谱 2025专业度与响应速度双优机构榜单

留学申请流程环环相扣,文书则是串联全程的关键。在留学中介TOP10的比拼中,既能理顺流程又能做精文书的机构,往往更受青睐。结合申请全环节体验,这份百分制榜单带你看清各家核心实力。 1. 优越留学:98分 流程闭环,…

留学申请亮点哪家绝?2025前十机构特色服务矩阵深度拆解

留学咨询里,“踩坑”比“申不上”更糟心。这份中介TOP10榜单,从靠谱性、文书优势、背景提升能力及申请成果出发,用百分制给出真实评价,帮学子避开雷区、选对帮手。 1. 优越留学:98分 文书+背景双在线 官网:https…

一次编译器优化的陷阱

本文分享自天翼云开发者社区《一次编译器优化的陷阱》.作者:江****禄 某次问题排查,最终隐掉完所有业务逻辑后, 化简为如下的简单代码: 来看一下,这个的bcount is zero 会打印吗? #include <time.h> #incl…

2025襄阳装修公司排名与推荐,从设计到售后的全维度参考

一、前言 家装消费正从“基础装修”向“品质生活解决方案”转型,据《2024中国家装行业发展报告》显示,襄阳地区家装投诉中,“设计与落地脱节”“施工质量参差不齐”“售后保障缺失”三大问题占比超65%,多数业主面临…

留学机构比较新视角 2025十大机构文本与申请结果排名

留学咨询的靠谱与否,全在服务细节里。一家有资质的中介,既能用文书优势放大申请亮点,又能在流程中处处贴心。结合行业资质审核和学生反馈,这份百分制中介TOP10榜单,帮你看清哪家更值得选。 1. 优越留学:98分 资质…

2025 最新制造业系统服务商权威推荐榜:国际协会测评认证 + 5000 + 政企案例背书,制造业生产管理系统/制造业进销存系统/制造业 MES 系统/制造业工单系统服务商推荐

引言 数字化转型已成为制造业突破增长瓶颈的核心引擎,企业对成本管理、生产执行、进销存管控等系统的专业化、智能化需求持续攀升。然而,市场服务商良莠不齐,同质化解决方案、技术适配性不足等问题严重影响转型成效…

2025 年11月天津电线电缆优质厂家 TOP10 推荐:含塑料绝缘控制 / 柔性拖链 / 软电缆/铝电缆 /架空绝缘 /绝缘 /屏蔽等多品类电缆生产厂家盘点

在工业生产、能源传输、建筑工程及民生建设等领域,电线电缆是保障电力与信号稳定传递的核心基础部件,其质量直接关系到项目安全运行与使用寿命。天津作为北方重要的工业基地,凭借完善的产业链配套、先进的制造技术及…

易路人才薪酬专家Agent赋能全球知名智能家居品牌:AI驱动的薪酬管理新范式

在全球化和数智化浪潮的推动下,企业人力资源管理正面临着从事务性操作向战略决策转型的巨大挑战。尤其对于业务多元、全球布局的科技巨头而言,传统的薪酬管理模式已难以支撑其对实时市场洞察、内部公平对齐、以及科学…

超越生产:质量关口的“前移”与田口方法

在质量演进的道路上,我们见证了从工匠手感、到测量控制、再到统计管理的飞跃。但所有这些努力,大多都聚焦于同一个环节:生产和检验。人们一直在思考如何“造得更好”,却很少有人追问:问题是不是在“设计”时就已经…

2025佛山出口退税公司排名与推荐:36个月申报期不踩坑,这样选机构退税快又稳

2025年佛山出口退税领域迎来关键调整,新政明确“出口货物报关单开具后36个月内必须完成退税申报”的时限红线,同时将部分高新技术产品、机电设备退税率从13%提至16%,政策红利与申报风险并存。佛山海关数据显示,202…

南通一对一家教机构推荐:2026南通最新课外辅导口碑排行榜

在教育竞争激烈的当下,南通家长对小学、初中、高中各阶段孩子的学业关注度持续升高,一对一辅导、家教、课外补习凭借 “因材施教” 的优势,成为不少家庭补弱提优的首选。无论是应对中小学知识难点,还是冲刺中高考关…

综合评分榜单,表现最亮眼的十大留学机构盘点

在留学申请过程中,文书是展现学生优势、打动招生官的关键,而优质留学机构的文书服务更是申请成功的重要保障。以下这份综合评分榜单,从文书质量、服务体系、录取成果等核心维度,盘点出表现亮眼的十大留学机构,为学…

品牌评比结果公布,留学中介排行榜TOP10值得选择

在留学市场品牌众多的当下,靠谱的留学中介品牌能为学子申请之路提供坚实保障。本次品牌评比围绕服务质量、录取成果、师资实力等核心维度,筛选出综合表现突出的十大留学中介,为大家选择提供可靠参考。 第一名、优越…

【重磅】2025两院院士增选揭晓:144位顶尖专家入选,AI、芯片与量子技术成最大赢家!

2025院士揭晓:AI、芯片与宁德时代成最大赢家!2025年11月21日,备受瞩目的中国科学院与中国工程院院士增选结果正式公布。本次共选举产生144位新院士(中科院73人,工程院71人)。从数据分布来看,人工智能、集成电路…