论坛大神
  
- 积分
- 2201
- 金钱
- 2201
- 注册时间
- 2012-2-8
- 在线时间
- 35 小时
|
发表于 2013-1-4 22:52:38
|
显示全部楼层
回复【30楼】znmcu:
---------------------------------
我比较好奇, 麻烦解释一下: (无意钻牛角尖)
" fatfs使用成为"window"的缓冲机制,window其实是一个512字节的缓冲区, ... znfat中的cccb在作通样的事情 "
"cccb可以仅用8~20个字节的ram空间记录文件的整条簇链"
针对连续分布的文件, 这个很好理解理解. 但是你说的 cccb 主要是在只读文件的时候起作用, 在写文件的时候就是另一回事了吧? 在文件写的时候因为可能需要不停的给文件分配新的簇, 按照我的理解, cccb 似乎就无能为力了? 如果是这样 "znfat 中的 cccb 在作同样的事情" 这样的说法似乎不太妥当?
按照你刚才介绍的 window 缓冲, 下面是我的理解: window 缓冲虽然不能在读一个在的连续的文件的时候一次性知道整个文件的所有簇, 但是平均起来(每读文件的 512/4 个簇后需要重新读 FAT 表, 所以平均读扇区开销就是 (512/4*每簇扇区数+1)/(512/4*每簇扇区数) , 可以认为是 1 ) , 开销还是比较小的, 就好比高端的CPU有内部都有缓存来存放外部主内存的小部分数据来加快平均的性能一样. FATFS最主要的优势则体现在文件写的时候, 因为 flash 的写次数是很有限的. 在创建一个文件并写入的时候, 可能需要不停的给文件分配新的簇, 如果没有特别的措施, 对一个 FAT 表的同一个扇区的写入次数就可能多达 512/4 次, FATFS 的 window 缓冲就避免了这个问题.
其实不同的策略本来就各有利弊, 应用的场合也各有不同(例如 FATFS 的 window 缓冲需要 512 字节, 而读写文件本身至少也需要 512 字节缓冲, 在 RAM 大于 512 小于 1k 的时候就没办了). 所以算法才会如此的多样. 在介绍自己的算法的优点的同时, 也应该介绍它还有哪些本质上就存在的弊端:-)
关于 EXB, 我不太理解是什么意思, 麻烦解释一下我在 23 楼的评论是否为误解? 如果是误解, 那么在 51 上应用的时候是否只能支持同时打开一个文件? 是不是你利用 CCCB + EXB 从而达到了 FATFS window 缓冲的全部优点?
|
|