硬件异常,HardFault_Handler()
程序一直进入HardFault_Handler(),把堆区和栈区改成400后恢复正常了,跑了不到一个小时又进入HardFault_Handler(),想着把堆栈在加大都没有用。怀疑是代码的原因,但是在国民技术的mcu上跑一点问题没有。请教一下大佬们 请基于AT32 BSP开发,AT32F415不兼容其他MCU muyichuan2012 发表于 2022-11-28 16:21请基于AT32 BSP开发,AT32F415不兼容其他MCU
驱动是根据AT32的bsp开发的 HardFault的原因很多,需要debug单步进行调试 muyichuan2012 发表于 2022-11-28 21:58
HardFault的原因很多,需要debug单步进行调试
原因已找到,写flash后没有锁定,flash里的数据乱了,读数据的时候产生了总线异常,从而引起的硬件中断 基本上可以定位是软件原因。 至少这两个型号的单片机的配置肯定会不一样吧 (1)数组越界操作;
(2)内存溢出,访问越界;
(3)堆栈溢出,程序跑飞;
(4)中断处理错误; 在硬件中断函数HardFault_Handler里的while(1)处打调试断点,程序执行到断点处时点击“STOP”停止仿真 在Keil菜单栏点击“View”——“Call Stack Window”弹出“Call Stack + Locals”对话框。然后在对话框中右键选择“Show Caller Code”,就会跳转到出错之前的函数处,仔细查看这部分函数被调用或者数组内存使用情况 内存溢出或者访问越界。这个需要自己写程序的时候规范代码,遇到了需要慢慢排查。 发生异常之后可首先查看LR寄存器中的值,确定当前使用堆栈为MSP或PSP,然后找到相应堆栈的指针,并在内存中查看相应堆栈里的内容。 可能是软件原因 这个超出了堆栈了。 检测堆栈溢出,以及数组溢出等 常规的指针错误,数组下标溢出 楼主都说是flash出问题导致的,那是不是说明AT32F415兼容其他MCU? 这个是程序的问题。 调试时定位到了错误的函数了吗 单步调试观察到底死在哪里
页:
[1]
2