在上周的《基于Embedded Studio搭建MM32开发环境》的章节中,我们使用了Ozone这款工具进行调试,今天我们来向大家详细地介绍如何使用Ozone调试MM32 MCU,以及Ozone能给大家带来哪些便利性,体验这款工具的强大之处。
1. Ozone简介
Ozone 是 SEGGER公司开发的一个调试工具,用于J-Link和J-Trace的跨平台调试器和性能分析器,具有所有常见的视图(源代码、内存、控制台/终端、寄存器、反汇编、调用堆栈等等。)
主要特点:
- 独立图形调试器
- 调试任何工具链和IDE的输出
- C / C ++源代码级调试和汇编指令调试
- 用于任何目的的调试信息窗口:反汇编,内存,全局和本地,(实时)监视,CPU和外围设备寄存器
- 源代码编辑器可立即修复错误
- 将应用程序高速编程到目标中
- 直接使用J-Link内置功能(无限的Flash断点,Flash下载,实时终端,指令跟踪)
- 可编写脚本的项目文件可自动设置所有内容
- 新项目向导可简化新项目的基本配置
Ozone已支持的编译器:Embedded Studio,GCC,Clang,MDK,IAR。
2. Ozone环境搭建
2.1 软件下载
在SEGGER的官网(https://www.segger.com/)下载最新的Ozone软件。
2.2 软件安装
双击Ozone软件安装包进行安装,完成安装如下图所示,同时会在桌面生成快捷方式。
3. 工程创建及调试
Ozone调试的方式有两种:
- 在集成IDE环境中直接调用Ozone来进行调试。
- 通过创建Ozone工程来进行调试。
第一种方式可以参照《基于Embedded Studio搭建MM32开发环境》,在这里就不过多的讲解说明,下面对通过创建Ozone工程来进行MCU调试进行讲解说明。
3.1 Ozone工程创建
打开Ozone软件,如下图所示:
点击菜单栏File->New->New Project Wizard..来新建工程。
然后在弹出的New Project Wizard对话框中,Device选项根据芯片的具体型号来选择实际的内核版本,例如此次使用的芯片为MM2F013x,为Cortex-M0内核,因此在Device选项中选择M0,Register Set对话框中的型号在Device对话框选择完成以后会自动选择,在Peripheral对话框中选择芯片的svd文件(目前为止Ozone安装包中包含的svd很不全面,如果我们使用的芯片的svd文件在Ozone的Periphaeral文件夹中没有包含,我们可以到MDK-Keil的安装路径下面找到PACK文件夹,并在此文件夹中找到相应芯片的svd文件,并拷贝到Ozone安装路径下面的Peripheral文件夹中即可,然后并选择芯片的svd文件)。
然后点击Next选项进入到Connection Settings选项卡来选择调试接口以及通讯速率。MM32F013x支持SWD接口,因此我们在Target Interface按钮中选择SWD接口,并在Target Interface Speed选项中选择通讯速率为4Mhz。
点击Next选项,然后进入到Program File选项卡来选择需要Debug的.elf文件。
后面的配置选择默认即可。
3.2 下载并进行调试
选择Debug选项卡的Download & Reset Program选项来下载程序到MCU并进入到调试界面,用户可以在View选项卡中选择各种窗口来帮助调试。
3.2.1 Memory窗口
Ozone可以直接通过在寄存器或者变量窗口直接右键Show Data就可以看到变量甚至寄存器的Memory状态。
在Memory中用户可以选择保存指定地址区间的数据。
3.2.2 Watch窗口
用户可以在View选项卡中选择Watch Data选项中的New Watch Data Window来调出Watch窗口显示变量的数值。
当用户需要查看某一个变量的数值的时候,直接选中此变量然后右击弹出相关的选项卡,然后选择Watch选项来将变量添加到Watch Data窗口。
3.2.3 Disassembly窗口
用户可以在View选项卡中选择Disassembly选项来显示汇编窗口,熟悉汇编的用户可以在此窗口中查看汇编指令,指令跟踪显示已执行的指令,并且与源代码视图同步。
3.2.4 Registers窗口
用户可以在View选项卡中选择Registers选项来查看寄存的数据,其中CPU为内核相关的寄存器,Peripheral为外设相关的寄存器。
如果用户在创建工程的时候没有选择svd文件,那么在进行调试的时候将无法查看外设寄存的数据。
3.2.5 Source File窗口
用户可以在View选项卡中选择Source File选项来查看相关的源文件,包含被编译的c文件、头文件,其中有程序大小,指令数,位置和状态(编译、包含、外部调用)。
3.2.6 Data Sampling窗口
选择Data Sampling选项来定时查看某一个变量的数据变化情况。如下图所示,Index为打印的序号,Times为打印的时间戳,sTimingDelay为变量名称。
使用Timeline来查看变量的变化曲线:
3.2.7 断点
用户可以在IDE中间源文件的左侧添加断点,并同步到Break & Tracepoints窗口,在Break & Tracepoints窗口展示了断点的数量,断点所在的文件以及所在的行等基本信息。
视图可以移动和放在彼此以具有“标签”视图。 可以将视图移出主窗口,例如放置在单独的监视器显示器上。
3.2.8 调用窗口
可以直观的看到编译后工程之间的函数调用关系,和调用深度等相关内容。这是一个静态的程序图框,用于描述函数、子函数之间的相互引用关系以及所占用的堆栈量、代码总量、调用深度等有点类似于keil中的htm(Obj过程文件中)文件的描述。
3.2.9 脚本
Ozone有一个很好的脚本引擎,几乎一切都是可脚本的:
实际上Ozone项目文件是用脚本语言编写的C文件,这样我可以很容易地更改调试环境,在脚本中我们只需要按照Ozone的Console的命令格式来编写脚本命令即可,比如我们需要打开Global Data窗口,在Console窗口输入命令Window.Show ("Global Data");即可调出Global Data窗口,如果关闭此窗口输入Window.Close ("Global Data");即可。