将两篇文章合并了,方便阅读 2023/08/31
Ozone 调试
什么是Ozone?
Ozone 是 Segger 公司开发的一个调试工具,用于 Trace 程序的运行。
OZONE是用于嵌入式系统调试的开源调试器。它提供了一套工具和界面,用于帮助开发人员调试嵌入式设备上的软件和硬件问题。OZONE主要用于ARM Cortex-M微控制器的调试,但也可以扩展到其他体系结构。
以下是OZONE调试器的一些主要特性和用法:
-
图形化调试界面: OZONE提供了一个直观的图形用户界面,允许开发人员以可视化方式查看、监控和控制目标设备的运行状态。
-
调试功能: OZONE支持基本的调试功能,如断点、单步执行、观察寄存器值、查看内存内容等。
-
Trace支持: OZONE支持硬件追踪器(如ETM)来捕获和显示实时的执行跟踪信息,帮助分析代码的执行路径。
-
事件跟踪: 它可以记录和显示事件,例如中断、异常和系统调用,以帮助开发人员理解系统的行为。
-
RTOS支持: OZONE可以集成到各种实时操作系统(RTOS)中,以提供对多任务和多线程应用程序的调试支持。
-
触发条件: OZONE允许设置触发条件,当某些事件发生时自动暂停目标设备的执行,以便进行调试。
-
外设仿真: 它可以模拟外设的输入和输出,帮助调试与外部设备交互的代码。
使用OZONE进行嵌入式调试通常需要以下步骤:
-
安装OZONE: 下载并安装OZONE调试器,它通常与支持的开发环境(如Eclipse)一起使用。
-
连接目标设备: 将OZONE调试器与目标嵌入式设备连接。这可能需要硬件调试适配器,如JTAG或SWD适配器。
-
配置调试会话: 在OZONE中配置目标设备的连接和调试选项,例如选择正确的调试适配器、设备型号、通信接口等。
-
加载程序: 将要调试的程序加载到目标设备的内存中。
-
设置断点: 在代码中设置断点,以便在特定位置暂停执行以进行调试。
-
运行和调试: 启动目标设备并运行程序。使用OZONE的调试界面监控程序的执行状态,使用各种调试功能进行问题分析。
-
数据查看和分析: 在OZONE中查看寄存器的值、内存内容和事件记录,以便分析程序的行为。
-
解决问题: 根据调试信息,定位和解决程序中的问题。
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文件文章来源:https://www.toymoban.com/news/detail-690412.html
load %L INCREMENTAL
Setup(); // Setup for Running
g, main
主要就是模拟硬件复位,像从0地址获取SP,PC的值一样,这边是从指定的地址0x20000000去获取SP、PC、中断向量表,然后从当前PC值运行,直到到main,停下来。
用于加载.axf,获取调试信息。
③ 点击 Settings
④ 取消Reset after Connect
⑤ 选择Do not Erase 后面的Program什么的全部取消
⑥ 进入调试模式 点一下暂停后在watch窗口输入变量查看文章来源地址https://www.toymoban.com/news/detail-690412.html
到了这里,关于MCU死机定位问题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!