www.mikrocontroller.net

Forum: Compiler & IDEs LinkerScript absolute RAM Adressen


Autor: Alexander (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: klaus (Gast)
Datum:

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

Autor: Martin Thomas (mthomas) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Alexander (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Erwin Reuss (er-tronik)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Alexander (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.