目录

Keil MDK(ARM)-在已运行单片机硬件上中途插入调试

目录

前言

一台没有上调试仿真器(如:j-link)的设备突然死机、调试控制大功率机器过程中调试仿真器突然掉线、给测试部测试了近一个月的设备突然死机(难以重现的 BUG 可遇不可求),而此时你想查看单片机当前内部一些变量、寄存器、堆栈的现场,想在实际断点处继续运行单片机程序,如何是好?我们都知道,平常在 KEIL 环境下,单片机连接仿真器后进入调试模式时,KEIL 就会自动将整个单片机进行复位,甚至有可能重新下载程序。不要说访问 RAM 数据了,程序 ROM 的代码都可能改变了!针对上面的问题,我们有没有一种方法,在不改变及不破坏单片机运行现场情况下直接切入调试模式?方法当然是有的,不急,听我慢慢道来。

方法

注意:为了防止一些操作引起单片机复位,首先我们把仿真器拔离单片机。

1、新建工程目标:

../img/20210520_02_01.jpg
只是克隆一模一样工程配置,之后再修改几项配置。

2、修改工程配置:

事先在工程根目录下创建文件,本例文件名为abn-debug-load-axf.ini,其内容为:

1
LOAD %L INCREMENTAL

注:该文件用于加载 axf 文件到 KEIL 中,但是不会下载到单片机中,而 axf 文件可以方便我们进行源码级别的调试。

接着修改配置+添加文件:

../img/20210520_02_02.jpg
../img/20210520_02_03.jpg
../img/20210520_02_04.jpg

3、直接进入调试:

在已运行的硬件板重新插上仿真器(如:j-link 仿真器),然后在 keil 开发环境直接点击debug按钮(注意:不要点击编译/下载/烧录这类按钮)。相当于从正常运行状态,暂停一下,再进入仿真模式,之后按照平时调试方式正常操作即可。注意-有两个前提条件:
1、原程序没有开启看门狗;
2、保留原来的代码、 axf、map 文件,或使用原来代码编译出一样的 axf、map 文件;

../img/20210520_02_05.jpg