LinkerScript absolute RAM Adressen

Gast #1595163
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
Moderator Persönliche Seite #1596049
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.
Gast #1598382
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...
#1598390
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
Gast #1601486
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..

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren