|

楼主 |
发表于 2021-11-18 14:43:24
|
显示全部楼层
我现在的问题定位到的是:
1、FLASH格式化后,FATFS会将根目录扇区全部清0,而f_open会从根目录扇区读取文件的起始簇,当起始簇不为0时,才回写文件信息,但是格式化之后明明根目录扇区的数据全是0,那创建文件后的文件信息是肯定不会被回写到根目录扇区的,这好奇怪啊,硬汉哥可以解答一下吗?
2、/* 4.把根目录所在的扇区全部清0 */
nsect = (fmt == FS_FAT32) ? pau : sz_dir; /* Number of root directory sectors */
do {
n = (nsect > sz_buf) ? sz_buf : nsect;
if (disk_write(pdrv, buf, sect, (UINT)n) != RES_OK) return FR_DISK_ERR;
sect += n; nsect -= n;
} while (nsect);
3、/* Set directory entry initial state */
cl = ld_clust(fs, dj.dir); /* Get current cluster chain */
st_dword(dj.dir + DIR_CrtTime, GET_FATTIME()); /* Set created time */
dj.dir[DIR_Attr] = AM_ARC; /* Reset attribute */
st_clust(fs, dj.dir, 0); /* Reset file allocation info */
st_dword(dj.dir + DIR_FileSize, 0);
fs->wflag = 1;
if (cl != 0) { /* Remove the cluster chain if exist */
dw = fs->winsect;
res = remove_chain(&dj.obj, cl, 0;
if (res == FR_OK) {
res = move_window(fs, dw);
fs->last_clst = cl - 1; /* Reuse the cluster hole */
} |
|