Jlink

您所在的位置:网站首页 单片机在哪里运行的软件好 Jlink

Jlink

2024-07-11 18:17| 来源: 网络整理| 查看: 265

问题现象

写了个测试程序,运行2小时后出现程序陷入死循环。设备已经死机。利用没有复位的剩余价值减少代码review的范围,

基础介绍

堆栈指针R13(SP)

当ARM进入异常模式的时候,程序就可以把一般通用寄存器压入堆栈,返回时再出栈,保证了各种模式下程序的状态的完整性。

连接寄存器R14(LR) 每种模式下r14都有自身版组,它有两个特殊功能:

保存子程序返回地址。当异常发生时,异常模式的r14用来保存异常返回地址,将r14如栈可以处理嵌套中断。 程序计数寄存器R15 PC 指向当前的程序地址。如果修改它的值,就能改变程序的执行流。 实现原理

查看死机时PC,LR,SP三个特殊的寄存器的值。然后通过仿真中的汇编直接查找对应的程序。

实际操作

首先需要准备好jlink和三根杜邦线链接SDO、SCK和GND。千万不要连复位引脚,因为很有可能不小心复位了,导致案发现场被破坏。 然后打开Jlink Commander软件 在这里插入图片描述

1、敲入以下命令:connect 根据提示选择对应芯片 在这里插入图片描述 2、输入h: 可以看到对应指针的值,记下这三个值。因为我的程序都在sdram里面跑,在rt1052单片机中对应的地址都是0x80000000之后的。 在这里插入图片描述

3、可以试下g(go继续跑) 、h(halt)看下程序是否还在跑。因为我这边PC指针一直在这个值,所以怀疑是个死循环。 4、使用mem指令看sp压栈的内容,我们找出附近所有0x80xxxxxxx开头的地址并进行记录。这里是小端模式所以对应的应该是xx xx xx 80。(需要根据实际单片和代码在哪里运行分析,也可能是内部ram0x20xxxxxx,也可能是0x68xxxxxx的sram,stm32芯片外部扩展地址可能与nxp不一致,所以一定要看芯片手册) 在这里插入图片描述 5、断电重启或者另外一台设备进行仿真 在这里插入图片描述 输入需要查询的地址,注意需要加上0x,例如0x80015BBF。先查PC和LR,如果没有什么发现再去看SP指针的那一堆数据中可疑的地址。 在这里插入图片描述 然后定位到了对应函数。这边是因为fifo队列满了导致死循环 在这里插入图片描述



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3