www.mikrocontroller.net

Forum: Compiler & IDEs Stackumschaltung - internes RAM


Autor: Werner B. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

Umgebung:
MCU = ATmega128, 4kB internes RAM, 60kB externes RAM

Problem:
ich versuche jetzt seit einiger zeit den task stack für ein
multitasking system in das mcu interne ram zu verlegen.

Lösungsansatz:
Dazu habe ich mir diese 4kB in einer neuen section ".faststack"
reserviert.

static unsigned char task_stack[4096] _attribute_ ((section
(".faststack")));

Im makefile habe ich jetzt den allgemeinen datenbereich ins externe RAM
ab 0x1100 verlegt (-Tdata=0x802000),
den heap_end nach 64kB und den avr-libc stack ans ende des RAM
(--defsym=__stack=0x80ffff) und den .faststack nach 0x800100

EXTMEMOPTS = -Wl,-Tdata=0x801100,--defsym=__heap_end=0x80ffff,
  --section-start=.faststack=0x800100,--defsym=__stack=0x80ffff

Phänomen:
Das ganze funktioniert hervorragend solange ich meinen task_stack[]
ohne das _attribute_... verwende, sobald ich mit dem .faststack
übersetzte, wird ein reset produziert sobald der stack umgeschaltet
wird.

Was mach ich noch falsch ?

Autor: Jörg Wunsch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Meiner Erinnerung nach kann man ohne manuell angepasste Linkerscripts
nur neue sections im ROM anlegen, nicht im RAM.

Warum überhaupt eine eigene section?  Du kannst doch auf der
Linkerkommandozeile Symbole frei definieren und diese dann für
deinen Stack benutzen.

Autor: Werner B. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich hab' mir erst mal ein neues linker script gebaut und definiere auch
die symbole auf der Linkerkommandozeile.
Kann ich aber erst heute abend testen.

<cut>
     _etext = . ;
  }  > text
  .faststack    : AT (ADDR (.text) + SIZEOF (.text))
  {
    *(.faststack)
  }  > data
  .data     SIZEOF (.faststack) + ADDR (.faststack) :
  {
     PROVIDE (__data_start = .) ;
</cut>

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.