STM32KEIL5内存调试技巧

通过keil5调试,查看堆栈内存,从而确定错误代码。

        先进入KEIL5调试,点击这个书,全力运行.

然后点击红色的按钮,停止运行。

然后会进入到错误中断函数中,我这个地方进入的是硬件错误中断函数

然后打开左边寄存器和堆栈内存的窗口

可以看到R14(LR)寄存器的值为0xFFFFFFF1

LR正常的值:

0xFFFFFFF1 表示中断返回时从MSP堆栈恢复寄存器值,中断返回后进入Handler模式,使用MSP堆栈,(相当于从中断返回到另一个中断)。

0xFFFFFFF9 表示中断返回时从MSP堆栈恢复寄存器值,中断返回后进入线程模式,使用MSP堆栈(这种用于不使用PSP只使用MSP堆栈的情况)。

0xFFFFFFFD 表示中断返回时从PSP堆栈恢复寄存器值,中断返回后进入线程模式,使用PSP堆栈(这是常见的,OS处理完中断后返回用户程序)

所以我们要去看MSP堆栈的值

MSP的值为0x20014A88。我们复制这个值。打开view->memory->memory windows

输入MSP的堆栈地址:0x20014A88A,回车。

因为STM32是小端模式,所以地址要转变一下。

第一个地址为R0:0xFB1DF60D

第二个地址为R1:0x20000190

第三个地址为R2:0x0000000

第四个地址为R3:0x000000C

第五个地址为R12:0xA5A5A5A5

第六个地址为LR:0x08001B11

在此之前先了解一些知识

MSP的含义是Main_Stack_Pointer,即主栈
PSP的含义是 Process_Stack_Pointer,即任务栈

1、中断到来

会依次保存寄存器中的值,由硬件自动完成。中断到来,由MSP自动保存地址

依次顺序执行R0,R1,R2,R3,R12,LR。所以可以通过MSP地址找到R0,R1,R2,R3,R12,LR的值

取出LR的值,即为代码错误的地方 

输入地址,然后GO TO

会自动跳转到代码出错的地方,具体错误根据情况自行分析

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值