4

リソースに制約のあるマイクロコントローラーでFAT16ファイルシステム構造を使用する低レベルのアプリケーションに取り組んでいるため、独自のカスタムアクセスコードを作成する必要があります。私はすでにPetitFATやFatFSのようなライブラリの使用を検討しましたが、残念ながら、これらのどちらも私のニーズに合うとは思いません。ただし、これらはFATがどのように機能するかについての有用なリファレンスとして役立ちました。

私がまだ問題を抱えている領域の1つは、サブディレクトリエントリです。

これによると、ディレクトリエントリは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最初のクラスターはデータクラスターを指します。

2番目のルートディレクトリエントリは、2番目のクラスタで開始され、その後、の情報を含むFATが終了しroot dir 2ます。その最初のクラスターはのクラスターを指し、sub dir 3最初のクラスターは空のクラスターを指します(FATでマークされているように)。

ここで何が欠けていますか?ルートディレクトリエントリからに移動する方法がわかりませんsub dir 2

4

1 に答える 1

3

まず、混乱を解消するために、1つのディレクトリエントリが単一のクラスタを占有していません。ソースからわかるように、単一のディレクトリエントリはわずか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

  1. FATの直後のクラスターに含まれているルートディレクトリエントリテーブルを見つけます。
  2. dir 1ルートディレクトリエントリテーブルからエントリを探し、その開始クラスタを取得します。
  3. 上記で取得したクラスターからのディレクトリエントリテーブルをロードしdir 1ます。
  4. エントリを探して、sub dir 2その開始クラスタを取得します。
  5. 上記で取得したクラスターをロードします。

これで、のディレクトリエントリテーブルが作成されsub dir 2ます。

于 2012-09-21T07:35:48.507 に答える