初中生
最后登录1970-1-1
在线时间 小时
注册时间2018-4-21
|
楼主 |
发表于 2018-5-28 21:56:39
|
显示全部楼层
问题解决了。
结果还是diskio.c的问题。
disk_write()函数里调用了SD_WriteMultiBlocks()函数,其中有一个参数是WriteAddr,这个地址是字节寻址的,是64位整数。如下:
SD_state=SD_WriteMultiBlocks((uint8_t *)buff,sector*SD_BLOCKSIZE,SD_BLOCKSIZE,count);
可以看到调用时的实参表达式是sector*SD_BLOCKSIZE,这个sector是扇区寻址的,是一个32位整数,所以这个表达式的计算结果仍然是32位的,导致地址的高位被抹掉,所以错误地寻址到前面的扇区,破坏了文件系统。
解决方法也很简单,定义一个64位的临时变量,把sector的值赋进去再做乘法就好了。 |
|