STM32(H7)学习记录-7 FatFs & Hard fault

最近在跑程序时,发现访问文件字节多了就会出现硬件错误(0xffff fff1),在debug模式下,想要查找问题,但是一直无果。

查找了很多一直没解决,开始我认为是我程序别的问题,比如数组溢出什么的,但是查找了几天,把大部分中断都关了,堆栈设置到0x10000 也无济于事。并且 每次出现问题的时候 都是访问到文件的8100多一些字节卡死。

今天看见了如下这篇才得到解决

STM32 使用fatfs文件系统硬件错误问题报错(HardFault_Handler)解决_fatfs sd卡 hardfault-优快云博客

我的FIL结构体是全局变量,但是FatFs并不是全局变量,是一个局部变量。

考虑了一下,8100多字节 其实是 8192字节 = 2^4 * 512字节。其中512字节是扇区大小。8192字节应该是 一个块大小。

 块是操作系统中最小的逻辑存储单位。操作系统与磁盘打交道的最小单位是磁盘块。

(上句话出处 :操作系统 | “扇区”、“簇”、“块”、“页”等概念_文件系统的簇和扇区-优快云博客

因此,当访问完一个块,需要通过FatFs结构体的得知下一个 地址,而,此时FatFs结构体若是局部变量就会使 芯片进入 硬件错误。以上,为个人理解。

另外,我的代码中还使用了strstr查找串口发送过来的消息中的内容,需要注意最好在消息的末尾加上'\0',避免出现数组溢出。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值