MMC + FAT16 Assembler Atmega8

Gast #3322665
Lesenswert?
• ▲
▼
Hallo!

Ich bin gerade dabei meinem Atmega8 FAT16 beizubringen. Ich möchte 
wissen warum RootDirSectors so errechnet wird:

RootDirSectors = ((BPB_RootEntCnt * 32) + (BPB_BytsPerSec – 1)) / 
BPB_BytsPerSec;

Note also that this computation rounds up.

Ich habe schon Google befragt, aber keine zufriedenstellende Antwort 
gefunden. Angeblich hat das Aufrunden mit der Konvertierung zwischen CHS 
und LBA zu tun, nur eine Erklärung habe ich nicht gefunden. Jedoch 
spreche ich eine mmc Karte immer per LBA an.

Jedenfalls bin ich bei der oben genannten Rechnung immer 1 Block über 
dem richtigen Ergebnis (habe ein hex dump der Karte im Hexeditor 
analysiert).

z.B RootEntCnt=512; BPB_BytsPerSec=512

(512*32+511)/512=32,998 -> RootDirSectors=33
Jedoch ist RootDirSectors auf der Karte nur 32 Blocks groß. Möglich wäre 
auch das RootDirSectors=33 ein "sizeof" wert ist und ich bei der 
Adressierung -1 rechnen muss. Jedoch stimmt das leider auch nicht.

Irgendwelche Ideen?

Schöne Grüße
Gast #3322675
Lesenswert?
• ▲
▼
Stefan schrieb:

> RootDirSectors = ((BPB_RootEntCnt * 32) + (BPB_BytsPerSec – 1)) /
> BPB_BytsPerSec;
>
> Note also that this computation rounds up.
>
> Angeblich hat das Aufrunden mit der Konvertierung zwischen CHS
> und LBA zu tun

Nein, hat es nicht. Das hat einfach damit zu tun, daß Platz auf 
Blockmedien eben nur sektorweise belegbar ist und daß auch die letzten 
Einträge des Rootverzeichnisses irgendwo liegen müssen, die keinen 
vollständigen Sektor mehr belegen.

> Jedenfalls bin ich bei der oben genannten Rechnung immer 1 Block über
> dem richtigen Ergebnis (habe ein hex dump der Karte im Hexeditor
> analysiert).
>
> z.B RootEntCnt=512; BPB_BytsPerSec=512
>
> (512*32+511)/512=32,998 -> RootDirSectors=33

Mann, die Division ist eine GANZZAHLDIVISION und ergibt 32!

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.