一、前言
单片机调试,目前常态可能是直接在MDK(keil)或者IAR中,直接用IDE的调试功能。
我喜欢用Ozone,因为他进调试快,基本上秒进,而MDK每次进入都要等很久,编译还要先退出调试模式,再编译,再进入调试模式,很耽误时间。
搜了一下,全网没多少相关使用经验,我这应该算开山祖师了,哈哈哈哈。
二、Ozone简介(抄的)
Ozone是Segger公司推出的一款高性能调试器软件,专为嵌入式系统开发设计。它支持多种微控制器架构,包括ARM Cortex-M、RISC-V等,并可与J-Link调试探针无缝配合使用。
支持实时变量监控和图形化显示,开发者可以直观地观察程序运行时的数据变化。提供完整的断点管理功能,包括硬件断点、软件断点和条件断点。
具备强大的内存查看和编辑功能,支持多种数据格式显示。集成RTOS感知调试功能,能够识别和调试FreeRTOS、embOS等常见实时操作系统。
看不懂,简单说就是只专注于调试(因为专一,所以专业),MDK有的Ozone都有,Ozone有的MDK不一定有。调试速度真的很快!!!
三、适用场景
需要一个Jlink和编译后生成的文件,我常用axf,其他不知道是否支持,可以去官网确认一下。
四、调试环境
MDU:stm32F407ze
jlink:SW接口
Ozone:版本V3.40
MDK:生成axf文件
五、创建工程
网上太多,不赘述。只说一个,一定要记得选外设信息的svd文件,看寄存器很方便。SVD文件一般在DFP里面,具体的参考我图中的路径。

六、功能
6.1 查看外设寄存器
View->Registers中打开,具体内容如下图。很明显,描述信息比MDK详细很多。
如果没选好svd文件,将会丢失Peripherals的所有内容,也看不了外设的寄存器。

6.2 查看变量
View->Wathed Data
右键要查看的变量 Watch或者拖到Wathed Data窗口,或者在Wathed Data窗口直接输入变量名
右键Wathed Data窗口的变量名,可以刷新该变量,默认是不刷新的,开启刷新对查看全局变量很方便。
6.3 查看函数堆栈
View->Call Stack
双击Call Stack窗口的函数会自动跳转到该函数
6.4 查看汇编(局部变量)
View->Disassembly或者右键变量Show Disassembly(ctrl+D)。
一般来说32位(比如浮点数,int型等)的局部变量会被存储到R0~R11寄存器中,打断点后在Wathed Data窗口也无法查看,MDK一定无法查看。
但Ozone可以从汇编中查看,如下图。在Disassembly窗口中,将鼠标放在该变量对应的寄存器时,会在鼠标附近显示该寄存器的值。我这里的adaptive_kp就存在S24寄存器里,可以在寄存器窗口通过对应的寄存器也能看到。

6.5 查看断点
View->Break & Tracepoints
还可以在断点窗口设置断点属性,比如该断点需要跳过几次等
6.6 数据图形化界面
右键要图形化查看的变量,点击Graph。(嗯,应该是,还没试过,后面验证了写清楚)
6.7 通过命令直接调用函数
View->console打开命令窗口。
命令窗口输入:Debug.SetNextPC 。(嗯,应该是,等我后面抽空试一下,明确一下命令和用法)
七、遇到不支持的芯片怎么办
移步我的另一篇博文Ozone添加不支持的芯片,这里以AT32举例
八、小技巧
MDK去掉Brose Infomation可以加快编译速度,但是调试过程中不能再F12跳转,而Ozone不影响,照样能实现跳转。
九、总结
对比MDK:
| 项目 | MDK | Ozone |
|---|---|---|
| 功能 | 集成开发 | 专注调试 |
| 图形化 | 不支持 | 支持 |
| 查看32位局部变量 | 不支持 | 支持 |
| 命令调用 | 不支持 | 支持 |