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
>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).
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?
>kann das funktionieren?
Mit 128 Bytes RAM geht das so nicht.
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
>> 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.
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?
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.