Variablem im externen Speicher vom AVR

Gast #1311150
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
Gast #1313358
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
1
#define XRAM __attribute__((section (".xram")))

2. Variable anlegen
1
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

Eine eigene Frage? Dieser Thread ist über 17 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.