www.mikrocontroller.net

Forum: Compiler & IDEs LPC2148 + FLASH ROM Speicher


Autor: RedFlash (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
schreibe gerade ein Programm für einen LPC2148.
Dazu möchte ich den (relativ) großen (~500KB) Flash Speicher nutzen.
Ich möchte ca. 300 KB an Nutzdaten  speichern, um diese per RS232 
übertragen.
da ich kein __at bzw. AT() mit den GNU GCC verwenden kann, habe ich mir 
das linkerskript angeschaut.
dort finde ich:
  /* .rodata section which is used for read-only data (constants) */

  .rodata :
  {
    *(.rodata)
    *(.rodata*)
  } > FLASH

aber auch mit den schlüsselwort "const" erhalte ich beim linken den 
Fehler:
"region RAM is full".
Die "Nutzdaten" werden mit
const unsigned char Buffer[307200]={0x00, ..... ,0x00};
angelegt.

laut Kommentar müsste const ausreichend sein oder ?
oder muss ich den genauen Speicherbereich angeben ?

Danke im Voraus für die Hilfe

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Sektion .rodata im ROM enthält die Daten für die Sektion .data im 
RAM, die bei Programmstart vom Startupcode umkopiert werden.

Du müsstest dir im Linkerskript eine selbst benannte Sektion im ROM 
anlegen und im Quelltext veranlassen, dass die Variable in dieser 
Sketion angelegt wird.

Wie das mit den Linkerskripten funktioniert, kannst du herausfinden in 
der Beschreibung der Linkerskripte und des Linkers ld

http://www.mikrocontroller.net/articles/ARM-DevCpp#Links

Wie das mit dem Ablegen von Variablen in Sektionen funktioniert, kannst 
du herausfinden bei der Beschreibung des attribute Schlüsselworts 
(wahllose Links von Google, nicht ARM-GCC-ELF spezifisch gesucht)

http://www.ohse.de/uwe/articles/gcc-attributes.html
http://developer.apple.com/documentation/Developer...

Noch mal aufpassen müsstest du bei den Lesezugriffen, wenn du ein Target 
mit Harvard-Architektur hättest, aber da ist seitens des LPC2148 alles 
im grünen Bereich (anders beim AVR siehe PROGMEM...).

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ADD:

> const unsigned char Buffer[307200]={0x00, ..... ,0x00};
                             ^^^^^^
Bist du sicher das DAS funktioniert?
Wie ist denn das typedef für size_t auf deinem System?

Autor: RedFlash (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für die Hilfe
mit

const unsigned char raw_data[STORAGE_SIZE] _attribute_ ((section 
(".rodata")));

habe ich das erreicht, was ich wollte.

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Und der Startupcode kopiert das nicht um (ROM => RAM), oder stört dich 
das nicht?

Autor: RedFlash (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
naja ... habe jetzt etwas besseres gefunden d.h. wie ich im 
Programmablauf Daten in den Flash ROM schreiben/lesen kann, habe es 
desshalb nicht weiter versucht. (allerdings hat mir 'make' kein Problem 
angezeigt. evtl. wäre ein Fehler beim starten des Mikrokontrollers 
aufgetreten.. werde ich jetze aber nicht weiter testen ;-) )

Danke Trotzdem

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.