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 ?
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.
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>
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.