logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

FAT32[AVR] -> brak pomysłu na rozwiązanie 2 problemów

maly_elektronik 08 Sie 2008 14:14 1502 4
REKLAMA
  • #1 5420424
    maly_elektronik
    Poziom 23  
    Witam

    W czasie implementacji struktury plików fat32 (na avr) napotkałem na pewien problem a dokładniej na "bezpomysłowość".
    Jak wiadomo RootDirectry ma wielkość 1 Klastra, w nim znajdują się "paczki" 32B określające nazwę pliku, rozmiar, atrybuty itd. Odczytać mogę jedynie cały sektor wielkości 512B (na tyle maxymalnie pozwala mi pamięć ram procesora). I jak by to obliczyć to w 1 sektorze znajduje się 16 "paczek" plików (512/32). I teraz pojawia się problem, bo niektóre nośniki danych (w moim przypadku karty sd\mmc) mogą mieć wielkość klastra od 1sektora do 32 sektorów. I w tym momencie pojawia się problem, jak napisać procedurkę odczytującą sektor i szukającą w paczkach np nazwy pliku :?: Gdyby ilość sektorów na klaster była stała to problem nie miałby miejsca ale jak zaimplementować coś takiego gdy liczba sektorów jest zmienna :?:
    PS wiem że z BootSectora odczytuje ile sektorów przypada na klaster ale nie w tym rzecz.
    Czy ktoś może pomóc mi w ww problemie :?: Oczywiście tylko w C
  • REKLAMA
  • #2 5421135
    Sam Sung
    Poziom 33  
    Mógłbyś przybliżyć, na czym konkretnie polega problem? Bo chyba nie rozumiem. Skoro możesz zrobić pętlę kręcącą się po kolejnych sektorach stałą liczbę razy, to dlaczego nie możesz zrobić pętli kręcącej się od 0 do N-1, gdzie N jest zmienną? Mam na myśli to, że pętlę przetwarzającą 16 wpisów z jednego sektora można opakować w kolejną pętlę przetwarzającą każdy z N sektorów klastra.
  • REKLAMA
  • #3 5421337
    maly_elektronik
    Poziom 23  
    Chyba chodzi mi o coś takiego :) Tylko nie bardzo Cię rozumie :(
    PS Ale jak ograniczyć tą pętle żeby nie zaczęła czytać sektorów (klastrów) FreeSpace(w której znajdują się już pliki) :?: Mógłbyś trochę przybliżyć to o czym mówisz w postaci jakiegoś schematu blokowego albo przykładu :?: :idea:
  • REKLAMA
  • #4 5423093
    Sam Sung
    Poziom 33  
    O ile dobrze pamiętam, to w FAT32 główny katalog jest alokowany tak samo jak każdy inny (może zajmować więcej niż 1 klaster), a w FAT12/16 był to specjalny obszar o stałym rozmiarze. Z boot-sektora można odczytać rozmiar klastra w sektorach i (chyba) nr pierwszego klastra głównego katalogu (no chyba że to jest z góry określone - nie pamiętam), a z tablicy FAT numery następnych klastrów, w których zapisany jest główny katalog.
    Mając numery klastrów, można zrobić pętlę po klastrach katalogu.
    Klaster to ciągły obszar N sektorów. Trzeba więc zrobić zagnieżdżoną pętlę odczytującą kolejnych N sektorów zaczynając pierwszego sektora danego klastra.
    W kolejnej zagnieżdżonej pętli (trzeciej) przetwarzamy kolejne 16 wpisów danego sektora.
  • #5 5426301
    maly_elektronik
    Poziom 23  
    :idea: Problem zażegnałem w inny sposób :idea:

    Temat zamykam
REKLAMA