如果 PC 只是修改文件内容而不改变文件系统结构(如创建/删除文件),清除缓存就足够了。如果涉及文件创建/删除/重命名,重新挂载是最安全的选择,否则自己要深度修改FatFS。
1. 常用重新挂载最可靠,但是最慢
[C] 纯文本查看 复制代码
// usb msc 读写函数置脏文件系统脏标志
int usb_msc_sector_write(uint8_t busid, uint8_t lun, uint32_t sector, uint8_t *buffer, uint32_t length) {
...
file_system_dirty_time++;
...
}
// 文件系统一个线程监控usb mcs读写脏标志了以后重新挂载
{
...
if (file_system_dirty_time < 1)
{
return;
}
f_mount(NULL, "", 0); // 卸载文件系统
f_mount(&fatfs, "", 1); // 重新挂载文件系统
...
}
2. 如果只是修改文件内容,清除 FatFS 内部缓存即可(轻量级方案)
[C] 纯文本查看 复制代码
// 直接清除 FATFS 结构体的缓存状态
void fatfs_invalidate_cache(FATFS *fs) {
if (fs == NULL) return;
// 清除窗口缓存标志,强制下次访问重新读取
fs->wflag = 0; // 清除脏标志
fs->winsect = 0xFFFFFFFF; // 使窗口扇区无效,强制重新加载
#if FF_FS_EXFAT
fs->dirbuf = NULL; // 如果使用 exFAT
#endif
}
void fatfs_sync_from_usb(void) {
// 1. 关闭所有已打开的文件
// 2. 清除缓存
fatfs_invalidate_cache(&fatfs);
}
3.如果只是修改文件内容,也可以不用FatFs缓存依赖就可以解决PC同步问题,具体为按以下配置
[C] 纯文本查看 复制代码
#define FF_FS_TINY 1 // 使用精简模式,减少缓存
#define FF_FS_LOCK 0 // 禁用文件锁定
|