T5 简单dump指导文档
更新时间:2025-09-02 08:12:16下载pdf
1. 将死机LOG抓一个完整的周期,从死机到下一次重启,然后搜关键字:
arm-none-eabi-addr2line

2.在这里往上找最接近的Current regs,如果是:CPU1 Current regs(那么就是死在了CPU1),如果是CPU0 Current regs(那么就是死在了CPU0)

3.在T5_TuyaOS-3.12.7\software\TuyaOS创建一个debug文件夹,用于放客户的elf文件(死在哪个CPU就用对应CPU底下生成的elf文件),elf文件是在你编译代码以后生成的文件,如下路径:apps\tuyaos_iot_t5_gui_demo_product_class-T5_gui_demo_quickstart\output\1.0.0\debug

4.在T5_TuyaOS-3.12.7\T5_TuyaOS-3.12.7\software\TuyaOS目录下打开终端输入指令:
find -name arm-none-eabi-addr2line
回复:./vendor/T5/toolchain/gcc-arm-none-eabi-10.3-2021.10/bin/arm-none-eabi-addr2line
找到对应的路径,然后输入对应的指令去解析:

./vendor/T5/toolchain/gcc-arm-none-eabi-10.3-2021.10/bin/arm-none-eabi-addr2line -e
./debug/app.elf -a -f 0225b736 0225b75d

5.死机寄存器分析

R0:通用寄存器0。在ARM中,R0-R3通常用于传递参数给函数。当调用一个函数时,第一个参数通常放在R0里。很可能是一个内存地址(指向某个数据或结构体)或者就是一个普通的计算值。。
R1:通用寄存器1,用于传递函数的第二个参数, 这可能是一个地址或一个数值。
R2:通用寄存器2。用于传递函数的第三个参数或作为临时变量。
R3:通用寄存器3。用于传递函数的第四个参数或作为临时变量。
LR(链接寄存器):CPU会自动将返回地址(即当前PC的下一条指令地址)保存到LR中。
PC(Program Counter(程序计数器)):它存储着当前正在执行的指令的地址。CPU就是根据这个地址从内存中读取指令来执行的。它指向的是下一条即将被执行的指令。
PSR(程序状态寄存器):这是一个包含多个条件标志位和控制位的寄存器。它记录了CPU的当前状态。
综合情景分析
根据这些值,我们可以推测出程序在崩溃或记录瞬间正在做什么:
1.位置: 程序正执行在 0225b736(PC的值)。
2.函数调用: LR的值是 0225b75d,这个地址比PC的值 (0225b736) 大,意味着当前正在执行一个函数,而这个函数是被来自 0225b75d - 2 或 0225b75d - 4(取决于Thumb模式)位置的代码调用的。函数执行完毕后应该返回到 0225b75d。
3.函数参数: 从R0和R1有非零值而R2和R3为零来看,当前执行的函数很可能是使用两个参数调用的(值在R0和R1中)。
4.处理器状态: CPU处于Thumb模式(如果PSR的T位为1),正在执行16位宽的指令。
这种寄存器快照在调试时极其有用,例如当程序发生崩溃(如HardFault)时,开发者通过分析这些寄存器的值,尤其是PC和LR,可以回溯调用栈,定位到出问题的代码行。