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


von C. H. (hedie)


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

von Huch (Gast)


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).

von C. H. (hedie)


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:
1
DRESULT disk_readp (
2
  BYTE* dest,      /* Pointer to the destination object */
3
  DWORD sector,    /* Sector number (LBA) */
4
  WORD sofs,      /* Offset in the sector */
5
  WORD count      /* Byte count (bit15:destination) */
6
)
7
{
8
  unsigned char TempBuff[512];
9
  unsigned int  uiCounter = 0;
10
  DRESULT res;
11
  mmcReadSector(sector,TempBuff);
12
13
  while(uiCounter != sofs+count)
14
  {
15
    if(uiCounter > sofs)//Ist man höher als der Offset? Dann beginne zu schreiben
16
    {
17
      dest[uiCounter-sofs-1] = TempBuff[uiCounter]; //-1 da sonst bei 1 begonnen wird anstat bei [0]
18
    }
19
    uiCounter++;
20
  }
21
22
23
  return res;
24
}

kann das funktionieren?

von holger (Gast)


Lesenswert?

>kann das funktionieren?

Mit 128 Bytes RAM geht das so nicht.

von C. H. (hedie)


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

von holger (Gast)


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.

von C. H. (hedie)


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?

von C. H. (hedie)


Angehängte Dateien:

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!

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
Noch kein Account? Hier anmelden.