Keil MDK(ARM)-在已运行单片机硬件上中途插入调试
目录
前言
一台没有上调试仿真器(如:j-link)的设备突然死机、调试控制大功率机器过程中调试仿真器突然掉线、给测试部测试了近一个月的设备突然死机(难以重现的 BUG 可遇不可求),而此时你想查看单片机当前内部一些变量、寄存器、堆栈的现场,想在实际断点处继续运行单片机程序,如何是好?我们都知道,平常在 KEIL 环境下,单片机连接仿真器后进入调试模式时,KEIL 就会自动将整个单片机进行复位,甚至有可能重新下载程序。不要说访问 RAM 数据了,程序 ROM 的代码都可能改变了!针对上面的问题,我们有没有一种方法,在不改变及不破坏单片机运行现场情况下直接切入调试模式?方法当然是有的,不急,听我慢慢道来。
方法
注意:为了防止一些操作引起单片机复位,首先我们把仿真器拔离单片机。
1、新建工程目标:
只是克隆一模一样工程配置,之后再修改几项配置。
2、修改工程配置:
事先在工程根目录下创建文件,本例文件名为abn-debug-load-axf.ini
,其内容为:
|
|
注:该文件用于加载 axf 文件到 KEIL 中,但是不会下载到单片机中,而 axf 文件可以方便我们进行源码级别的调试。
接着修改配置+添加文件:
3、直接进入调试:
在已运行的硬件板重新插上仿真器(如:j-link 仿真器),然后在 keil 开发环境直接点击
debug
按钮(注意:不要点击编译/下载/烧录
这类按钮)。相当于从正常运行状态,暂停一下,再进入仿真模式,之后按照平时调试方式正常操作即可。注意-有两个前提条件:
1、原程序没有开启看门狗;
2、保留原来的代码、 axf、map 文件,或使用原来代码编译出一样的 axf、map 文件;