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

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

3天内不再提示

如何使用Ozone的快照功能

麦克泰技术 来源:麦克泰技术 2024-11-05 17:38 次阅读

Ozone是一个跨平台支持的代码调试软件,支持J-link和J-Trace调试器。可以加载SES、Keil、GCC、clang/LLVM等工具链编译生成的Elf/Dwarf可执行文件,进行C/C++源码调试和汇编指令调试。

Ozone新版本中增加了调试快照特性,可以保存整个系统状态,包括RAM、Flash、CPU寄存器、选定的外设、时间轴、代码概要(执行计数器)、数据图、功率图、终端日志、控制台日志等信息

后续加载快照时,所有调试窗口展示快照创建时所显示的信息,包括调用栈call stack、符号、任务、内存和寄存器窗口。

高级目标系统状态,如时钟、IRQ和外设配置,可以精确地从快照中恢复。这意味着即使是复杂的多任务程序和带有外设IO的程序也可以从快照点恢复。

快照可以在目标离线模式下加载和观察。这意味着加载快照时不需要硬件,甚至不需要J-Link或J-Trace。

保存快照

通过快照对话框用户可以定义将哪些数据保存到快照中。该对话框提供了两个子对话框,允许定义组件的系统状态,即哪些内存区域,CPU,浮点和外设寄存器要保存。可以从Debug菜单或通过执行命令Debug.SaveSnapshot访问该对话框。

c8549a32-90ad-11ef-a511-92fbcf53809c.png

寄存器选择对话框的默认配置,以及存储到快照的默认目标寄存器集包含:所有基本的CPU寄存器,及FP寄存器。

内存选择对话框的默认配置,以及存储到快照的默认目标内存区域包括:在J-Link APIMCU数据库中为目标定义的FLASH和RAM区域;设置了可分配标志(A)的ELF程序数据段。

可以通过单击Restore Defaults按钮来恢复这些默认配置。Import按钮导入允许从SEGGER Embedded Studio内存映射文件中添加内存区域。Save to Project按钮将当前配置保存到项目的用户文件(jdebug.user)中。快照使用SEGGER的emCompress软件库进行压缩,磁盘格式是内部文档。

加载快照

可以从Debug菜单或通过执行命令Debug .LoadSnapshot访问加载快照对话框。

c88a8bc4-90ad-11ef-a511-92fbcf53809c.png

在加载快照之前,用户必须确保:

选择与快照目标设备匹配的目标设备

加载与保存快照时的程序映像相匹配的程序文件。

选择与快照跟踪源匹配的跟踪源。

图形化表达式列表与拍摄快照时的表达式列表相匹配。

当上述任何条件不适用时,将弹出一个警告对话框:

c8b1309e-90ad-11ef-a511-92fbcf53809c.png

确保上述前提条件的一种简单方法是在打开用于创建快照的工程文件后加载快照。

系统恢复顺序

加载快照时,将按照它们在快照中出现的顺序恢复寄存器和内存区域。这个顺序与内存和寄存器选择对话框显示的顺序相同。当以目标在线模式加载快照时,非基本CPU寄存器不会立即写入目标。用户必须对系统、外设和内存映射寄存器应用于目标的具体方式进行编程

快照编程

为了从快照中恢复高级系统状态,例如(时钟)外设,用户通常需要对恢复操作的精确顺序进行编程。为了支持这一点,Ozone提供了脚本函数OnSnapshotSave和OnSnapshotLoad和一个命令组Snapshot定制快照文件的读取和写入。

/*********************************************************************                                 
*    SNAPSHOT_Restore_System_Generic           
* Function description                        
*  Loads and applies generic system state from a snapshot
* Return Value
*  0: OK
* -1: error
* Notes
*  (1) User function
***********************************************************************/                                   
void OnSnapshotSave (void) {
 Util.Log("OnSnapshotSave: saving system state..."); 
 //
 // Save Cortex-M specific system state
 //
 Snapshot.SaveReg("CPU.Peripherals.SCB.VTOR");   // Vector table offset register
 Snapshot.SaveReg("CPU.Peripherals.DWT.DWT_CTRL"); // DWT unit status & control register (SYSTEMVIEW)
 Snapshot.SaveReg("CPU.Peripherals.SYSTICK");    // System timer configuration (SYSTICK)
 Snapshot.SaveReg("CPU.Peripherals.SCB.SHPR3");   // Cortex-M IRQ priorties 12-15 (SYSTICK)
 Snapshot.SaveReg("CPU.Peripherals.SCB.CPACR");   // FPU and coprocessor control register
 //
 // Save system clock configuration
 //
 Snapshot.SaveReg("Peripherals.RCC.CR");
 Snapshot.SaveReg("Peripherals.RCC.CFGR");
 Snapshot.SaveReg("Peripherals.RCC.PLLCFGR");
 //
 // Save FLASH configuration
 //
 Snapshot.SaveReg("Peripherals.FLASH.ACR");
 //
 // Save LED configuration
 //
 Snapshot.SaveReg("Peripherals.RCC.AHB1RSTR");   // LED port reset register
 Snapshot.SaveReg("Peripherals.RCC.AHB1ENR");   // LED port clock enable register
 Snapshot.SaveReg("Peripherals.GPIO.GPIOA.MODER"); // LED port mode register
 Snapshot.SaveReg("Peripherals.GPIO.GPIOA.ODR");  // LED port output data register
 //
 // Power configuration
 //
 Snapshot.SaveReg("Peripherals.PWR.CR");
 //
 // APB1 clock
 //
 Snapshot.SaveReg("Peripherals.RCC.APB1ENR"); 
 
 Util.Log("OnSnapshotSave: system state saved."); 
}
                               
/*********************************************************************
*    OnSnapshotLoad                        
* Function description                        
*  Optional event handler, called upon loading a snapshot.      
* Additional information                       
*  This function is used to restore the target state in cases    
*  where values cannot simply be written to the target.       
*  Typical use: GPIO clock needs to be enabled, before        
*  GPIO is configured.                        
***********************************************************************/                                   
void OnSnapshotLoad (void) {  
 Util.Log("OnSnapshotLoad: restoring system state...");
 
 if (SNAPSHOT_Restore_System_Generic() != 0) {
   Util.Log("OnSnapshotLoad : failed to restore generic system state");
   return 0;
 }
 if (SNAPSHOT_Restore_SysClock() != 0) {
   Util.Log("OnSnapshotLoad : failed to resore clock-specific system state");
   return 0;
 }
 if (SNAPSHOT_Restore_OS() != 0) {
   Util.Log("OnSnapshotLoad : failed to restore OS-specific system state");
   return 0;
 }
 if (SNAPSHOT_Restore_Board() != 0) {
   Util.Log("OnSnapshotLoad : failed to restore board-specific system state");
   return 0;
 }
 Util.Log("OnSnapshotLoad: system state restored.");
}

快照脚本功能目前仅针对系统寄存器状态。当快照以在线模式加载时,CPU寄存器和内存数据自动写入目标,不依赖于脚本函数OnSnapshotLoad。更多可以在脚本函数OnSnapshotLoad和OnSnapshotSave中使用调试命令,可以参考Ozone用户手册。

快照存储不能以用户可读的格式轻松有效地存储的二进制调试会话数据。快照的典型应用场景如下:

快照允许客户脱离调试会话,并能够在稍后的时间点恢复会话。

快照允许更容易地重现和分析错误,可以由不同主机上的多方进行。

快照提高Ozone的教学和演示能力,用于培训课程和会议。

快照作为存档。

快照功能目前仅支持Cortex-M架构处理器

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

    关注

    31

    文章

    5363

    浏览量

    121039
  • 软件
    +关注

    关注

    69

    文章

    5007

    浏览量

    88005
  • C++
    C++
    +关注

    关注

    22

    文章

    2114

    浏览量

    73820
  • 调试器
    +关注

    关注

    1

    文章

    306

    浏览量

    23823

原文标题:如何使用Ozone的快照功能

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

收藏 人收藏

    评论

    相关推荐

    如何使用Ozone分析Cortex-M异常

    Ozone可以帮助用户快速分析和查找导致CPU故障的软件bug。本文解释如何使用Ozone的调试功能,深入了解Cortex-M架构上的这些错误。
    的头像 发表于 11-29 11:14 904次阅读
    如何使用<b class='flag-5'>Ozone</b>分析Cortex-M异常

    HarmonyOS实战开发-内存快照Snapshot Profiler功能使用指导

    DevEco Studio集成的DevEco Profiler性能调优工具(以下简称为Profiler),提供Time、Allocation、Snapshot、CPU等场景化分析任务类型。内存快照
    发表于 05-11 13:51

    NAS存储如何使用SnapShot快照功能

    ,找到SnapShot,点击安装; 2.单击SnapShot图标打开应用; 3.从文件夹列表中选择一个文件夹,点击拍快照; 4.你也可以为共享文件夹启用快照计划,选中一个共享文件夹,点击设置; 5.勾
    发表于 11-26 18:25

    SEGGER Ozone调试器使用攻略!

    源码调试和汇编指令调试。通过J-Link实现高速下载和无限Flash断点功能(需J-Link型号支持)。本文将介绍如何使用Ozone调试器。安装软件并创建调试工程(1)首先需要去Segger官网下载并
    发表于 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可以帮助用户快速发现和分析导致CPU故障
    发表于 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

    QNAP推出TS-x28A系列 宣告全面支持快照功能

    威联通科技推出全新TS-128A及TS-228A两款机种,提供了多样的多媒体储存、并具备快照等各种档案及资料保护功能.TS-x28A系列仅1 GB存储器即可使用快照功能,展现了QNAP
    发表于 01-16 08:47 4690次阅读

    MM32F013x——巧用Ozone调试MM32

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

    如何使用Ozone的调试功能

    源代码调试和汇编指令调试。可直接使用J-Link和J-Trace内置功能,如无限flash断点,flash下载,指令跟踪等。在Cortex-M架构上,Ozone可以帮助用户快速发现和分析导致CPU故障的软件错误。本文将介绍如何使用Ozo
    的头像 发表于 09-06 11:26 5660次阅读

    如何实现Ozone项目可移植?

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

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

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

    什么是DTC快照信息

    什么是DTC快照信息 DTC快照信息是通过UDS协议获取的一种特定数据记录,用于帮助诊断车辆故障。根据ISO 14229标准的规定,DTC快照信息就类似照相机一样,在故障发生的时刻,对整车信息按下
    的头像 发表于 07-26 11:13 3726次阅读
    什么是DTC<b class='flag-5'>快照</b>信息

    鸿蒙开发:【设置任务快照的图标和名称】

    设置任务快照的图标和名称是为了提高用户界面的可视化性和用户体验,以便更好地管理和跟踪应用程序中的任务和功能。通过为每个任务快照设置不同的图标和名称,可以更轻松地区分和识别每个任务的功能
    的头像 发表于 06-14 14:33 402次阅读
    鸿蒙开发:【设置任务<b class='flag-5'>快照</b>的图标和名称】