Forum: Mikrocontroller und Digitale Elektronik Variable an bestimmter Stelle im Ram


von Mario X. (grinderfx)


Lesenswert?

Hi.

Ich hab nen Array vom Typ unsigned char und möchte, dass dieses an der 
Adresse 0x4000 0000 beginnt. Da ich viele Variablen habe, beginnt die 
gewünschte Variable etwas später.
Weiß jemand ne möglichkeit wie ich das realisieren kann?

von Rolf Magnus (Gast)


Lesenswert?

> möchte, dass dieses an der Adresse 0x4000 0000 beginnt.

Warum?

> Weiß jemand ne möglichkeit wie ich das realisieren kann?

Ja. Du schaust in die Dokmentation des verwendeten Linkers (welcher auch 
immer das sein mag). Möglicherweise kannst du es auch im Compiler 
(welcher auch immer das sein mag) direkt vorgeben. In der 
Programmiersprache (welche auch immer das sein mag) ist sowas in der 
Regel nicht vorgesehen.

von Daniel (Gast)


Lesenswert?

würd mich jetzt sehr interessieren für was für eine andwendung dies von 
vorteil ist...

von Andreas K. (a-k)


Lesenswert?

Ich nehme an, die verwendete Entwicklungsumgebung ist streng geheim.

von Stefan B. (stefan) Benutzerseite


Lesenswert?

@ Daniel

Das ist übliches Vorgehen, wenn man z.B. ein externes RAM hat, welches 
im angegebenen Adressbereich des µC eingeblendet ist und wenn man fette 
Variablen statt im internen RAM des µC im externen RAM unterbringen 
will.

Beim GCC erweitert man das Linkercontrolscript um eine (mehrere) 
zusätzliche Section(en) und das neue Memory Layout, die das externe RAM 
beschreibt (Startadresse, Länge).
http://www.gnu.org/software/binutils/manual/ld-2.9.1/html_node/ld_6.html#SEC6

Und im Quellcode weist man mit der Zusatzangabe _attribute_ ((section 
("MEINRAM"))) darauf hin, dass eine Variable in dieser Section zu liegen 
kommt.
http://gcc.gnu.org/onlinedocs/gcc-3.2.3/gcc/Variable-Attributes.html

Bei anderen Toolchains gibt es vielleicht (wahrscheinlich) ähnliche 
Mechanismen.

Wenn nicht, kann man in manchen Fällen auch Quick&Dirty geschickt einen 
typedef oder defines machen und die Wunschadresse als Zeiger auf eine 
Variable dieses Typs oder als Offsets zu der Basisadresse definieren. 
Ähnlich ist diese Art des Vorgehens zu IO-Definitionen/Vektortabellen 
etc. in den Headerdateien mancher µCs.

von Mario X. (grinderfx)


Lesenswert?

Ok mein beitrag war etwas mager g.

Ich nutze uVision3 und hab nen Arm LPC2378.

Ich brauche das, da ich ein programm im rom habe, welches übersetzten 
code für das ausführen aus dem Ram per usb nachladen kann.

Die nachladbaren programme sind für die adresse 0x4000 0000 ausgelegt.

Mein programm im rom hat mehrere variablen und meine variable wo der 
code reingeschrieben wird, befindet sich leider nicht am anfang des 
rams.

Ich weiß bei uVision eine methode, die ich leider nicht anwenden kann, 
da ich eine evaluationsversion nutze.
Es gibt sicher auch andere wege.

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.