Ozone 在线断点调试指南

本节讲如何使用 Ozone 来打断点单步调试,使用到的工具为 Ozone。

1. 早期死机断点设置

如果系统在 Bootloader 阶段、Bootloader 刚结束、启动初始化初期(或休眠唤醒时)就发生死机,直接挂载 J-Link 往往来不及,可以通过代码直接打断点。

  • 汇编层设置:在 drivers/cmsis/sf32lb5xx/Templates/arm/startup_bf0_hcpu.S(注意替换对应芯片型号)的 Reset_Handler 中加入 B . 死循环。

注意: gcc编译的 startup_bf0_hcpu.S 路径和keil不一样,gcc的路径为:drivers/cmsis/sf32lb5xx/Templates/gcc/startup_bf0_hcpu.S

Reset_Handler   PROC
                B        . ; // MCU 复位后第一条指令执行的位置,添加断点
  • C 语言层设置:在 SystemInit()rtthread_startup() 初期加入汇编级断点。

__asm("B ."); // 设置断点

或者:

HAL_sw_breakpoint(); // 设置断点

备注

不要使用 while(1); 作为断点,因为编译器优化可能会将它后面的语句全部丢弃。

设置后,系统将停留在该指令。连上 J-Link 和 Ozone 后,通过命令 setpc PC+2 将 PC 寄存器向后移动 2 个字节跳过断点,即可开始单步跟踪。

2. Ozone 调试指南

Ozone 是 SEGGER 官方推出的全功能调试器,在处理死机排查、多核调试时比 Keil 更加稳定。

2.1 Ozone 工程建立与连接

52 系列 MCU 没有 SWD 接口,如果要用 Ozone 来调试,可以采用 SiFliUsartServer.exe 工具,使用方法如下图设置:

usartserver

新建项目:打开 Ozone,创建一个新项目。

52新建项目

选择调试芯片:在 SIFLI-SDK\tools\svd_external 路径下选择对应的芯片型号目录打开选择svd文件。

52选择芯片

选择连接接口:将 SiFliUsartServer 虚拟的 IP 如图填入。

USART Server

选择固件:选择编译出的 *.axf*.elf 文件。注意后缀名的区别,使用 Keil 编译的后缀名是 .axf,使用 GCC 编译的后缀名是 .elf。

Ozone 中选择 file 之后再选择 open 的选项,随后找到自己想导入的固件选择导入。

52选择固件1

52选择固件2

Attach 程序

  • Attach & Halt Program:让 J-Link 连接到 CPU,并暂停在当前的 PC 指针(排查死机时推荐)。

  • Attach & Run Program:连接到 CPU 并继续从当前 PC 运行。

Attach

开始调试:点击运行程序箭头图标后,CPU 即可单步运行,可以添加断点、查看调用栈信息和寄存器状态。

调试界面

2.2 Ozone 常见调试问题排查

问题 1:连接后出现 Target Connection Lost 频繁断连

经常连接一会就会出现如下断连对话框,随后调试中断:

Target Connection Lost

原因与解决: 这是因为连接 Ozone 进行调试时,默认开启了 Memory 窗口并读取了暂未初始化(如 PSRAM)或不存在的内存地址,读取失败导致断连。连接调试前,请务必关闭 Ozone 的 Memory 窗口和其他不用的窗口。

关闭非法 Memory

问题 2:Ozone 使能 RT-Thread RTOS 线程感知

如果在 Ozone 中希望查看系统线程,请将 SDK 下的插件 \tools\segger\RtThreadOSPlugin.js 复制到 Ozone 安装目录的 Plugins\OS\ 下。重新打开工程,启用 Project.SetOSPlugin("RtThreadOSPlugin"); 即可在线切换 RT-Thread 线程查看和调试。

使能 RTOS Plugin 1 使能 RTOS Plugin 2

问题 3:Ozone 提示 File not found(重定义源码路径)

在烧录的 bin 不是本地编译(例如排查其他人发来的死机现场)的情况下,Ozone 提示 File not found,无法定位到 C 源代码进行单步跟踪。

File not found

解决方法

  • 单个文件找不到:右键该文件,选择 Locate File 并定位到本地对应的 C 源文件。

  • 批量文件基地址不对:在 Ozone 的命令窗口输入 Project.AddPathSubstitute 命令重定位路径,比如将 ELF 中的 Linux 编译路径替换为 Windows 的本地路径。

Path Substitute

问题 4:Ozone Debug 连接不成功

提示:

alt text

解决方法:你需要按照 J-Link 一样,添加好 flash 的驱动和 xml 配置文件,这样 Ozone 才支持。

C:\Program Files\SEGGER\Ozone\Devices\SiFli\SF32LB55X****.elf
C:\Program Files\SEGGER\Ozone\JLinkDevices.xml
# 不同 J-Link  Ozone 版本的路径可能如下:
C:\Users\yourname\AppData\Roaming\SEGGER\JLinkDevices.xml
C:\Users\yourname\AppData\Roaming\SEGGER\JLinkDevices\Devices\SF32LB55X****.elf