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

Petitfs odczyt pliku powyżej 512 bajtów

skalsky5000 29 Sty 2012 15:13 1487 4
REKLAMA
  • #1 10464759
    skalsky5000
    Poziom 21  
    Witam.Mam pytanie do osób które używały petits.Mniej więcej rozumiem o co biega ale mam pytanie dotyczące funkcji pf_read();
    FRESULT pf_read (
    	void* buff,		/* Pointer to the read buffer (NULL:Forward data to the stream)*/
    	WORD btr,		/* Number of bytes to read */
    	WORD* br		/* Pointer to number of bytes read */
    )

    Na razie odczytuje dane nie większe niż bufor (512B) wiec nie ma problemu.Ale co gdy chciałbym odczytać i wyświetlić zawartość pliku np 4kB ?.Mam książkę p.Mirosława Kardasia ale tam biblioteka jest dosyć skąpo opisana.Funkcja pf_read przesuwa wskaźnik z każdym przeczytanym bajtem czyli po przekroczeniu 512B muszę po prostu znowu wywołać pf_read i tak aż do końca pliku ?
  • REKLAMA
  • #2 10465035
    mirekk36
    Poziom 42  
    Ideą książki było przestawienie w taki sposób biblioteki aby można ją było odpalić na innych prockach niż ATtiny z interfejsem USI bo tylko tak jest w przykładach na AVR i z tym wielu ludzi miało dotychczas problemy. Sama biblioteka jest już bardzo dobrze udokumentowana na stronie autora i nie widziałem sensu powielania tego tym bardziej, że to tylko kilka poleceń. A przypadku odczytu to na prawdę nie rozumiem o co chodzi koledze ?

    Przecież nie ma żadnych ograniczeń co do czytania sektorami itp ....

    Ustawiasz wskaźnik np na pozycję 1432 i odczytujesz tyle bajtów ile masz wolnego bufora. Może to być 128, 256 czy 512 co za różnica. Jak odczytasz to potem już nie trzeba ustawiać wskaźnika tylko kolejny raz odczytać do bufora - w czym problem ? nie rozumiem tego kompletnie - w czym tu problem można widzieć i myśleć o przekroczeniu 512B.

    Jeśli chcemy czytać plik od początku to nawet nie trzeba z pf_lseek() korzystać tylko od początku czytać np po 512 albo ile się chce bajtów. Jednocześnie trzeba sprawdzać po każdym odczycie czy zostało fizycznie tyle odczytanych ile zadeklarowaliśmy w funkcji pf_read(). A jeśli mniej to znaczy, że już koniec pliku. To WSIO! ;)
  • REKLAMA
  • #3 10465081
    skalsky5000
    Poziom 21  
    Dziękuje za odpowiedz.Książka bardzo przypadła mi do gustu tylko rozdział z obsługa kart SD jest trochę słabo opisany dla początkującego.Ale teraz już chyba rozumiem.Czyli mając do odczytania 4kB czytam tak:
    pf_read(bufor,4096,&br) 

    i sprawdzam aż wartość br będzie równa 4096,jeśli nie to czytam dalej tak ?
  • REKLAMA
  • #4 10465166
    mirekk36
    Poziom 42  
    Jak mówiłem chodziło o to żeby w ogóle uruchomić Petit czy Fat FS - bo jak widziałeś trochę jest z przejściem z przykładów z USI na SPI.

    Z jakiego ty procka chcesz skorzystać, że chcesz też zdeklarować bufor o pojemności 4kB !!??!! Od razu ATmega128 albo większy ?

    Co do czytania z karty to polecam mniejszymi kawałkami najlepiej takimi jak wielkość sektora i niedużego bufora w RAM żeby było optymalnie i szybko, czyli:

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    i to dać w pętli w której będziesz sprawdzał kiedy br będzie mniejsze niż 512. Wtedy KONIEC pliku.
  • #5 10498846
    skalsky5000
    Poziom 21  
    Dziękuje za pomoc,układ ruszył i wszystko działa.Ten bufor 4kB to tylko dla przykładu był.Dziękuje jeszcze raz.Pozdrawiam i zamykam.
REKLAMA