LPC2148 + FLASH ROM Speicher

Gast #779617
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
Persönliche Seite #779724
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/DeveloperTools/gcc-3.3/gcc/Variable-Attributes.html

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...).
Gast #779844
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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren