一、硬件环境:
STM32L476
二、软件环境:
freeRTOS系统下跑了4个任务;
三、hardfault原因分析,典型原因是访问非法空间,具体情况如下:
1、使用未被初始化的指针;
2、数组越界访问;
3、使用指向变量的指针,比如在mian函数中定义了一个结构体或者一个数组缓存,在其他函数中通过传递过来的指针(指向结构体或者数组缓存)来访问该结构体或者数组缓存;(原因是:结构体或者数组缓存可能被优化掉,导致指针成为野指针) 如果需要通过指针来访问,可将结构体或者数组缓存用static修饰;
4、如果存在freeROTS等操作系统,则可能是分配给任务的堆栈过小。
四、调试方法:
1、将STM32启动文件startup_stm32l476xx.s中的
HardFault_Handler\
PROC
EXPORT HardFault_Handler [WEAK]
B .
ENDP
修改为: