erstellt 24.06.2010 |
Frame |
Im Frame werden Daten
und keine Adressen
gespeichert. Wenn an eine Unterprozedur ein Parameter
übergeben wird, dann
wird die Adresse dieses Parameters im SWSTACK gespeichert. Der Wert,
also
das was in dieser Variable drinnen steht, wird im FRAME gespeichert.
Allerdings nur, wenn der Parameter mit dem Schlüsselwort BYVAL
an die Prozedur
übergeben wurde. Da es in den meisten fällen besser
ist, Werte mit BYVAL zu
übergeben, können wir davon ausgehen, dass der Wert
der Variable im Frame
gespeichert wird.
Nehmen wir eine Unterprozedur .eine mit vier Parametern. Nehmen wir mal an, dass der erste und der zweite Parameter je eine BYTE-Variable sind. Der dritte Parameter ist eine WORD-Variable. Und der vierte Paramter eine STRING-Variable für 10 Zeichen. Weiters sind in der Unterprozedur 3 lokale BYTE-Variablen definiert. Wird diese Unterprozedur aufgerufen, dann wird vorher in den HWSTACK die Rücksprungadresse abgelegt. Dann werden im SWSTACK die Adressen der Parameter und der lokalen Variablen abgelegt. . Und im FRAME werden die Werte der Parameter und der lokalen Variablen abgelegt. Wird die Unterprozedur wieder verlassen, dann werden die Daten im Frame wieder frei gegeben.
Für diesen Aufruf werden im FRAME also 18 Byte benötigt. Bascom braucht den FRAME aber auch für andere Sachen. Unter Anderem für die Umwandlung von Variablen in andere Datentypen. Man kann also den FRAME recht groß dimensionieren. Nur wenn der übrige Speicher ausgeht, sollte mann den FRAME auf das Nötigste verkleinern.Wenn mann den FRAME großzügig mit 60 Byte dimensionierst, dann sollten die meisten Anwendungsfälle des ATmega8 abgedeckt sein. Wenn mann weiss, dass man weniger brauchst, kann mann den FRAME ja kleiner machen. $framesize = 60 |
Der ATmega8 hat insgesamt 1024 Byte SRAM zur Verfügung. Von diesem SRAM werden die Bytes für den HWSTACK, den SWSTACK und den FRAME abgezogen. $hwstack = 40 Dann bleiben für die Variablen des Hauptprogrammes noch 892 Byte übrig. Man kann also noch gut nach oben korrigieren, falls mehr HWSTACK, SWSTACK oder FRAME benötigt wird, oder wenn man auf "Nummer Sicher" gehen möchte. $hwstack = 100 Auch mit diesen Werten sollte alles so lange gut laufen, so lange das Programm nicht mehr als 700 Byte für globale Variablen braucht. |
Aktualisiert 08.08.2014 |
Copyright by Manfred Schrod 2009 |