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
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...).
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?
Danke für die Hilfe mit const unsigned char raw_data[STORAGE_SIZE] _attribute_ ((section (".rodata"))); habe ich das erreicht, was ich wollte.
Und der Startupcode kopiert das nicht um (ROM => RAM), oder stört dich das nicht?
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
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.