经验教训 | STM32 异常之BFARVALID,PRECISERR,INVSTATE

最近有一个项目基于STM32F446ZE MCU使用FREERTOS操作系统开发,之前有部分功能代码是基于MCU裸机开发的,移植过程种发现程序老出错,DEBUG模式条件发现程序停在了HardFault_Handler中断服务程序中:

查看对应的错误报告显示BFARVALID和PRECISERR错:

查看了两个错误的对应说明(感觉还是不知道是什么原因):

通过将任务逐个屏蔽,然后代码块逐个屏蔽方式最终定位到了一下函数,函数中对一个结构体对像进行了赋值操作后就会触发该错误,这些代码都是之前要无FREERTOS时运行好好的,现在就会出现这个错:

思考好久,可以是任务堆栈太小导致,于试偿试将任务堆栈从128增加到512,

编译下载运行OK,果然不再出错了。

 

长了教训!记录一下问题分析过程,也为后续类似的问题提供思路。

 

顺便记录了一下在调试过程中遇到的另一个硬件错INVSTATE,对应的解释如下,

我是因为数组越界超作也产生该错误,如下图,当message->len > 8 时,如果没有下面红框中的长度限制,就有可能在memcpy函数中引起数组越界产生INVSTATE硬件错!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值