最近在跑程序时,发现访问文件字节多了就会出现硬件错误(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',避免出现数组溢出。