Hallo, es gibt ja schon einige gute Erklärungen zu diesem Thema, wie etwa http://halvar.at/elektronik/kleiner_bascom_avr_kurs/speicher_hwstack_swstack_frame/ Den hwstack meine ich auch soweit verstanden zu haben, aber bereits beim swstack komme ich an folgender Stelle nicht mehr so richtig mit: "...für jede Variable, die an die Unterprozedur als Parameter übergeben wird..." Angenommen ich starte mein Programm mit einer Handvoll "Dim Variablen As Byte". Kurz darauf geht es gleich in eine "Gosub XY" wo ein relativ großer Programmteil erledigt wird, Variablen bekommen Werte zugewiesen, werden berechnet, miteinander verglichen usw. Was genau zählt nun aber als "Parameter-Übergabe"? Wenn ich innerhalb der Sub den (außerhalb zugewiesenen) Wert einer Variable abrufe? Oder jede Variable die innerhalb der Sub behandelt wird, also z.B. dort nur einen neuen Wert bekommt? Oder ganz anders? Danke im Voraus, MfG Martin
Martin M. schrieb: > Angenommen ich starte mein Programm mit einer Handvoll "Dim Variablen As > Byte". Kurz darauf geht es gleich in eine "Gosub XY" wo ein relativ > großer Programmteil erledigt wird, Variablen bekommen Werte zugewiesen, > werden berechnet, miteinander verglichen usw. > > Was genau zählt nun aber als "Parameter-Übergabe"? Nichts davon, denn Du arbeitest dabei ja mit globalen Variablen. > Wenn ich innerhalb der Sub den (außerhalb zugewiesenen) Wert einer > Variable abrufe? Ich glaube, Du musst zwischen dem altklassischen Unterprogramm (Aufruf per Gosub) und der "echten" Sub (Aufruf per Name ohne Gosub) unterscheiden. Das Gosub-Unterprogramm arbeitet mit globalen Variablen. SW-Stack brauchst Du, wenn Du eine echte Sub mit Parameter aufrufst oder eine Funktion (mit Parameter), wobei die Funktion auch selbst geschrieben sein darf. Framesize ist dann der RAM-Bereich, den Funktionen "zum Rechnen" brauchen. > Oder jede Variable die innerhalb der Sub behandelt wird, also z.B. dort > nur einen neuen Wert bekommt? Eher nicht, siehe oben. > Oder ganz anders? HW-Stack: Rücksprungadressen (Interrupt, Gosub, Aufrufe von SUB und Funktionen), Push/Pop (Registersicherung im Interrupt und in Funktionen) SW-Stack: Übergabeparameter für "echte" Subs (Aufruf ohne Gosub) und Funktionen Framesize: Arbeitsbereich (Schmierzettel) für Funktionen ...
Vielen Dank für die einleuchtende Erklärung, Hannes! Dann bräuchte ich mit meinen maximal zwei gleichzeitigen (verschachtelten) Gosubs im Prinzip nicht mehr als 4 Bytes hwstack (keine Interrupts) reservieren. Damit mir die Sache nicht völlig umsonst Kopfzerbrechen bereitet hat, werde ich mich gleich mal mit den Vorteilen von "echten" Subs, Function usw. beschäftigen... ;) MfG Martin
Martin M. schrieb: > Damit mir die Sache nicht völlig umsonst Kopfzerbrechen bereitet hat, > werde ich mich gleich mal mit den Vorteilen von "echten" Subs, Function > usw. beschäftigen... ;) Ob diese Konstrukte auf kleinen AVRs (ATtiny) Vorteile bringen, weiß ich nicht. Ich kenne sie halt von VB und fand sie in Bascom wieder. Ich vermute, dass sie recht stackhungrig sind, da sie lokale Variablen erlauben. Nicht alles, was in Bascom implementiert ist, ist auch auf kleinen AVRs vorteilhaft nutzbar. ...
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.