Hallo Leute, ich will daten im Flash meines LPC2148 ablegen. Die entsprechenden Funktionen für den IAP zugriff zum Vorbereiten und schreiben habe ich auch scshon implementier. Diese Funktionieren auch. Was mir allerdings noch nicht gelingt, ist diese Daten wieder zu lesen. Wie geht das ? Gibt es da einen Trick, oder denke ich zu kompliziert ? Viele Grüße
Du kennst die Adresse des Flash-Bereichs, in dem Du die Daten unterbringst? Dann ist's einfach:
1 | int* p = (int *) 0xdeadface; // das sei die Adresse |
2 | |
3 | printf("Wert %d\n", *p); |
Oder habe ich Dich komplett missverstanden?
Nee denke du hast mich richtig verstanden. Dann war meine Idee eigentlich auch in die richtige richtung, nur die umsetzung schein noch nicht ganz zu stimmen. Habe es wie folgt probiert. --> #define IAP_LOCATION 0x7FFFFFF1 #pragma location=IAP_LOCATION __no_init Int8U flashDisk[512]; wenn ich deann flashDisk[0] oder so lese müsste es doch auch gehen. Oder. Werde mal deine Variante probieren.
Wenn Dein Compiler selbst per #pragma dazu gebracht werden kann, Variablen an bestimmten Adressen abzulegen, dann reicht natürlich ein Zugriff über den Variablennamen. Bist Du Dir sicher, daß Du Dein Array an einer nicht ausgerichteten Adresse beginnen lassen möchtest?
Du hast recht. #define IAP_LOCATION 0x80000000. Funktionieren tut es trotzdem nicht :-( Hier mal noch ein stück mehr code....
1 | Int32U value; |
2 | Int32U* p = (Int32U*)0x80000000; |
3 | |
4 | Int8U vektor[512]; |
5 | memset (vektor, 'X', 512); |
6 | |
7 | |
8 | iap_entry=(IAP) IAP_LOCATION; |
9 | // prepare for write operation
|
10 | command[0] = 50; |
11 | command[1] = 0; |
12 | command[2] = 1; |
13 | iap_entry(command, result); |
14 | |
15 | // copy ram to flash
|
16 | command[0] = 51; |
17 | command[1] = 0x80000000; |
18 | command[2] = (Int32U)vektor; |
19 | command[3] = sizeof(vektor); |
20 | command[4] = 60000; |
21 | iap_entry(command, result); |
22 | |
23 | value= *p |
noch eine idee warum das nicht geht ?
also IAP_LOCATION ist jetzt wieder 0x7ffffff1 weil das der LPC so braucht. DAten werden dann ab 0x80000000 gechrieben.
Nun ja.... asche auf mein Haupt. Im Bereich 0x80000000 kann ich natürlich nix lesen und schreiben, wenn der flash in den Bereich ab 0x1000 gemapt ist ! --> Jetzt funktioniert es. Danke für die Unterstützung !
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.