
IAR 下使用 J-Trace 进行指令跟踪
一. STM32 调试特性简介
STM32 的 CPU 采用的是 Cortex-M 系列的内核(M3 或 M4),CM3 和 CM4 的调试技能较之普通的单
片机有了质的飞跃。一般情况下,CM3 的调试功能可被分为两类,
1. 侵入式调试
停机以及单步执行程序
硬件断点
断点指令(BKPT)
数据观察点,作用于单一地址、一个范围的地址,以及数据大的值
访问寄存器的值
调试监视器异常
2. 非侵入式调试
在内核运行的时候访问存储器
指令跟踪,需要通过可选的嵌入式跟踪宏单元(ETM)
通常情况下,我们采用的是侵入式调试,这种调试会打破程序的全速运行。非侵入式调试则可以再保
证在程序全速运行的情况下,了解程序运行的情况,当调试大型软件和多任务系统时,非侵入式调试
有着不可比拟的作用。
二. IAR 下使用 J-Trace 进行指令跟踪
1. 使能 ETM 接口
两种方法,文件见附件:
通用方法在初始化代码中添加
static void JTrace_Init(void)
{
#define ETM_LockAccess (*(uint32_t *)0xE0041FB0)
#define ETM_Control (*(uint32_t *)0xE0041000)
#define ETM_Status (*(uint32_t *)0xE0041010)
#define ETM_TriggerEvent (*(uint32_t *)0xE0041008)
#define ETM_TraceEnControl (*(uint32_t *)0xE004101C)
#define ETM_TraceEnEvent (*(uint32_t *)0xE0041020)
#define ETM_TraceStartStop (*(uint32_t *)0xE0041024)
#define ETM_TraceID (*(uint32_t *)0xE0041200)
#define DBGMCU_CR (*(uint32_t *)0xE0042004)
#define DEMCR (*(uint32_t *)0xE000EDFC)
DBGMCU_CR |= 0xE0;
评论0