发表于: 2019-4-16 16:43:07 | 显示全部楼层

默认情况下,在调试嵌入式应用程序时,目标通常在停在main()处:

stopped-in-main.png

停在main()函数


这通常很好,但如果我想调整复位后的启动代码怎么办?我在本文中使用的是基于Eclipse的NXP MCUXpresso IDE 10.3,但是相同或类似的东西适用于大多数基于gdb + Eclipse的现代IDE。


为什么应用程序停在main()位置?因为调试器在main符号(或函数)上设置了临时断点:

temporarybreakpoint.png

临时断点


这可以通过在Debugger Console视图的日志来确认:

temporary-breakpoint-in-debugger-console.png

调试器控制台中的临时断点


所以,调试器的工作流程是:

1.  调试器下载二进制文件

2.  调试器在main处设置临时断点

3.  调试器向目标发出重置,然后执行'run'

4.  目标将在临时断点处停止

显然,调试启动代码的一种简单方法是在启动代码中设置一个断点:

breakpoint-on-resetisr.png

ResetISR上的断点


另一种方法是检查和更改调试器启动配置。因为每个调试配置可能会有所不同,我将介绍LinkServer、Segger和PEMicro的配置。


LinkServer

LinkServer(CMSIS-DAP、LPC-Link2)连接没有专用的“运行”设置:要调试启动代码,我必须将“main”更改为“ResetISR”符号。要还原,请将符号更改回“main”。

stop-on-startup-at.png

停在ResetISR的启动代码


SEGGER

使用GNU Mcu Eclipse插件,设置如下所示,并且易于更改:

gnumcueclipsesegger.png

Gnu Mcu Eclipse Segger


要执行启动代码调试,请禁用“Continue”选项。


P&E(PEMicro)

下面的屏幕截图显示了P&E设置临时断点和“复位时运行”设置,这些设置易于查找和更改:

pemicro-launch-config.png

PEMicro启动配置


要从复位向量开始调试,只需禁用“Run on reset”选项。


总结

为了使用Eclipse和GDB调试启动代码,我可以在复位函数中设置断点,或者我可以更改Eclipse CDT启动配置中的设置以在ResetISR中停止(或者重置函数名称)。

跳转到指定楼层
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题 47 | 回复: 68



手机版|

GMT+8, 2024-12-31 01:59 , Processed in 0.064907 second(s), 6 queries , Gzip On, MemCache On. Powered by Discuz! X3.5

YiBoard一板网 © 2015-2022 地址:河北省石家庄市长安区高营大街 ( 冀ICP备18020117号 )

快速回复 返回顶部 返回列表