www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik PetitFatFs von ElmChan verständnis Frage


Autor: Claudio H. (hedie)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen...

Ich habe eine Frage zum PetitFatFs

Bei dieser Version wird zum Lesen folgende Funktion vorausgesetzt
http://elm-chan.org/fsw/ff/pf/dreadp.html

Nun habe ich eine Frage zum Lese Offset.
Muss ich einfach die vorherigen Bytes wegwerfen und den Buffer erst beim 
erreichen der Offset zahl beginnen zu füllen?

Danke schonmal

Autor: Huch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Muss ich einfach die vorherigen Bytes wegwerfen und den Buffer erst beim
>erreichen der Offset zahl beginnen zu füllen?

Du schreibst ja leider nicht, was Dich zu dieser Frage veranlasst. Aus 
meiner Sicht ist die Beschreibung eindeutig und klar, aber das muss Dir 
ja nicht genauso gehen.

Es scheint, das Du animmst, das dieser Parameter

  WORD Offset,         /* Byte offset in the sector to start to read */

keinen Effekt hat. An sich würde man aber aufgrund der Beschreibung 
erwarten, das die zurückgegebenen Daten diejenigen, des angebenen 
Sektors ab dem gegebenen Ofsset sind.

Das würde Sinn machen: Wenn man selbst die Bytes bis zum Offset abzählen 
müsste, wozu wäre dann der Parameter da?

Falls ich Deine Frage nicht befriedigend beantwortet habe, dann solltest 
Du doch mal schreiben, was Dich dazu veranlasst und wie Du die 
Beschreibung verstehst (falls das nicht in eins fällt).

Autor: Claudio H. (hedie)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielen Dank für deine Antwort...

Genau so hab ich es grunsätzlich verstanden...

Ich suchte nur noch die Bestätigung....

Ich habe es nun also so gelöst:
DRESULT disk_readp (
  BYTE* dest,      /* Pointer to the destination object */
  DWORD sector,    /* Sector number (LBA) */
  WORD sofs,      /* Offset in the sector */
  WORD count      /* Byte count (bit15:destination) */
)
{
  unsigned char TempBuff[512];
  unsigned int  uiCounter = 0;
  DRESULT res;
  mmcReadSector(sector,TempBuff);

  while(uiCounter != sofs+count)
  {
    if(uiCounter > sofs)//Ist man höher als der Offset? Dann beginne zu schreiben
    {
      dest[uiCounter-sofs-1] = TempBuff[uiCounter]; //-1 da sonst bei 1 begonnen wird anstat bei [0]
    }
    uiCounter++;
  }


  return res;
}

kann das funktionieren?

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>kann das funktionieren?

Mit 128 Bytes RAM geht das so nicht.

Autor: Claudio H. (hedie)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
holger schrieb:
> Mit 128 Bytes RAM geht das so nicht.

Wie kommst du auf 128byte Ram?


Ich hab jetzt noch einen weiteren Fehler...

Möchte ich übersetzen, so bekomme ich diesen Fehler:


conflicting types for 'disk_writep'  diskio.c

Ich habe in dieser Funktion nix geändert... Was bedeutet dieser Fehler?
Habe die Deklaration im HeaderFile und die Funktion verglichen... Sie 
sind Identisch

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>> Mit 128 Bytes RAM geht das so nicht.

>Wie kommst du auf 128byte Ram?

Das ist doch von dir, oder?

>Das problem ist, ich versuche gerade eine SD Karte mit dem Launchpad
>anzusprechen.

Auf das Launchpad passen die Value Line Controller.
Und die haben nur 128 Bytes RAM.

Autor: Claudio H. (hedie)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
holger schrieb:
>>> Mit 128 Bytes RAM geht das so nicht.
>
>>Wie kommst du auf 128byte Ram?
>
> Das ist doch von dir, oder?
>
>>Das problem ist, ich versuche gerade eine SD Karte mit dem Launchpad
>>anzusprechen.
>
> Auf das Launchpad passen die Value Line Controller.
> Und die haben nur 128 Bytes RAM

Achsoo hehe...

Da hast du aber was kombiniert hehe...


Als ich gemerkt habe, das es mit dem Launchpad nicht klappt, hab ich den 
STM32 zur hand genommen... :) Der hat genügend...

Problem mit dem Type Conflict hab ich gelöst... Im header file steht

static Byte*
und in der Funktion
Byte*

also einfach das Static entfernt :)

Was muss man eigentlich genau der Funktion pf_mount() übergeben?
Ein Pointer auf ein Array?

Autor: Claudio H. (hedie)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen...

Ich hab es nun mit diese Lib gemacht

http://www.mikrocontroller.net/articles/AVR_FAT32#Sourcen

Diese ist extrem einfach in der handhabung...

Mann muss lediglich read_byte und write_byte ersetzen und alles läuft!

Einfach TOP 1AAAAAAA


Für alle die auch probleme damit haben, anbei ein Zip mit einem Atollic 
True Studio workspace für den STM32F105RB

Es kommt auch noch in die Codesammlung

Viel Spass!

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.