• MCU定位问题(二)


    将两篇文章合并了,方便阅读 2023/08/31

    Ozone 调试

    什么是Ozone?

    Ozone 是 Segger 公司开发的一个调试工具,用于 Trace 程序的运行。

    OZONE是用于嵌入式系统调试的开源调试器。它提供了一套工具和界面,用于帮助开发人员调试嵌入式设备上的软件和硬件问题。OZONE主要用于ARM Cortex-M微控制器的调试,但也可以扩展到其他体系结构。

    以下是OZONE调试器的一些主要特性和用法:

    1. 图形化调试界面: OZONE提供了一个直观的图形用户界面,允许开发人员以可视化方式查看、监控和控制目标设备的运行状态。

    2. 调试功能: OZONE支持基本的调试功能,如断点、单步执行、观察寄存器值、查看内存内容等。

    3. Trace支持: OZONE支持硬件追踪器(如ETM)来捕获和显示实时的执行跟踪信息,帮助分析代码的执行路径。

    4. 事件跟踪: 它可以记录和显示事件,例如中断、异常和系统调用,以帮助开发人员理解系统的行为。

    5. RTOS支持: OZONE可以集成到各种实时操作系统(RTOS)中,以提供对多任务和多线程应用程序的调试支持。

    6. 触发条件: OZONE允许设置触发条件,当某些事件发生时自动暂停目标设备的执行,以便进行调试。

    7. 外设仿真: 它可以模拟外设的输入和输出,帮助调试与外部设备交互的代码。

    使用OZONE进行嵌入式调试通常需要以下步骤:

    1. 安装OZONE: 下载并安装OZONE调试器,它通常与支持的开发环境(如Eclipse)一起使用。

    2. 连接目标设备: 将OZONE调试器与目标嵌入式设备连接。这可能需要硬件调试适配器,如JTAG或SWD适配器。

    3. 配置调试会话: 在OZONE中配置目标设备的连接和调试选项,例如选择正确的调试适配器、设备型号、通信接口等。

    4. 加载程序: 将要调试的程序加载到目标设备的内存中。

    5. 设置断点: 在代码中设置断点,以便在特定位置暂停执行以进行调试。

    6. 运行和调试: 启动目标设备并运行程序。使用OZONE的调试界面监控程序的执行状态,使用各种调试功能进行问题分析。

    7. 数据查看和分析: 在OZONE中查看寄存器的值、内存内容和事件记录,以便分析程序的行为。

    8. 解决问题: 根据调试信息,定位和解决程序中的问题。

    OZONE调试器在嵌入式开发中提供了强大的工具,帮助开发人员更轻松地诊断和解决问题。具体的使用方法和步骤可能会因为目标设备的体系结构、硬件适配器等而有所不同,建议参考OZONE的官方文档和指南以获取详细的操作指导。

    1. AXF文件反汇编

    在C:\Keil_v5\ARM\ARMCC\bin下 fromelf -c xxx.axf -o xxx.txt 生成一个txt文件

    2. Ozone调试AXF

    非侵入式调试首选,连接之后不复位,重新下载,并选择AXF文件进行调试。
    在这里插入图片描述

    查看Register窗口,如果LR寄存器数值为0XFFFF_FFF9 表示为返回线程模式,并使用主堆栈(SP=MSP)
    如果LR寄存器数值为0XFFF_FFFD 表示为使用线程堆栈(SP=PSP)

    LR寄存器非以上值时,SHIFT+F10 跳过while(1),直到HardFault_Handler顶层目录,再查看LR寄存器
    在这里插入图片描述

    优先查看PSP寄存器,找到对应内存信息后保存该片信息。

    分析时找到上面保存的内存片信息中的flash地址(通常为0x08xxxxxxxxx)找到

    再将flash地址最低位清零,在反汇编文件中找对应地址

    把内存片中的flash地址 遍历一遍找到调用关系

    3. 错误分析

    在这里插入图片描述
    可以通过Registers->CPU->Peripherals->SCB 中查看错误标志分析

    cm_backtrace

    打开该组件后会在HardFault时打印AXF文件名称、出错线程、堆栈信息、寄存器信息。
    找到addr对应data中的flash地址
    使用addr2line -e xxx.axf -a -f deadbeef 0800xxxx 就可以输出对应函数和所在.c的行号

    Ozone及addr2line.exe在我的链接中自取。

    使用Keil进行非侵入式调试 保姆级教程

    在这里插入图片描述
    Options for Target -> Debug界面,见下图
    ① 取消Load Application at Startup
    ② 加载一个特殊的ini文件

    load %L INCREMENTAL
    
    Setup();                             // Setup for Running
    
    g, main
    
    • 1
    • 2
    • 3
    • 4
    • 5

    主要就是模拟硬件复位,像从0地址获取SP,PC的值一样,这边是从指定的地址0x20000000去获取SP、PC、中断向量表,然后从当前PC值运行,直到到main,停下来。
    用于加载.axf,获取调试信息。
    ③ 点击 Settings
    在这里插入图片描述
    ④ 取消Reset after Connect
    在这里插入图片描述
    ⑤ 选择Do not Erase 后面的Program什么的全部取消
    在这里插入图片描述
    ⑥ 进入调试模式 点一下暂停后在watch窗口输入变量查看

  • 相关阅读:
    单个vue echarts页面
    软件设计模式(四):观察者、组合、享元模式
    Python柯布-道格拉斯效用函数规划食品预算和拟合前沿生产函数评估农作物生产效率
    Vue3 父组件调用子组件方法($refs 在setup()、<script setup> 中使用)
    Redis源码(1) 建立监听服务和开启事件循环
    发光太阳聚光器的蒙特卡洛光线追踪研究(Matlab代码实现)
    歌尔气压计SPA06-003在无人机和手表上的创新应用
    Python学习笔记合集(Matplotlib总结)
    深入浅出PyTorch函数torch.rand与torch.randn
    Kubernetes 控制平面组件:etcd
  • 原文地址:https://blog.csdn.net/qq_44710568/article/details/127755010