Forum: Compiler & IDEs LinkerScript absolute RAM Adressen


von Alexander (Gast)


Lesenswert?

Hi,
ich arbeite an einem Linkerscript, welches mir eine Section im RAM (die 
ersten 128 Byte des RAMs) des Microcontrollers reserviert:

MEMORY
{
  ramfixed (rw) : ORIGIN = 0x20000000, LENGTH = 0x80
  ram (rwx) : ORIGIN = 0x20000080, LENGTH = 64K-0x80
  rom (rx)  : ORIGIN = 0x08000000, LENGTH = 512K
}


SECTIONS
{
  .ramfixed :
  {
    *(.ramfixed)
  } >ramfixed


Zugriff über:
u32 U32FixedRam __attribute__((section(".ramfixed")));


Resultat ist, dass zwar die Adressen richtig verteilt werden aber der 
Bereich von 0x20000000 - 0x20000080 als Flash ROM deklariert wird.
Gibt es Ideen zu dem Problem?
danke

von klaus (Gast)


Lesenswert?

Hast du die Variable vielleicht doch initialisiert, dann würde LMA und 
VMA eine Rolle spielen...

von Martin T. (mthomas) (Moderator) Benutzerseite


Lesenswert?

Falls der Hinweis von klaus (Gast) 12.02.2010 16:17 betr. 
Initialisierung nicht zutrifft:

Alexander schrieb:
>...
> Zugriff über:
> u32 U32FixedRam __attribute__((section(".ramfixed")));

s/Zugriff/Definition

> Resultat ist, dass zwar die Adressen richtig verteilt werden aber der
> Bereich von 0x20000000 - 0x20000080 als Flash ROM deklariert wird.

Was bedeutet "als Flash ROM deklariert"? Die Toolchain weiss nichts über 
"Flash ROM", sie kennt nur die im Linker-Script angegebenen 
Speicherbereiche mit Namen und Attributen (rw/rx/rwx...). Meckert die 
Debug-Software das an?  Wenn ja, nachgesehen, ob die Debug-Software eine 
Einstellung für die Memory-Map enthält. Je nach Software muss darin 
evtl. der "ramfixed"-Speicherbereich als read/write-Access oder RAM 
eingetragen werden. Wenn nein, ein Minimalbeispiel erstellen, mit dem 
man das momentane Verhalten nachvollziehen kann und mitteilen, was genau 
nicht wie gewünscht ist und wie es stattdessen sein soll.

von Alexander (Gast)


Lesenswert?

Martin Thomas schrieb:
> Was bedeutet "als Flash ROM deklariert"? Die Toolchain weiss nichts über
> "Flash ROM", sie kennt nur die im Linker-Script angegebenen
> Speicherbereiche mit Namen und Attributen (rw/rx/rwx...). Meckert die
> Debug-Software das an?  Wenn ja, nachgesehen, ob die Debug-Software eine
> Einstellung für die Memory-Map enthält. Je nach Software muss darin
> evtl. der "ramfixed"-Speicherbereich als read/write-Access oder RAM
> eingetragen werden. Wenn nein, ein Minimalbeispiel erstellen, mit dem
> man das momentane Verhalten nachvollziehen kann und mitteilen, was genau
> nicht wie gewünscht ist und wie es stattdessen sein soll.

ja, openocd meckert, dass er nicht auf Adresse 0x20000000 des ROMS 
schreiben kann.
Desweiteren wird eine .bin datei erstellt, die 400MB groß ist - also von 
0x0807FFFF bis 0x20000000...

von Erwin R. (er-tronik)


Lesenswert?

Alexander schrieb:
> ja, openocd meckert, dass er nicht auf Adresse 0x20000000 des ROMS
> schreiben kann.
> Desweiteren wird eine .bin datei erstellt, die 400MB groß ist - also von
> 0x0807FFFF bis 0x20000000...

Füge mal "NOLOAD" hinzu. Dadurch wird verhindert, daß der Bereich in die 
BIN- (oder auch HEX-) Datei geschrieben wird.

SECTIONS
{
  .ramfixed (NOLOAD) :
  {
    *(.ramfixed)
  } >ramfixed

Erwin

von Alexander (Gast)


Lesenswert?

Erwin Reuss schrieb:
> Füge mal "NOLOAD" hinzu. Dadurch wird verhindert, daß der Bereich in die
> BIN- (oder auch HEX-) Datei geschrieben wird.
>
> SECTIONS
> {
>   .ramfixed (NOLOAD) :
>   {
>     *(.ramfixed)
>   } >ramfixed
>
> Erwin

Super!!
das scheint zu funktionieren.
danke..

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.