天南地北客
发表于: 2016-10-11 17:04:18 | 显示全部楼层

我经常会遇到一些很难查找的问题,这些错误大多数和时序紧密相关,并且取决于中断执行的顺序。也许是悬空指针在覆盖内存,代码跑飞,或者是一些函数不能如预期的可重入。对于这些错误,好工具的价值就体现出来了。Percepio FreeRTOS + TraceSegger SystemView多次帮助我缩小我的应用程序中的这类问题。另一个超级工具是硬件跟踪。现在我的书桌的解决错误的武器中有了新成员 - Segger J-Trace Pro ARM Cortex-M

亲爱的bug,看看我书桌上的武器,你们的藏身时间结束了!

tracing-cortex-m4-with-j-trace.png

包装

该套件附带所有的线缆:两根USB线、以太网、20针和19针带状线缆以及一个5V/700mA的USB电源。

j-link-trace-package-open.png

盒子里包含Cortex-M Trace Reference Board,搭载一枚ARM的Cortex-M4F(STM32F407VE)。该电路板使用提供的5VUSB电源供电,J-Trace使用USB插头供电。该套件支持USB和以太网/LAN主机连接。

j-link-trace-with-usb-power-supply-and-cortex-m-trace-reference-board.png

该参考电路板实际上是一个非常酷的东西,我可以参考教程先玩一玩,而不必弄坏我的硬件。

cortex-m-trace-reference-board.png

该套件的主要特点

■    ETM跟踪和Cortex-M调试

■    USB 2.0(480 MBit / s)和千兆以太网接口

■    “无限制”流式传输到主机

■    64 MB板载跟踪存储器

■    支持所有Cortex-M(M0,M0 +,M1,M3,M4,M7)

■    50 MHz JTAG速度

■    可以像普通的J-Link调试仿真器一样使用

■    与其他Segger探测器仿真器,支持Windows、Linux和Mac OS主机。 我选择在Windows下平台使用J-Trace。


调试

该仿真器可以像普通的Segger J-Link调试仿真器一样使用,例如使用恩智浦Kinetis Design Studio或任何支持Segger J-Link仿真器的IDE。 值得一提的是,与Segger EDU或OpenSDA实现相比,它的下载速度更快。

与普通的Segger J-Link套件不同,我不需要使用SWD电缆适配器作为20针Cortex Debug + ETM连接接口(标记为“Target + Trace”):

debugging-with-arm-debugetm-cable.png

如果在Target端口上需要使用SWD电缆适配器,我仍然可以使用J-Link适配板。在需要访问信号或者想使用10针的调试线缆,这种方式是很不错的。

debugging-with-j-link-adapter.png

设备上有几个状态LED指示灯,非常有助于解决可能的疏忽,如目标未供电。 当设备收集跟踪时,“Trace”LED指示灯亮起:

status-leds.png

调试环境?Ozone!

基于Eclipse的Kinetis Design Studio不包括跟踪功能。 CodeWarrior包括,但是我现有的NXP项目都是在LPCXpresso或NXP Kinetis Design Studio运行,CodeWarrior仅保留用于传统和维护项目。 我看到Segger文档和教程提到Ozone。

Ozone是Segger自己的调试环境,当然支持J-Link调试仿真器。

当连接一个“模拟”的J-Link像OpenSDA J-Link(或者J-LinkEDU)固件的情况下,弹出一个对话框:

ozone-license-with-oem-j-link.png

当我第一次看到有关Segger提供自己的调试环境的新闻时,我是那种想法:“为什么还提供另一个调试环境?”好吧,使用几天后,我认为这实际上是一件好事:非常小(14MB)、快速并且工作的非常好。

ozone-debugger.png

下载/安装包附带了一些CMSIS-SVD文件,但我可以下载并添加更多的SVD文件(参见示例“CMSIS-SVD Register Files with Eclipse MARS and EmbSysRegView”)。

根据J-Trace教程,我确实能够在不到15分钟的时间内使用参考板使得跟踪演示的例程工作:

tracing-the-stm32.png

Ozone视图

Ozone具有所有常用的视图(源代码、内存、控制台/终端、寄存器、反汇编、调用堆栈)等等:

ozone-views.png

视图可以移动和放在彼此以具有“标签”视图。 可以将视图移出主窗口,例如放置在单独的监视器显示器上。

tabbed-views.png

源代码视图提供行号,设置断点。 我真正喜欢的是,我可以展开源代码行,直接显示反汇编代码:

source-view.png

该调试环境不能直接跳转到符号(也称为“转到声明/定义”),但我认为这更多的是一个IDE功能。

调试环境有一个简单的方法来附加到已经运行的应用程序(在其他的调试环境这通常很难做到):

start-debugger-menu.png

“Download & Reset Program”下载和复位程序。 在UI中没有办法在main()上指定一个临时断点。

脚本

Ozone有一个很好的脚本引擎:几乎一切都是可脚本的:

scripting.png

实际上Ozone项目文件是用脚本语言编写的C文件:这样我可以很容易地更改调试环境:

ozone-project-file.png

跟踪视图

指令跟踪显示已执行的指令,并且与源代码和反汇编视图同步:

instruction-trace.png

它自动将跟踪指令按函数分组:

trace-grouped-by-function-names.png

跟踪传输到主机应用程序(Ozone)几乎是'无限'的方式,我能够收集跟踪很长时间。

代码配置视图

代码配置文件视图显示了基于指令计数器的源代码和指令覆盖:

code-profile-view.png

执行计数器可以在源代码视图中开启:

show-execution-counters.png

Eclipse

虽然我很希望在Eclipse中可以按照相同的方式工作,不幸的是没有Ozone Eclipse插件。 试想一下:获取指令跟踪和分析信息送到Eclipse,将会是非常神奇的事情。

我以下面的方式使用Ozone:在Eclipse中构建项目,并在Ozone中配置.elf文件/项目进行调试。 当我重建.elf文件时,Ozone会自动检测更改并重新加载它:

reload-program.png

总结

J-Trace与Ozone调试器结合使用非常好。首先我认为这个Ozone调试器不是必需的。但它是非常有用的,加上它可以用于Eclipse或任何其他IDE。

在这个星期天早上,我能够在很短的时间内跟踪Ozone、J-Trace和Cortex-M Trace Reference board 。但是我花了一天的余下时间来跟踪我的TWR-K64F120M板,所以我会写一篇后续文章。我认为这就是为什么Segger将跟踪参考板作为入门起点:由于错误的开发板文档和示例代码,以及用于其他板组件的跟踪引脚,很难开始跟踪Tower开发板。这不是Segger的错,但它清楚地告诉我为什么Segger会提供参考板:

参考链接:

■    Segger J-Trace Pro for ARM Cortes-M: https://www.segger.com/jtrace-pro-cortex-m.html

■    ARM CoreSight ETM-M4描述: http://infocenter.arm.com/help/t ... etm_m4_r0p1_trm.pdf

■    关于Kinetis的ETM的社区讨论: https://community.nxp.com/thread/349983 and https://community.nxp.com/thread/300553

■    Freescale塔式开发板的ETM: https://community.nxp.com/thread/349983

■    Cortex-M调试适配器 http://infocenter.arm.com/help/t ... ebug_connectors.pdf

■    J-Trace和Ozone教程视频:https://www.youtube.com/watch?v=hl7WdxnD9k0

■    Segger Ozone: https://www.segger.com/ozone.html

跳转到指定楼层
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



手机版|

GMT+8, 2024-11-8 14:02 , Processed in 0.055847 second(s), 6 queries , Gzip On, MemCache On. Powered by Discuz! X3.5

YiBoard一板网 © 2015-2022 地址:河北省石家庄市长安区高营大街 ( 冀ICP备18020117号 )

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