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?
> 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.
würd mich jetzt sehr interessieren für was für eine andwendung dies von vorteil ist...
Ich nehme an, die verwendete Entwicklungsumgebung ist streng geheim.
@ 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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.