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
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!
Alles klar, danke das ergibt jetzt einen Sinn. Ich wusste ich hab irgendwo einen blöden Denkfehler.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.