准备植发程序猿 发表于 2022-11-26 16:05

硬件异常,HardFault_Handler()

程序一直进入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

单步调试观察到底死在哪里            
页: [1] 2
查看完整版本: 硬件异常,HardFault_Handler()