在gpio_led_output.c 和 startup_MK65F18.S文件添加下面代码,点击运行产生HardFault中断;

/***gpio_led_output.c***/
static void EnableFault(void){SCB->SHCSR |= \(SCB_SHCSR_USGFAULTENA_Msk|SCB_SHCSR_BUSFAULTENA_Msk|SCB_SHCSR_MEMFAULTENA_Msk);}
int main(void)
{/* Define the init structure for the output LED pin*/gpio_pin_config_t led_config = {kGPIO_DigitalOutput, 0,};/* Board pin, clock, debug console init */BOARD_InitPins();BOARD_BootClockRUN();BOARD_InitDebugConsole();EnableFault();*(uint8_t *)0x10000 = 0x12;/* Print a note to terminal. */PRINTF("\r\n GPIO Driver example\r\n");PRINTF("\r\n The LED is blinking.\r\n");/* Init output LED GPIO. */GPIO_PinInit(BOARD_LED_GPIO, BOARD_LED_GPIO_PIN, &led_config);while (1){delay();GPIO_PortToggle(BOARD_LED_GPIO, 1u << BOARD_LED_GPIO_PIN);}
}
/****startup_MK65F18.S****/PUBWEAK HardFault_HandlerSECTION .text:CODE:REORDER:NOROOT(1)
HardFault_HandlerIMPORT hard_fault_handler

一、进入HardFault中断时CPU寄存器的值

二、在进入异常服务程序后, LR的值被自动更新为特殊的 EXC_RETURN,这是一个高28位全为1的值
上图中LR = 0xFFFFFFF9,所以使用的是MSP


三、在内存中找到MSP对应的地址,并查看存储地址的值

四、LR对应的汇编语句,正常执行时,函数返回后的执行地址

五、PC寄存器对应的汇编语句

PC寄存器存储的是中断返回后执行的语句,
1、在异常处理例程完成后需要从中断返回时,LR的值载入到PC中(通常是BX LR指令,也可以是MOV PC,LR指令,或者POP {…, PC}等指令,只要能将LR赋给PC即可),由于LR的值是0xFFFFFFF9,CPU检测到向PC中载入的是这个特殊值时,就知道是中断返回,于是做中断返回的动作(与压入动作相反:从堆栈中弹出核心寄存器的值,恢复到线程模式或Handler模式等)。此时的BX LR 与 一般函数的中所调用的BX LR 有所不同。

2、在进入中断函数之前 PC计数器执行到 0x1964: 0xf7ff 0xf890 BL DbgConsole_Printf ; 0xa88后发生中断进入到HardFault_Handler函数执行第一条指令BX LR;但实际上触发中断的是0x1960: 0x7008 STRB R0, [R1] 这条指令;这可能是因为中断触发延时。如果在没有触发中断的情况下PC将执行0X00000F6B 地址处的语句,

        break;0xf6a: 0xe014         B.N       0xf96LPUART_GetDefaultConfig(&lpuart_config);

当中断返回时,因为是执行这句*(uint8_t *)0x10000 = 0x12; 代码产生了中断,所以在中断返回时PC寄存器将指向0X00001962 地址处执行

 0x1962: 0x480b         LDR.N     R0, [PC, #0x2c]         ; 0x1df0 (7664)

IAR环境 HandFault定位相关推荐

  1. iar环境下c语言编程,c语言_源代码-iar环境配置.pdf

    c语言_源代码-iar环境配置 欢迎光临我的博客:/mikehendry 其实,IAR 编译环境的配置是相当重要的,没配置正确或者不符合自己的习惯的话,使用起来就会很麻烦.下面 我根据网上的经验和资料 ...

  2. LPC1768 IAR环境下使用完整64K内存的方法_整理

    https://blog.csdn.net/tpoem/article/details/98372896 原文有一点错误 这个芯片是NXP公司出的很经典的一款Cortex-M3芯片了 虽然已经过了很多 ...

  3. LPC1768 IAR环境下使用完整64K内存的方法

    这个芯片是NXP公司出的很经典的一款Cortex-M3芯片了 虽然已经过了很多年了,但是依然还有很多地方在用着 这个芯片有一个很不方便的地方 它的64K内存不是连续的! USB和片上以太网MAC各用了 ...

  4. 痞子衡嵌入式:IAR环境下无法直接下载调试i.MXRT分散链接工程的解决方案(宏文件.mac+双Flashloader)...

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是IAR环境下无法直接下载调试i.MXRT分散链接工程的解决方案. 分散链接与加载一直是嵌入式领域比较劝退新手的难题,在恩智浦 i.MXR ...

  5. 三.N32G003 系统性能测试--dhrystone (IAR环境)

    三.N32G003 系统性能测试–dhrystone (IAR环境) 3.IAR 环境下测试结果 3.1 优化等级区别 3.2 FALSH 时延参数区别 3.3 KEIL测试数据 Microsecon ...

  6. iar环境下c语言编程,STM8在IAR环境下的C语言开发.doc

    STM8在IAR环境下的C语言开发 STM8单片机在IAR环境下的C语言开发 头文件搜索路径设置 在工程管理窗口按右键,选择option,打开选项设置窗口如下 选择C/C++ compiler选项,然 ...

  7. IAR环境中实现数据或函数的定位

    定位方法如下三种 1.__no_init char alpha @ 0x0200; 2.#pragma location=0x0202 const int beta; 3.const int gamm ...

  8. STM8 IAP升级程序设计详解 - IAR环境

    一 STM8 IAP 原理分析 IAP原理非常简单,首先我们需要设计两个程序,然后在第一个程序(即Bootloader)中接收(通过串口.IIC.SPI等)第二个程序(即App)的代码,并写入Flas ...

  9. 在多变环境中长期定位和建图的通用框架

    点云PCL免费知识星球,点云论文速读. 文章:A General Framework for Lifelong Localization and Mapping in Changing Environ ...

最新文章

  1. JVM第五部分 高效并发
  2. web网页期末作业-在线教育
  3. 窗口,视图,视图控制器和UIKit基础-IOS开发
  4. Unix EM乱码问题
  5. vuforia的物体识别能识别大物体吗_衢州sensopart 物体识别检测视觉-灵测信息
  6. Linux搭建arm的qemu模拟器
  7. mysql 改变 执行计划_诡异的MySql执行计划的更改
  8. Zabbix 3.4.2 install Configuration
  9. 福师计算机在线作业在每个w,16春季福师《计算机应用基础》在线作业二
  10. ug冲模标准件库_ug标准件库免费
  11. adb指令禁用软件_免Root使用ADB命令_停用手机系统应用
  12. worldpress php部署,用XAMPP搭建本地主机(附worldpress的安装)
  13. 2020年中考英语计算机考试,2020年中考英语听说测试考生问答
  14. 海康相机RTSP连接代码分析
  15. ZOJ Problem Set - 4043 Virtual Singers(2018acm 青岛赛区热身赛)
  16. 打开catia界面全是白色怎么办_CATIA复合材料设计教程:1.软件安装
  17. 【自动控制原理】——第二章——数学模型【时域】【复频域】【梅森增益公式】
  18. 基于Android平台的虚拟试衣关键技术研究
  19. JavaScript中的数值转换函数
  20. Yahoo Programming Contest 2019.D.Ears(DP)

热门文章

  1. APP手机应用程序软件UI设计界面介绍AE模板
  2. 关于Linux下文件删除文件时提示No such file or directory的解决办法
  3. java实现幂等_接口幂等性如何实现?
  4. 运行无法打开计算机策略,win10系统电脑本地组策略打不开无法运行的技巧
  5. zuk 科学计算机,前沿科技:科普ZUK Z1电量百分比设置教程及在设置中加入快速启动开关教程...
  6. 整车下线流程(EOL)测试解决方案介绍
  7. 敏捷遇上UML(2014.4.19 广州站)- 活动报道
  8. ionic capacitor 输入框获取焦点后隐藏键盘
  9. 利用vscode高效阅读《You Don't Know JS》
  10. linux下查找java进程占用CPU过高原因