Hallo,
ich versuche folgende Funktion zum Leben zu erwecken.
Basierend auf den Routinen für SD Karten von Elm Chan soll von einer SD
Karte ein File gelesen werden.
#include "bmp.h"
#include "ff.h"
struct BMPHeader tBMP;
void ReadBMP (void) {
FIL *BMPFile;
FATFS BMPfs;
volatile unsigned int *readByte;
unsigned char BMPBuffer[512];
volatile FRESULT fres;
unsigned int i;
for (i = 0; i < 512; i++) {
BMPBuffer[i] = 0;
}
if ((f_mount (0, &BMPfs)) == FR_OK) {
fres = f_open (BMPFile, "ML123456.bmp", 0);
if (fres == FR_OK) {
fres = f_read (BMPFile, BMPBuffer, 512, readByte);
} else {
fres = f_close (BMPFile);
}
}
f_close (BMPFile);
}
Das ganze läuft auf einem H8SX (R5F61668R mit 1024 kByte Flash und 56
kByte RAM) Prozessor von Renesas. Kompiliert wird mit dem Renesas
Compiler. Das Debugging erfolgt mit dem E10A Debugger von Renesas
Was ist das Problem?
Der Hardwarezugriff auf die Karte funktioniert. Auch die einzelnen
Funktion der FAT scheinen zu funktionieren. Sie wurden einzeln mit dem
Monitor getestet.
In obigem Programm wird nun der Zeiger auf BMPFile in den ROM Bereich
gelinkt.
Da diese Struktur ja mit Leben gefüllt werden soll, funktioniert das
nicht. Nun tritt aber folgender Effekt auf. Wenn die Funktionen f_read
und f_close auskommentiert werden, zeigt der Zeiger von BMPFile in den
RAM. Somit werden alle relevanten Daten von der Karte gelesen und in die
Filestruktur geladen.
Ich verstehe nicht, warum der Linker die Struktur im ROM anlegen will?
Am zur Verfügung stehenden Speicher kann es meiner Meinung nach nicht
liegen, der ist mit 56 kByte ausreichend groß und wird nur vom Stack
genutzt.
Vielleicht kann mir jemand helfen.
Danke
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.