新手入门
- 积分
- 25
- 金钱
- 25
- 注册时间
- 2015-7-29
- 在线时间
- 0 小时
|
5金钱
因项目需要移植FatFS,我先新建了工程,基于SPI的FLASH模块移植FatFS,FatFS版本选择的版本是0.09.建文件,读写都没问题,移植成功!然后我把它再整体移到我现在的项目代码中,我现在的代码是基于ucos-Ⅲ系统,编译通过后开始运行,可是只要一进入f_open立刻进入hardfault,在MDK软件中检查hardfault类型为IMPRECISERR,即不精确的数据访问违例。
我试着调整了启动文件中的stack_size和相应任务中的stack大小,结果仍然不管用,于是,我又下载了FatFS0.10版本的进行移植,还是不行。
于是开始跟踪代码,并在hardfault函数中打了断点,追踪寄存器LR中的返回值,发现每次都是运行到我底层的W25X_Write_Sector()函数中的一个循环赋值发生中断,而通过反汇编查看LR(R14)中的返回值却是位于操作系统函数OS_IntQPost()。
另外,在基于ucos的系统上我也试过直接操作基于SPI的FLASH模块,都是可以正常读写的。
。。。。
已经被这个不精确的数据访问违例折腾了2天,期待版主以及各路大神给予排查问题思路以指点迷津,不胜感激! |
|