单片机调试方法之手动设置“断点”

本文介绍了如何利用Jlink在HCPU和LCPU上设置断点进行系统初始化调试。通过修改特定汇编文件中Reset_Handler的指令,使系统启动时停留在第一条指令,然后连接Jlink调整PC寄存器来设定断点。同样方法也可应用于C文件,通过插入汇编指令实现暂停。注意避免使用无限循环,以免导致代码优化问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

设置断点

当Jlink连接到HCPU/LCPU的时候,通常系统已经初始化完成,如果需要调试初始化,例如冷启动或者standby睡眠唤醒, 需要将系统停留在尽早的地方。
建议用户可以修改系统初始化程序,

  • HCPU
    drivers/cmsis/sf32lb55x/Templates/arm/startup_bf0_hcpu.S
  • LCPU
    drivers/cmsis/sf32lb55x/Templates/arm/startup_bf0_lcpu.S
    在Reset_Handler中的第一条指令去掉注释 ';', 变为
    B .
    这样CPU启动,就会停留在第一条指令,当Jlink连接成功后,可以改变PC寄存器 (+2), 设置所需断点,从而调试初始化过程。

同样的方法也可以在其他的地方使用,使系统停留在某个事件发生的时刻,在所怀疑有问题的地方,如果是C文件,加入
_asm("B .");
可以使系统停留在这个指令,这个时候,再连接Jlink, 可以改变PC寄存器 (+2), 继续调试。

Note

不能使用while(1); 否则系统会优化,将while(1)之后的语句都无效了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值