求助:程序进入HardFault硬件中断中
程序运行时会莫名的进入HardFault硬件中断中,尝试了一周的时间,试过以下方法始终不能找到问题出在哪里,希望有人能指导下:1.换硬件,依然出现,可以排除硬件自身原因;2.在代码中加入nop()问题消失,再加一个nop()问题又出现;
3.将代码中一个计数的变量判断条件>4000改成>4001问题消失,改回4000问题又出现;
4.程序中用到了AD中断,定时器中断,串口中断,在进入HardFault后这些中断还在正常运行,可以排除是这些中断导致进入HardFault;
一周尝试下来,确定的现象就是将代码改动一下问题就会消失或者重新出现,但是编译大小都是55KB左右,均在64KB以内,不会超出,不知你们有没有遇到相似的情况呢? 或者能否提供点其他方向上的尝试?非常感谢
备注:芯片是f030,用标准库开发
之前写过一个关于hardfault诊断的帖子,可以按步做下实验
https://www.stmcu.org.cn/module/forum/thread-621377-1-1.html STM32出现硬件错误可能有以下原因:
(1)数组越界操作;
(2)内存溢出,访问越界;
(3)堆栈溢出,程序跑飞;
(4)中断处理错误;
[*]void HardFault_Handler(void)
[*]
{
[*]
/* Go to infinite loop when Hard Fault exception occurs */
[*]
volatile int a = 1;
[*]
a++;
[*]
//while (1);
[*] }
[*]然后在a++处打断点,这样一旦发生hardFault就会进入该断点,然后我们可以使用单步调试,下一步就会跳出该函数,返回调用HardFault的地方。这样就定位到了错误处
页:
[1]