Hardfault处理方法

keil仿真对HardFault_Handler的处理:

       Hardfault处理方法_第1张图片

        STM32出现硬件错误可能有以下原因:

        (1)数组越界操作;

        (2)内存溢出,访问越界;

        (3)堆栈溢出,程序跑飞;

        (4)中断处理错误;

        在while(1)打断点

    1.提取SP值,SP指向当前使用的栈顶

        Hardfault处理方法_第2张图片Hardfault处理方法_第3张图片

LR值0xFFFFFFE9使用 MSP(主堆栈指针)的值,0xFFFFFFFD使用PSP(进程栈指针)的值

    2.在memory窗口输入栈顶地址SP,提取LR值,LR值指向错误指令的下一条指令

         Hardfault处理方法_第4张图片Hardfault处理方法_第5张图片

    3.在汇编窗口输入LR值,定位错误代码下一条指令位置,在仿真窗口定位错误代码位置

         Hardfault处理方法_第6张图片

         Hardfault处理方法_第7张图片

    4.观察汇编窗口定位错误

        Hardfault处理方法_第8张图片

    5.解析汇编命令

 Hardfault处理方法_第9张图片Hardfault处理方法_第10张图片 Hardfault处理方法_第11张图片Hardfault处理方法_第12张图片Hardfault处理方法_第13张图片Hardfault处理方法_第14张图片

    6.分析ActiveWindowProc函数                           Hardfault处理方法_第15张图片

发现WindowProc地址为堆栈初始化的值,非合法函数地址

     Hardfault处理方法_第16张图片

你可能感兴趣的:(C语言知识)