0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何使用Ozone的调试功能

我快闭嘴 来源:麦克泰技术 作者:麦克泰技术 2022-09-06 11:26 次阅读

Ozone是用于J-link和J-Trace的多平台调试,分析工具。独立的图形化界面,可加载IAR,Keil,Gcc,Clang/LLVM等工具链生成的Elf/Dwarf可执行文件,进行C/C++源代码调试和汇编指令调试。可直接使用J-Link和J-Trace内置功能,如无限flash断点,flash下载,指令跟踪等。在Cortex-M架构上,Ozone可以帮助用户快速发现和分析导致CPU故障的软件错误。本文将介绍如何使用Ozone的调试功能,深入了解这些类型的错误。

分析故障工作流程

我们首先在一个示例的基础上演示Ozone 的分析故障工作流程。示例应用程序可以生成不同类型的 Cortex-M 故障,示例可以在此处(https://wiki.segger.com/File:CortexM_FaultTest.zip)下载。在下图中,示例应用程序已下载到SEGGER Cortex-M Trace开发板板。使用的仿真器是 J-Trace PRO V2。程序已运行至_NoThumbFunc()中,当前PC位于跳转地址0的分支上。由于地址 0 处为一条 Thumb 指令,因此恢复程序执行将导致 Cortex-M CPU 故障。我们继续执行程序,看看 Ozone 如何处理故障。

71a0b520-2d92-11ed-ba43-dac502259ad0.png

一、目标异常窗口

菜单栏点击 GO 后,程序执行立即中断,并弹出 Ozone 的目标异常对话框:

71b53428-2d92-11ed-ba43-dac502259ad0.png

目标异常窗口显示 CPU 故障描述及其系统寄存器的内容。在此示例中,SHCSR 寄存器 USGFAULTACT 指示发生了Cortex-M UsageFault 异常。UFSR寄存器提供已发生的UsageFault 异常; INVSTATE被置位,表示在无效的 CPU 状态下执行指令。USGFAULTENA 表示已启用 UsageFault 处理程序,如果没有使能改位,异常将升级为HardFault。异常寄存器上下文的解释特定于体系结构。因此,Ozone在异常描述中尽可能多的显示处理过的信息。当程序执行暂停且目标处于异常状态时,都会显示目标异常窗口。

二、向量捕获

71c53b34-2d92-11ed-ba43-dac502259ad0.png

开始调试时,Ozone 会启用 Cortex-M 故障向量捕获。这会导致程序执行在进入故障处理程序时立即中止。Ozone 将显示目标异常窗口。如上图所示,可以使用 Ozone 的 Break & Tracepoints 窗口设置或清除单个向量捕获。Ozone还提供命令Break.SetVectorCatch以编程方式编辑目标的矢量捕获状态。例如,此命令可用于在调试启动时修改 Ozone 的默认向量捕获初始化行为。该命令在项目脚本函数OnProjectLoad中使用。

三、调试窗口

现在我们使用Ozone的调试窗口来进一步了解故障。

71cf3044-2d92-11ed-ba43-dac502259ad0.png

Call Stack窗口显示目标处于UsageFault异常状态。该窗口显示故障源自函数_NoThumbFunc。我们在Call Stack窗口中选择_NoThumbFunc。在Call Stack窗口中选择调用帧时,Ozone 的调用帧感知调试窗口会将输出切换到所选帧的执行上下文(请参阅上图)。Local Data窗口指示在函数_NoThumbFunc中执行了地址 0 分支。这导致 CPU 在 ARM 状态下执行 Thumb 指令。查看Ozone的寄存器窗口,寄存器UFSR确认CPU已发出INVSTATE UsageFault。

使用跟踪功能分析故障

在不确定的故障情况下,Cortex-M 内核无法提供故障指令的准确 PC,可以使用 Ozone 的跟踪窗口来快速识别故障指令。

71a0b520-2d92-11ed-ba43-dac502259ad0.png

如上例所示,使用 Ozone 的 Backtrace Highlighting 功能可以轻松地将不精确的 BusFault 异常追溯到错误的存储指令。

总结

Cortex-M处理器异常包含:

(1)HardFault异常,是缺省异常,固定优先级为-1,优先级比除NMI之外的所有中断和异常更高。

(2)MemManage异常,可通过使用内存保护单元(MPU)引起内存访问冲突异常。

(3)BusFault异常,在任一内存访问错误时触发,例如通过非法读/写,向量捕获。

(4)UsageFault异常,在执行错误时触发。UsageFault异常在向量表第6位,IRQ为-11,具有可配置优先级。如果未启用UsageFault,则会改为触发HardFault。

在任一异常中,都会从向量表中调用异常处理程序,类似于中断处理过程。Ozone检测到目标系统崩溃时,会自动分析目标状态并提供所必要的信息。异常窗口指示崩溃的原因,位置以及NVIC寄存器;Call Stack窗口可以从异常中展开,以便导航到错误位置,即使跨过多个异常( The Call Stack Window can also unwind from an exception to enable easy navigation to the location of error, even across multiple exceptions.)。

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 处理器
    +关注

    关注

    68

    文章

    19076

    浏览量

    228688
  • cpu
    cpu
    +关注

    关注

    68

    文章

    10794

    浏览量

    210662
  • Cortex-M
    +关注

    关注

    2

    文章

    227

    浏览量

    29697

原文标题:如何使用Ozone分析Cortex-M故障?

文章出处:【微信号:麦克泰技术,微信公众号:麦克泰技术】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    如何调用Ozone支持的脚本函数来实现自动化的调试工作

    Ozone是一个跨平台支持的代码调试软件,支持Segger J-link和J-Trace调试器。可以加载IAR、keil、GCC、clang/LLVM等工具链编译生成的Elf/Dwarf可执行文件,进行C/C++源码
    的头像 发表于 09-30 11:14 1587次阅读

    在 PSoC™ Creator中使用调试实用程序,为什么无法“实时”看到监视变量?

    KIT_A2G_TC387_MOTORCTR一起使用,我可以在其中实时查看监视的变量和流跟踪数据? 我附上了Segger Ozone调试器的屏幕截图,只是为了显示我正在寻找的功能(例如流媒体数据)。 [我不确定
    发表于 01-18 10:44

    灵动微课堂 (第161讲) | MM32F013x——巧用Ozone调试MM32 MCU

    在上周的《基于Embedded Studio搭建MM32开发环境》的章节中,我们使用了Ozone这款工具进行调试,今天我们来向大家详细地介绍如何使用Ozone调试MM32 MCU,以及
    发表于 03-26 09:27

    SEGGER Ozone调试器使用攻略!

    源码调试和汇编指令调试。通过J-Link实现高速下载和无限Flash断点功能(需J-Link型号支持)。本文将介绍如何使用Ozone调试器。
    发表于 08-11 17:10

    Ozone调试步骤

      首先说一下,我之前的开发流程是:VSCode 编辑代码 + Keil 编译及调试。Keil 的调试功能虽然很强大,但是多数功能需要配合 ARM 自家的 ULINKpro才可以用,例
    发表于 11-04 08:19

    如何使用Ozone分析Cortex-M故障?

    源代码调试和汇编指令调试。可直接使用J-Link和J-Trace内置功能,如无限flash断点,flash下载,指令跟踪等。在Cortex-M架构上,Ozone可以帮助用户快速发现和分
    发表于 09-23 11:26

    如何实现Ozone项目可移植?

    SEGGER Ozone是用于J-link和J-Trace的多平台调试、分析工具。可加载IAR,Keil,Gcc,Clang/LLVM等工具链生成的Elf/Dwarf可执行文件,进行C/C++源代码
    发表于 01-05 13:56

    如何使用ozone调试双核应用?

    在第二个core的ozone中, 点击开始调试, 就不正常了
    发表于 05-26 08:11

    如何在芯片被JTAG保护后用Ozone调试

    一般使用Jlink连接S32K312是可以的,但是我们已经通过写ADKP key实现了JTAG保护,芯片生命周期从CUST_DEL提前到IN_FIELD,我们想在芯片被JTAG保护后用Ozone调试
    发表于 05-29 06:44

    华大 MCU 之六 SEGGER Embedded Studio 及 Ozone 使用 Jlink 调试

      首先说一下,我之前的开发流程是:VSCode 编辑代码 + Keil 编译及调试。Keil 的调试功能虽然很强大,但是多数功能需要配合 ARM 自家的 ULINKpro 才可以用
    发表于 10-29 09:36 9次下载
    华大 MCU 之六 SEGGER Embedded Studio 及 <b class='flag-5'>Ozone</b> 使用 Jlink <b class='flag-5'>调试</b>

    MM32F013x——巧用Ozone调试MM32 MCU

    在上周的《基于Embedded Studio搭建MM32开发环境》的章节中,我们使用了Ozone这款工具进行调试,今天我们来向大家详细地介绍如何使用Ozo...
    发表于 01-25 18:41 2次下载
    MM32F013x——巧用<b class='flag-5'>Ozone</b><b class='flag-5'>调试</b>MM32 MCU

    MM32F013x——巧用Ozone调试MM32

    本文将向大家详细地介绍如何使用Ozone调试MM32 MCU,以及Ozone能给大家带来哪些便利性,体验这款工具的强大之处。
    发表于 02-08 16:23 0次下载
    MM32F013x——巧用<b class='flag-5'>Ozone</b><b class='flag-5'>调试</b>MM32

    如何实现Ozone项目可移植?

    SEGGER Ozone是用于J-link和J-Trace的多平台调试、分析工具。可加载IAR,Keil,Gcc,Clang/LLVM等工具链生成的Elf/Dwarf可执行文件,进行C/C++源代码调试和汇编指令
    的头像 发表于 12-16 11:20 967次阅读

    SEGGER的Ozone现可支持用于M1/M2(ARM内核)上的macOS

    SEGGER的市场经理Dirk Akemann说:“基于客户的大量要求和Apple 处理器产品的流行,我们决定推出一款新的Ozone。”“苹果架构系统对我们的J-Link调试仿真器和开发工具Embedded Studio及SystemView的需求一直很高,所以我们决定将
    的头像 发表于 04-07 11:10 852次阅读

    Ozone的3.30版本——J-Link调试器发布

    SEGGER宣布最新的Ozone的3.30版本——J-Link调试器发布。此更新带来了许多新功能和改进,将增强您的调试体验。
    的头像 发表于 06-13 11:37 1031次阅读