[AT32F415] 硬件异常,HardFault_Handler()

[复制链接]
2774|22
 楼主| 准备植发程序猿 发表于 2022-11-26 16:05 | 显示全部楼层 |阅读模式
程序一直进入HardFault_Handler(),把堆区和栈区改成400后恢复正常了,跑了不到一个小时又进入HardFault_Handler(),想着把堆栈在加大都没有用。怀疑是代码的原因,但是在国民技术的mcu上跑一点问题没有。请教一下大佬们
muyichuan2012 发表于 2022-11-28 16:21 | 显示全部楼层
请基于AT32 BSP开发,AT32F415不兼容其他MCU
 楼主| 准备植发程序猿 发表于 2022-11-28 19:27 | 显示全部楼层
muyichuan2012 发表于 2022-11-28 16:21
请基于AT32 BSP开发,AT32F415不兼容其他MCU

驱动是根据AT32的bsp开发的
muyichuan2012 发表于 2022-11-28 21:58 | 显示全部楼层
HardFault的原因很多,需要debug单步进行调试
 楼主| 准备植发程序猿 发表于 2022-12-1 17:41 | 显示全部楼层
muyichuan2012 发表于 2022-11-28 21:58
HardFault的原因很多,需要debug单步进行调试

原因已找到,写flash后没有锁定,flash里的数据乱了,读数据的时候产生了总线异常,从而引起的硬件中断
caigang13 发表于 2022-12-1 19:47 来自手机 | 显示全部楼层
基本上可以定位是软件原因。
tpgf 发表于 2022-12-9 09:42 | 显示全部楼层
至少这两个型号的单片机的配置肯定会不一样吧
木木guainv 发表于 2022-12-9 10:48 | 显示全部楼层
(1)数组越界操作;

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

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

(4)中断处理错误;
xiaoqizi 发表于 2022-12-9 11:00 | 显示全部楼层
在硬件中断函数HardFault_Handler里的while(1)处打调试断点,程序执行到断点处时点击“STOP”停止仿真
wowu 发表于 2022-12-9 11:11 | 显示全部楼层
在Keil菜单栏点击“View”——“Call Stack Window”弹出“Call Stack + Locals”对话框。然后在对话框中右键选择“Show Caller Code”,就会跳转到出错之前的函数处,仔细查看这部分函数被调用或者数组内存使用情况
wakayi 发表于 2022-12-9 11:24 | 显示全部楼层
内存溢出或者访问越界。这个需要自己写程序的时候规范代码,遇到了需要慢慢排查。
renzheshengui 发表于 2022-12-9 11:39 | 显示全部楼层
发生异常之后可首先查看LR寄存器中的值,确定当前使用堆栈为MSP或PSP,然后找到相应堆栈的指针,并在内存中查看相应堆栈里的内容。
Bowclad 发表于 2023-2-7 19:53 | 显示全部楼层
可能是软件原因
macpherson 发表于 2023-3-7 13:44 | 显示全部楼层
这个超出了堆栈了。              
pmp 发表于 2023-3-7 13:50 | 显示全部楼层
检测堆栈溢出,以及数组溢出等              
jonas222 发表于 2023-3-7 14:01 | 显示全部楼层
常规的指针错误,数组下标溢出               
小小蚂蚁举千斤 发表于 2023-3-7 16:11 | 显示全部楼层
楼主都说是flash出问题导致的,那是不是说明AT32F415兼容其他MCU?
cemaj 发表于 2023-3-7 20:09 | 显示全部楼层
这个是程序的问题。              
jackcat 发表于 2023-3-7 20:24 | 显示全部楼层
调试时定位到了错误的函数了吗              
xiaoyaodz 发表于 2023-3-7 20:53 | 显示全部楼层
单步调试观察到底死在哪里              
您需要登录后才可以回帖 登录 | 注册

本版积分规则

10

主题

32

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部