深入的Cortex-M3内核问题,程序跑飞了,HardFault_Handler

云帆直挂 云帆直挂 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
在调试can通信过程产生的问题,我是用定时器中断每隔一定时间,就让单片机(一个节点)发送一帧数据给另一个节点。这些都不是关键。关键是在我没有使用定时器TIM4的时候(此时,已经打开了串口,can接收中断),一切都ok。在初始化TIM4后,打开了TIM4_IRQHandler定时器中断,问题出现了
在进入定时器中断 1 到 2次后,pc跳入了STM32的启动文件里,下面这个地方:(且R14(LR)寄存器的值为一个莫名的地址0xfffffff1)
HardFault_Handler\
PROC
EXPORT HardFault_Handler [WEAK]
B .
ENDP
这里先排除掉几个方面,TIM4_IRQHandler是定义里的有入口地址,STM32F103RET6启动文件配置正确。(我没有用OS操作系统,只是简单单片机程序)。
这两天简单研究了一下M3核的汇编指令,试着解决问题。对于跳入HardFault_Handler的问题,网上的答案,只隔靴挠痒,没有解决实质问题,说是什么,指针指向系统不允许的地方、数据数组溢出了,硬件错误,等等。
且不说是不是这些原因。我也单步调试了,关键是怎么知道数组是否越界?怎么找硬件出错的地方。或者写个汇编代码,把问题出错的地方打印出来。捣腾3天了……只好求助于各位大侠了!先谢谢
...全文

相关推荐

Cortex-M3_内核HardFault错误调试定位方法

Cortex-M3_内核HardFault错误调试定位方法 Cortex-M3_内核HardFault错误调试定位方法 Cortex-M3_内核HardFault错误调试定位方法 Cortex-M3_内核HardFault错误调试定位方法

csdn杰哥

Cortex-M内核HardFault_Handler底层原理图解说明

深入剖析Cortex-M内核中hardfault_handler的触发机制与底层响应流程,结合图解揭示异常入口与堆栈行为,帮助开发者快速定位硬故障根源。

凯二七

Cortex-M系列HardFault_Handler()最强分析“CmBacktrace”

一、简介 先引用一句话 “俗话说,工欲善其事,必先利其器。所以有时候做事效率低的原因也许是,你会用的工具种类太少。” 对于从 C51 、MSP430 等简单单片机转而使用更加复杂的 ARM 新人来说,时不时出现的 "hard falut" 死机会让新人瞬间懵掉。定位错误的方法也往往是连接上仿真器,一步步 F10/F11 单步,定位到具体的错误代码,再去猜测、排除、推敲错误原因,或者使用“屏蔽大法”,这种过程往往浪费几天时间且十分痛苦。 慢慢的大家知道可以通过故障寄存器信息来定位故障原因及故障代码地址,

风吹花中花吹风

HardFault_Handler问题查找方法

STM32出现HardFault_Handler故障的原因主要有两个方面: 1、内存溢出或者访问越界。这个需要自己写程序的时候规范代码,遇到了需要慢慢排查。 2、堆栈溢出。增加堆栈的大小。

weixin_38680957

关于STM32的flash读写数据和HardFault_Handler的问题

今天调试程序的时候需要把掉电前的数据存储到flash中之后等待下次初始化的时候把数据读进来。刚刚开始的时候去找了一些stm32的flash的操作,真的是废话连篇的真正能用到的没几句话,这里我把自己调试好的flash读写数据的子函数跟大家分享一下。

weixin_38687539
评论 7
收藏 已收藏
分享
返回顶部