使用 jlink 对STM32H7进行指令追踪配置

STM32F743内集成有ETF单元(嵌入式跟踪FIFO),可以使用jlink进行简配版的指令追踪(和ETB追踪方法类似),而不必使用昂贵的jtrace进行指令追踪(jtrace可以使用ETM(嵌入式跟踪宏单元)而jlink不行)

在这里插入图片描述

在这里插入图片描述

本教程使用安富莱v7开发板及配套的出厂程序进行演示,配合segger公司的ozone软件进行调试。当然keil也是可以配置使用指令追踪的,但是体验不如ozone好。

我使用的是淘宝某D版jlink pro,但是普通jlink也是支持的,jlink pro和普通版的区别主要在于速度。
请添加图片描述

我没有测试过普通jlink的追踪效果,但是猜测可能会丢数据?

此外,教程中有用到SEEGER Embedded Studio和ozone软件,都是SEGGER官方的免费软件

首先讲解SEEGER Embedded Studio导入keil工程进行编译的过程,对此部分不感兴趣的朋友可以直接跳到后面讲解ozone的地方。

首先解压出厂例程,如图:
请添加图片描述

修改文件名,使得工程路径不要有中文(很重要)
请添加图片描述

打开SEEGER Embedded Studio for ARM并导入前文的keil工程,这里我使用的版本是V5.60,使用此软件生成便于ozone调试的可执行文件。
当然,ozone也可以直接导入keil生成的axf文件进行调试,这里我主要想讲一下SEEGER导入keil工程的方法
请添加图片描述

选择工程文件
请添加图片描述

选择使用ARMCC作为构建工具
请添加图片描述

然后编译,速度飞起,感觉比keil快一些,31秒编译完成,不知道是不是有什么黑魔法
请添加图片描述

出了一点小问题,需要修改一下链接脚本的路径,不知道是不是bug
请添加图片描述

在打开的工程上右击,选择打开工程配置文件
请添加图片描述

搜索sct
请添加图片描述

改成如下路径
请添加图片描述

另外还需要修改一个地方,SEGGER默认使用自己的启动文件进行编译,我们需要改成自己工程中使用的(否则我在调试的时候一运行就进入hardfault了)
把Yes改成No,这里是说把这个文件排除在编译之外
请添加图片描述

修改好之后保存并再次编译,提示说有个警告,hex不存在,我们把工程配置里的指令删掉就好了
请添加图片描述
请添加图片描述

再次编译,没有问题,可以看到空间占用情况
请添加图片描述

到这一步就可以进行调试了,可以使用SEGGER Embedded Studio进行调试,也可以使用orzone进行调试。

接下来讲解使用ozone进行指令追踪的配置方法

首先用orzone打开刚才编译完成的工程,这里的步骤其实是导入elf文件到ozone中,因此,也可以直接导入keil编译生成的axf文件
请添加图片描述

导入完成后如图所示,当然,根据每个人使用情况的不同,界面也会有一点区别
请添加图片描述

前面讲了STM32F743有一个ETF(嵌入式跟踪FIFO),想要在调试期间使用它进行追踪指令,需要在进入调试的时候将ETF相关的寄存器配置好,这里就需要配置相关脚本,让ozone在进入调试时能够初始化好ETF

相关资料可以查看SEGGER官网关于STM32H7进行指令追踪的教程:https://wiki.segger.com/STM32H7#Tracing_on_STM32H7_series

可以找到SEGGER提供了一个使用ETB方法进行追踪的示例工程
请添加图片描述

这个工程里面有一个非常重要的脚本文件,用于在进入调试时初始化ETF(SEGGER并没有公开这个脚本的具体内容)
请添加图片描述

然后,我们需要将这个脚本文件添加进ozone的工程里面

首先保存ozone工程
请添加图片描述

将刚才提到的脚本.pex文件放到和ozone工程同一目录下
请添加图片描述

然后编辑ozone工程配置文件
请添加图片描述

找到BeforeTargetConnect这一行
修改为如下内容,即在目标连接前加载脚本,关于jlink脚本,官网也有描述:https://wiki.segger.com/J-Link_script_files#Using_J-Link_script_files
请添加图片描述

然后配置jlink设置和指令追踪设置
请添加图片描述

速率尽可能选能达到的最高速率
请添加图片描述

trace选trace buffer,这个将会用到ETF的功能
请添加图片描述

配置好系统时钟
请添加图片描述

配置完成之后就可以仿真使用指令trace功能了

首先打开trace窗口
请添加图片描述

此时还未进入仿真,窗口显示无数据
请添加图片描述

下面我们点击进入仿真
请添加图片描述

可以看到程序停止在了main函数第一行,同时指令追踪窗口也显示了最近执行到main函数的部分指令(因为ETF缓存有限,无法做到追踪所有指令)
请添加图片描述

更一般地,可以在下一个函数打一个断点,并清除指令追踪显示的内容,然后全速运行查看期间执行的代码
请添加图片描述

如果打开了时间线功能,还能看到函数执行关系
请添加图片描述

以上就是jlink使用ozone进行指令追踪的配置部分的内容了,ozone的调试功能还是很强大的,感兴趣的可以多了解一下

keil进行指令追踪的配置也是类似的,先在仿真设置中配置好ETB追踪方式,然后配置好加载脚本,最后进入仿真打开指令追踪窗口就可以看到追踪到的指令了
请添加图片描述
请添加图片描述
请添加图片描述

请添加图片描述

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值