硬汉嵌入式论坛

 找回密码
 立即注册
查看: 2511|回复: 3
收起左侧

[技术文档] 使用 jlink 对v7开发板进行指令追踪配置

[复制链接]

1

主题

2

回帖

5

积分

新手上路

积分
5
发表于 2021-8-18 01:09:59 | 显示全部楼层 |阅读模式
本帖最后由 LIAOYUANGANG 于 2021-8-18 19:24 编辑

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

1.png

2.png



本教程使用v7开发板及配套的出厂程序进行演示,配合segger公司的ozone软件进行调试。当然keil也是可以配置使用指令追踪的,但是体验不如ozone好,配置方法在文末有简单描述。


测试环境如图所示。

微信图片_20210817223938.jpg


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


3.png




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


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








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




首先解压出厂例程
4.png



修改文件名,使得工程路径不要有中文(很重要)
5.png




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

6.png




选择工程文件
7.png





选择使用ARMCC作为构建工具
8.png




然后编译,速度飞起,感觉比keil快一些,31秒编译完成,不知道是不是有什么黑魔法
9.png





出了一点小问题,需要修改一下链接脚本的路径,不知道是不是bug
10.png




在打开的工程上右击,选择打开工程配置文件
11.png




搜索sct
12.png




改成如下路径
13.png




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




修改好之后保存并再次编译,提示说有个警告,hex不存在,我们把工程配置里的指令删掉就好了
15.png

16.png




再次编译,没有问题,可以看到空间占用情况
17.png




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









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




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

18.png





导入完成后如图所示,当然,根据每个人使用情况的不同,界面也会有一点区别
19.png






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

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

可以找到SEGGER提供了一个使用ETB方法进行追踪的示例工程

20.png





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




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


首先保存ozone工程
40.png




将刚才提到的脚本.pex文件放到和ozone工程同一目录下
41.png





然后编辑ozone工程配置文件
24.png




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




然后配置jlink设置和指令追踪设置
26.png



速率尽可能选能达到的最高速率
27.png



trace选trace buffer,这个将会用到ETF的功能
28.png



配置好系统时钟
29.png











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

首先打开trace窗口
30.png




此时还未进入仿真,窗口显示无数据
31.png




下面我们点击进入仿真
32.png




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





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





如果打开了时间线功能,还能看到函数执行关系
35.png






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






keil进行指令追踪的配置也是类似的

先在仿真设置中配置好ETB追踪方式,然后配置好加载脚本,最后进入仿真打开指令追踪窗口就可以看到追踪到的指令了

36.png



37.png


38.png


39.png






回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106660
QQ
发表于 2021-8-18 08:51:54 | 显示全部楼层
谢谢分享。
回复

使用道具 举报

1

主题

2

回帖

5

积分

新手上路

积分
5
 楼主| 发表于 2021-8-18 10:37:04 | 显示全部楼层

我上传的时候有很多图片的啊,为什么现在一张都看不到了
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106660
QQ
发表于 2021-8-18 11:53:37 | 显示全部楼层
LIAOYUANGANG 发表于 2021-8-18 10:37
我上传的时候有很多图片的啊,为什么现在一张都看不到了

需要单独上传,不支持拖拽。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-4-28 19:42 , Processed in 0.178950 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表