转自: http://www.armbbs.cn/forum.php?mod=viewthread&tid=95855&highlight=Ozone

最近刚“忽悠”领导买了个J-Trace Pro,顺便上Segger网上看了看Jtrace的相关介绍官网介绍
Segger为Jtrace搭配了一块小的测试板,主控是STM32F407VG(100pin),而且也给出了简单的上手视频。并推荐了自家的调试软件Ozone(不包含编译功能,仅能调试,编译的话有自家的SES)。

其实之前也下载过Ozone,不过也仅限于尝鲜性质的试玩。这次因为购买的Jtrace具备了Trace功能,恰好这两天有点时间,把Ozone的功能基本彻底的试用了一遍。

虽然Ozone感觉在我的系统(S家这点做得比较好,不论是IDE工具还是Ozone这种调试器,都是全平台支持的)上不太稳定(WIN 10 x64教育版),经常死机,但总的来说,感觉还是一款很有自己特色的调试软件,尤其搭配自家调试器(貌似也只能搭配自家……)。所以决定把这些东西写出来大家一起溜溜,写出来可能只能给小白扫扫盲(大神绕道),里面肯定也有各种错误,欢迎拍砖。

从官网下载安装完毕后,需要导入IDE工具生成的相关镜像文件,建议导入elf、axf这种包含更多信息的镜像(官网就有例程可以直接下载导入);同时建议将镜像文件和工程文件夹放在一起的话,Ozone可以将镜像对应的源文件都可以显现出来。

Ozone的调试功能比较多,我大概划分了3个分类:
A、基本功能:使用和谐版Jlink在Ozone上,或者其他调试器在其他IDE工具上也能实现的基本功能
B、跟踪功能:J-Trace所具有的跟踪功能
C、特殊功能:Ozone所具有的我在IAR和ES、Keil上没见过(当然很可能也是不知道有……)的功能

A、基本功能:在基本功能下,我使用J-Trace时是关闭了Trace功能的,同时我也拿了一个“大家都有便宜的”的Jlink 实验了下也没问题
点下Ozone中的View列表,会出现以下窗口,其中基本功能的窗口如下图,我做了个编号(为显示方便分为两组,012为1组,1319为一组),和后图会对应上。基本上Ozone对应的所有能都在这个View能够提供的列表功能里面。调试器嘛,毕竟可以设置的地方(功能)会少一些

直接拿S家官网上的例程跑了下(S家官网的例程是带自家系统embOS的,没有用过……),我把上图的所有功能都展开了,方便看到窗口的实际样式。后面根据窗口的特点做简要描述:

0、文件窗口:
这个没啥可多说的,把工程文件夹的最后实际参与编译的c、文件可以显示出来,和其他家IDE工具不同,Ozone是直接将每行C语句都反汇编放下该语句的下方的

1、断点(追踪窗口):
因为现在还没有加入追踪功能,所以如果仅仅是断点(程序断点和数据断点的话,和keil下也没啥区别)。
断点的一些进阶功能可以参考下这篇帖子
《原来单片机中还隐藏了这些调试技巧 | 颠覆认知》—作者鱼鹰 EmbeddedOsprey
https://blog.csdn.net/weixin_42876465/article/details/97823112
这篇帖子是基于Keil的,我试了下,Ozone的逻辑也差不多。在这个窗口中,会有部分中断向量的断点,应该是这个工程使用了S家自己定义的启动文件才会有,我使用armfly工程包或者自己建立的一些工程就没有这些选框

2、Call Stack窗口:
对比Keil的Call Stack&Locals(keil是将这两个窗口放到一起的),Ozone的Call界面显示的东西会多一些,还显示了发挥地址和PC指针,栈使用量等参数

3、反汇编窗口:
和keil也没有什么区别,不过因为Ozone在0文件窗口就支持直接看到反汇编的内容,所以对于Ozone这个窗口的作用可能会变小一些了

4、全局变量窗口:
这个功能我没有在keil中看到过,不过感觉还挺好用的,将实际编译进镜像的所有全局变量全部显示出来,因为STM32的所有全局变量都是有固定内存地址的,所以内存地址、数据类型、以及定义所在文件,都可以直观显示出来。
同时右键还可以将这些全局变量添加到数据断点,添加数据曲线等窗口,也可以在源文件、当前运行Memory(注意这个操作应该是Show Data)等窗口中显示出来。

5、局部变量窗口:
这个没啥可说的,跑进一个函数断点后看到这个函数内部所有局部变量的情况(一般的做法都是把需要观察的局部变量添加到手动变量窗口了,编号8窗口)

8、手动添加变量窗口:
除了变量以外,还可以添加函数,不过只貌似显示函数的所在地址,Ozone可以单独给每个需要观察的内容设定刷新率,Keil的话,我只会设置Peridodic Window Update,周期感觉1s?

6、Memory窗口:
Ozone比Keil下的常规操作会多支持Save 和 Load甚至Fill(个人感觉Load和Fill的作用不太大吧,毕竟更改这些地方,对程序影响太大了)。有个好评的地方在与,Ozone可以直接通过在寄存器或者变量窗口直接右键Show Data就可以看到变量甚至寄存器的Memory状态。对理解MCU来说,感觉还是很有用的。

7、寄存器窗口:
与其他IDE没有什么不同,不过比较奇怪的一点是,Ozone支持的STM32一些内核的寄存器(比如DPB、或者DWT等)ST官方手册都没有仔细些,ARM的一些Core的手册才给出的寄存器。反而在Keil下没有找到这些寄存器的选项。

9和10都是动态的曲线,上一个Gif的图大家可以直观感受一下

9、数据曲线窗口;
一个基于横轴时间、纵轴变量值(or 变量计算值)的曲线。可以设定变量的采样率和基于变量的计算表达式

Ozone的表达式支持类型

10、功耗曲线窗口:
功耗测试曲线和和数据曲线类似,如果使用Jlink或者Jtrace的5V-Supply给目标板供电,都可以被Ozone进行检测,并同步将消耗的电流显示出来。这样有个作用就是可以查看目标板在执行到哪里的时候功耗最大(或者与预期是否一致等)。不过希望Ozone能做一个功耗触发的功能,就是PC端测量到电流达到某个阈值后,立刻通过调试口让目标程序停下来,方便直接定位预期电流消耗的程序位置。

不太好的一点是,最大提供电流仅仅是300mA,比隔壁IAR 的I-jet Trace Arm的600mA要小不少。

11、OS支持窗口:
我OS用的很少,embOS更是第一次跑(Ozone官方例程里使用的是自家的OS)。Ozone的RTOS支持目前只有embOS、FreeRTOS还有一个ChibiOS。看介绍都是基于插件来实现的。ChibiOS我也是第一次听说,不过试用了下FreeRTOS,感觉功能比embOS的要少一些。不知道是使用FreeRTOS版本匹配问题,还是本身支持力度的问题。

12、控制台窗口:
Ozone项目文件是用脚本语言编写的C文件,各种操作,实际上也是基于命令实现的,通过控制台窗口可以很好的观察到每个执行的命令。同时基本所有设置也都可以通过命令的方式来进行下发,不知道这样对于从高层次往底层搞开发的人来说会更方便。控制台打“?”可以看到所有命令的介绍。

第二组:除了Terminal窗口外,其他的窗口都是Static静态的,也就是编译结束后,就已经固定不变了。

13、终端窗口:
终端打印我使用的很少,所以贴一张Ozone手册的介绍吧。基本上就是用了S家自带的RTT技术,或者SWO功能。其中写到一个Semihosting,没看懂有啥用……

14、调用窗口:
可以看到编译后工程之间的函数调用关系,和调用深度等相关内容,比较直观。
这是一个静态的程序图框,用于描述函数、子函数之间的相互引用关系以及所占用的堆栈量、代码总量、调用深度等
有点类似于keil中的htm(Obj过程文件中)文件的描述

12+96 = 108;108+24 =132;出现的+;是因为出现了fp-call,所以对应的depth里面会有FP,也会有“+”

15、查询窗口:就不贴图了,没啥可说的。Ctrl+F的记录

16、函数窗口:
功能没啥可说的, 就是被编译的所有函数的集合。再次表扬下Ozone的这个Filter Bar的这个功能,方便查找,Fliter Bar在很多窗口里面都有的

17、Memory占用窗口:
S家好像对这种条状图来表达RAM和Flash占用的方式有点执念。之前S家IDE工具ES中也会给出一个条状图


18、源文件窗口:
包含被编译的c文件、头文件。其中有程序大小,指令数,位置和状态(编译、包含、外部调用)。

19、Jlink/Trace控制面板窗口:
通过usb访问一个虚拟的服务器,可以对Jlink做对应的设置。和装上Jlink驱动后的Command的命令行方式类似吧

本主题由 eric2013 于 2019-12-5 17:08 审核通过

版权声明:本文为ramlife原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/ramlife/articles/12222396.html