mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Stack auf dem AT91SAM7S256


Autor: Peter Pippinger (axis)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo NG,

nach längeren Überlegungen möchte ich nun doch gerne den Stack 
verwenden. Es ist einfach am besten - so denke ich - die betroffenen 
Register vor einem Funkionsaufruf auf den Stack zu legen und danach 
wieder zu holen.

Kann mir jemand sagen, wo ich die Position und Größe des Stacks im 
Speicher definiere? Ich verwende die IAR Workbench4.

Vielen Dank für jeden Hinweis!
Peter

Autor: Thomas Pototschnig (pototschnig)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
In meinem Linker-File steht das hier:

MEMORY
{
  FLASH (rx) : ORIGIN = 0x00100000, LENGTH = 0x00040000
  DATA (rw)  : ORIGIN = 0x00200000, LENGTH = 0x00010000
  STACK (rw) : ORIGIN = 0x00210000, LENGTH = 0x00000000
}

Du brauchst also deinen Stack-Pointer nur mit 0x00210000 laden; Der 
stack wächst nach unten.

Mfg
Thomas Pototschnig

Autor: Peter Pippinger (axis)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Du brauchst also deinen Stack-Pointer nur mit 0x00210000 laden; Der
>stack wächst nach unten.

Wenn ich für mich sage, dass in einem bestimmten Speicherbereich mein 
Stack sein soll, reicht es dann, dass ich nur den Stackpointer auf das 
Ende dieses Speicherbereichs Zeigen lasse? Kann ich dann theoretisch 
schon den Stack mit push und pop verwenden? Da müsste doch eigentlich 
der Assembler / Linker nicht zwingend davon wissen - gesetzt dem Falle, 
dass ich den Speicherbereich nicht anderswo benötige, oder?

Autor: Thomas Pototschnig (pototschnig)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du weißt aber schon wie ein Stack funktioniert? :-)

Mfg
Thomas Pototschnig

Autor: Peter Pippinger (axis)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hey, coole Antwort. Bringt mich super weiter! Danke ;-)

- first in last out
- push: wert an SP-Zeiger-Adresse schreiben und SP ++ oder --
- pop: SP -- oder ++ und wert von SP-Zeiger-Adresse lesen

so ähnlich stelle ich mir nen Stack vor.

Autor: Peter Pippinger (axis)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
OK, fürs Protokoll:

es scheint zu gehen.
r13 scheint mir der Stackpointer zu sein.

Beispiel, um r1 auf den Stack zu legen:

// Stackpointer ans Ende der 64KB SRAM setzen
LDR r13, =0x210000

// r1 auf den Stapel legen // SP(r13) ist danach 0x0020FFFC
PUSH {r1}

---> Hier kommt irgend ein Code

// r1 vom Stapel holen
POP {r1}

PS.: einen Stack habe ich im Assembler / Linker nicht definiert, da bei 
mir sowieso die ganzen 64KB ein Segment sind. Werde wohl später den 
Stack nach 1024+1000 legen...

Autor: Thomas Pototschnig (pototschnig)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du brauchst auch keinen Stack definieren - du musst nur den Stackpointer 
mit einer Adresse laden und das wars. Das einzig sinnvolle ist übrigens 
den Stack ans Ende des internen RAMs zu legen.

Mfg
Thomas

Autor: Peter Pippinger (axis)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Das einzig sinnvolle ist übrigens
> den Stack ans Ende des internen RAMs zu legen.

für mich leider nicht :-(

ich möchte doch noch nen 6510-Emulator von C# nach ARM7 portieren, den 
ich geschrieben habe. Und die einzige Adresse, von der ich mit 
ziemlicher Sicherheit sagen kann, dass ich die nicht brauchen werde, ist 
der Bildschirmbereich ab 1024 vom C64-RAM. Deshalb denke ich, dass sich 
da mein ARM-Stack wohl fühlen wird müssen :-) Wobei es bestimmt auch 
ganz schön cool wäre, den Stack vom 64er gegen den vom ARM laufen zu 
lassen. Der ARM beginnt am oberen Ende und der 64er am unteren Ende - in 
der Hoffnung, dass sich die jeweiligen SPs nie kreuzen werden :-))))

Aber jetzt ist erst mal SD-Karte angesagt... Nachdem ich jetzt schon 
stolzerweise Strings und Werte (Hex und Binär) über RS232 senden kann, 
hoffe ich, dass ich da in 1-3 Wochen durch bin. Die Zeit ist leider sehr 
begrenzt hier :-)

Autor: Thomas Pototschnig (pototschnig)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ah, jetzt versteh ich auch deine vorherigen Fragen ...

6510-Emu in ARM7-Assembler? Hört sich interessant an ... Ist das nur die 
CPU oder VIC und/oder SID auch?

Mfg
Thomas Pototschnig

Autor: Peter Pippinger (axis)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
naja, was es letztendlich werden soll steht hier:

http://www.pippinger.de/content/view/16/30/

Bis dahin wird wohl noch einiges an Zeit vergehen, aber das macht 
nichts. Ist nur so ein kleines Hobby von mir, wofür ich nicht allzuviel 
Zeit habe.

Autor: Thomas Pototschnig (pototschnig)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hmm ... das sieht sehr interessant aus :-)

Aber eins wundert mich ... Du sprichst C#, aber kein C/C++?

Mfg
Thomas Pototschnig

Autor: Peter Pippinger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Naja, ein bischen Nostalgie soll ja auch noch mit aufkommen. Früher hat 
man halt diverse Laufschriften etc in ASM programmiert (auch demos 
genannt :-)

Mir gehts auch nicht darum, das Ding so schnell wie möglich über die 
Bühne zu ziehen. Es macht einfach Freude, nach all dem 
Resourcenfressendem Zeug, mit dem ich immer täglich so arbeite, mal 
wieder zu sehen, was so ein kleiner Chip mit 18MHz alles kann. Bin nach 
wie vor total begeistert von dem kleinen ARM. Auch wenn ich ihn nicht 
100% verstehe, macht die Arbeit mit dem Teil echt Spaß!

Autor: Thomas Pototschnig (pototschnig)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> kleiner Chip mit 18MHz

Verwendest du die PLL nicht? Ohne USB sind doch 55MHz möglich (mit USB 
48MHz)... Oder war das nur ein Verschreiber?

Ich komm ja auch noch aus der alten C64 Zeit ... damals versuchte ich 
mich mal an Assembler, habs aber nicht kapiert. War wohl noch etwas zu 
jung ...

Hin und wieder kram ich dann zB Zac McKracken raus und zock es nochmal 
im Emu :-)

Bin gespannt was da bei deinem SID-Player rauskommt!

Mfg
Thomas Pototschnig

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.