Forum: Compiler & IDEs Variablem im externen Speicher vom AVR


von Steffen Graap (Gast)


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

von Johann L. (gjlayde) Benutzerseite


Lesenswert?


von Steffen Graap (Gast)


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
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

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.