gpt4 book ai didi

microcontroller - FAT16 目录

转载 作者:行者123 更新时间:2023-12-01 02:32:10 26 4
gpt4 key购买 nike

我正在开发一个低级应用程序,它在资源受限的微 Controller 上使用 FAT16 文件系统结构,这需要我编写自己的自定义访问代码。我已经研究过使用像 Petit FAT 和 FatFS 这样的库,但不幸的是,我认为这些库都不能满足我的需求。不过,它们已成为 FAT 工作原理的有用引用。

我仍然遇到问题的一个方面是子目录条目。

根据 this ,一个目录条目能够指向 1 个起始簇。对于数据文件,这只是第一个数据簇。对于目录,这是子目录(大概是另一个目录条目)的起始簇。

如果从根目录到基本文件只有 1 个目录路径,这很好用,但我不明白这如何允许您分支到任何给定目录下的多个文件/目录。

前任。目录结构:

- root dir 1
- sub dir 1
- file 1
- sub dir 2
- file 2
- root dir 2
- sub dir 3

根据我对FAT16结构的理解,

紧跟在 FAT 之后的是第一个根目录条目的簇,包含 root dir 1 的信息。 .然后第一个簇字段将包含 sub dir 1 的簇地址。 , 谁的第一个簇字段将包含 file 1 的簇地址, 谁的第一个簇指向一个数据簇。

第二个根目录条目将在包含 root dir 2 的信息的 FAT 结束之后的第二个簇开始。 .它的第一个集群将指向 sub dir 3 的集群。 ,谁的第一个簇将指向一个空簇(如 FAT 中所标记)。

我在这里缺少什么?我想不出从根目录条目导航到 sub dir 2 的方法.

最佳答案

首先,为了消除混淆,一个目录条目不占用单个集群。正如您从源代码中看到的,单个目录条目只有 32 个字节,其中簇的大小可能介于 4KB 到 64KB 之间,具体取决于您使用的磁盘大小/FAT 版本。所以,FAT 后面的实际上是 的目录条目。

对于子目录,您可以在父目录条目中找到其目录条目表的起始簇。它们不一定要打包到磁盘的开头。

为了进一步解释,让我们看一下原始示例的略微修改版本:

\ (root)
- dir 1
- sub dir 1
- file 1
- sub dir 2
- file 2
- dir 2
- sub dir 3

遍历到 sub dir 2 :
  • 找到根目录项表,它包含在 FAT 之后的簇中;
  • 查找条目 dir 1从根目录项表中,得到它的起始簇;
  • 加载 dir 1 的目录条目表从上面获得的集群;
  • 查找条目 sub dir 2并获得它的起始集群;
  • 加载上面得到的集群;

  • 那么您现在应该拥有 sub dir 2 的目录条目表。 .

    关于microcontroller - FAT16 目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12525600/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com