Variable an bestimmter Stelle im Ram

Gast #626464
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.
Persönliche Seite #626502
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.
OP #626659
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.

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.