www.mikrocontroller.net

Forum: Compiler & IDEs Variablem im externen Speicher vom AVR


Autor: Steffen Graap (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

Ich möchte den externen Speicher der an einem Mega256 hängt für einige 
größere Variablen benutzen. Der Speicher der Variabelen sollen aber vom 
Compiler vergeben werden.
Hierzu habe ich schon herrausgefunden, das man eine neue Speichersection 
anlegen muss, und dann die Section der Variable als Attribute übergibt.
Siehe Beitrag "Variable an bestimmter Stelle im Ram"
allerdings funktioniert der Link nicht mehr wie man die Section anlegen 
muss.

Kann mir da mal jemand weiterhelfen?

Danke Steffen

Autor: Johann L. (gjlayde) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Steffen Graap (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

Danke für deine Antwort. Mittlerweile habe ich mich schon selbst durch 
die Thematik gewühlt.

für alle die selbiges Problem haben hier mal die Kurzversion unter 
Benutztung von WinAVR.

1. neues Dateiatribute definieren
#define XRAM __attribute__((section (".xram")))

2. Variable anlegen
unsigned char Test XRAM;

3. eigenes Linkerscript erstellen, unter WinAVR liegen die Scripte in 
????\WinAVR\avr\lib\ldscripts\ ???? ist das Installationsverzeichnis von 
WinAVR. Hier das entsprechende Script kopieren (für den Mega256 ist das 
avr6.x), z.B. nach MeinScript.x

4. Einträge ins Script
in den Bereich MEMORY den folgenden Eintrag hinzufügen

  xram      (rw!x) : ORIGIN = 0x808000, LENGTH = 32K

bei meiner Hardware bieginnt der 32k SRAM bei Abresse 0x8000 und geht 
bis zum Ende, sprich 0xFFFF

in den Bereich SECTIONS den folgenden Eintrag hinzufügen

/* eigene Section im externen RAM.  */
  .xram  (NOLOAD)  :
  {
    *(.xram*)
  }  > xram

NOLOAD muss hier rein, da AVR-DUDE auf den ext. RAM nicht zugreifen kann 
und somit eine Fehlermeldung ausgeben würde

5. dann dem Linker mitteilen, das er das erstellte Script benutzen soll
entweder dem Linker direkt übergeben mit

-T ????/WinAVR/avr/lib/ldscripts/MeinScript.x

oder per Übergabe vom Compiler

-Wl,-T ????/WinAVR/avr/lib/ldscripts/MeinScript.x

bei mir funktioniert das bestens, sollten allerdings hier Fehler 
enthalten sein, berichtigt mich bitte

Gruß Steffen

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.