Forum: Compiler & IDEs Konstantes char array im Flash ablegen


von Roman (Gast)


Lesenswert?

Hallo Zusammen,

erstaml sorry, ich habe diesen teil schon mal in nem anderen Forum 
gepostet, denke aber hier passt er besser her!

ich benutze den GNU GCC Compiler und möchte folgendes realisieren:

#include <avr/pgmspace.h> //WinAVR
#include <progmem.h> //AVR-GCC

const unsigned char code carbmp[]= { //Keil
const rom unsigned char carbmp[]= { //Microchip C18
const unsigned char carbmp[]= { //SDCC
prog_uchar carbmp[]= { //AVR-GCC, WinAVR


Hab diese Möglichkeiten für andere Compiler gefunden, wie mach ich das 
mit GNU GCC?
Möchte ein Konstantes Char Array im Flash meines Philips LPC2119 
ablegen!

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

pgmspace.h und die darin betriebenen Dinge sind auf einem ARM wie dem 
LPC2119 vollkommen unnötig, da das eine von-Neumann-Maschine ist (im 
Gegensatz zur Harvard-Architektur des AVR).

Es gibt also nur einen Adressraum, in dem sowohl RAM als auch ROM liegen 
- aber eben an unterschiedlichen Adressen.

Daher sollte es genügen, wenn Du das Schlüsselwort "const" verwendest - 
probiere es aus und sieh Dir das Mapfile an bzw. bestimme zur Laufzeit 
die Speicheradresse Deines Arrays.

von Roman (Gast)


Lesenswert?

Sorry, bin noch nicht allzu erfahren.
Const hab ich schon ausprobiert - hat nicht funktioniert.
möcht erst mal sicher gehen, ob das Array wirklich im Flash abgelegt 
wird.
wo kann ich mir das Mapfile ansehen?
Oder wie find ich das sonst raus?

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Ich zitier' mich mal:

> bestimme zur Laufzeit die Speicheradresse Deines Arrays

Im Datenblatt/Programmiermanual des LPC2119 ist die Speicherbelegung 
angegeben, welche Adressen liegen im RAM, welche im ROM, welche werden 
für Peripherie verwendet und welche liegen brach.

von Roman (Gast)


Lesenswert?

Das weiß ich auch, nur wo kann ich mir ansehen in welchem 
Speicherbereich mein Array liegt?

Danke für deine Geduld!

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

printf("%08X", (unsigned int *) carbmp);

Oder im Debugger nachsehen.

von Roman (Gast)


Lesenswert?

Vielen Dank!

von Martin Thomas (Gast)


Lesenswert?

Wenns sich erledigt hat, kann man wenigstens die anderen Threads im 
anderen Forum abschließen ("hat sich erledigt"). Dann hätte ich mir die 
Arbeit mit der Prosa im anderen Thread mit gleichlautender Frage sparen 
können. Sorgt für Verdruss - da hilft auch kein vorauseilendes "Danke 
für die Geduld", wenn man gleichzeigt zeigt, dass man selbst keine hat, 
um erstmal auf eine Antwort zu warten.

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
Noch kein Account? Hier anmelden.