基于SMT32L476的hardfault分析处理

本文详细介绍了在STM32L476上遇到HardFault故障的常见原因,如非法空间访问,并提供了调试方法,包括修改启动文件和定义hard_fault_handler函数,通过打印寄存器信息定位问题。在分析结果中,发现是FreeRTOS空闲任务堆栈大小不足导致的问题,增大堆栈后解决了故障。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、硬件环境:

       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

修改为:

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值