www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik IAP mit LPC2xxx


Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du kennst die Adresse des Flash-Bereichs, in dem Du die Daten 
unterbringst?

Dann ist's einfach:
int* p = (int *) 0xdeadface;  // das sei die Adresse

printf("Wert %d\n", *p);

Oder habe ich Dich komplett missverstanden?

Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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?

Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du hast recht.

#define IAP_LOCATION 0x80000000.

Funktionieren tut es trotzdem nicht :-(

Hier mal noch ein stück mehr code....

Int32U value;
    Int32U* p = (Int32U*)0x80000000;
    
    Int8U vektor[512];
    memset (vektor, 'X', 512);
    
    
     iap_entry=(IAP) IAP_LOCATION;
    // prepare for write operation
    command[0] = 50;
    command[1] = 0;
    command[2] = 1;
    iap_entry(command, result);
    
    // copy  ram to flash
    command[0] = 51;
    command[1] = 0x80000000;
    command[2] = (Int32U)vektor;
    command[3] = sizeof(vektor);
    command[4] = 60000;
    iap_entry(command, result);
    
    value= *p

noch eine idee warum das nicht geht ?

Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
also IAP_LOCATION ist jetzt wieder 0x7ffffff1 weil das der LPC so 
braucht.

DAten werden dann ab 0x80000000 gechrieben.

Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Zur Info:
ich bekomme eine Exception wenn ich versuche *p zu lesen.

Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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 !

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.