Hallo demmy,
die Speicherreservierung für lokale Variablen ist ja gewaltig.
Kleine Beschreibung von meinem Freund Peter.
$hwstack bestimmt die Größe des reservierten Speichers in Byte für Sprungmarken. Vor jedem Sprung innerhalb des Programms wird die aktuelle Position (2 Byte) im Hardwarestack gespeichert. Je mehr Sprünge im Programm vorhanden sind, desto größer sollte der Wert gewählt werden.
$swstack bestimmt die Größe des reservierten Speichers in Byte zur Adressierung von zu übergebenden und lokalen Variablen. Jede Variable die einer Sub oder Funktion übergeben oder als Local deklariert wird benötigt 2 Byte des Softwarestacks.
$framesize bestimmt die Größe des reservierten Speichers in Byte für lokale Variablen. Alle zu einem Zeitpunkt benötigten lokalen Variablen werden in diesem Bereich gespeichert. Bei Verwendung vieler lokaler Variablen in Subs oder Funktionen sollte dieser Wert entsprechend groß gewählt werden.
Variablen
Eine Variable wird mit dem Befehl Dim oder Local festgelegt. Die Festlegung einer Variable wird auch als Deklaration bezeichnet. Wird eine Variable mit Dim deklariert, so gilt diese ab dem Punkt ihrer Deklaration programmweit (auch in allen Subs und Funktionen). Innerhalb einer Sub oder Funktion kann eine Variable auch als Local deklariert werden. Dies hat zur Folge, dass diese Variable nur in der einen Durchführung der Sub oder Funktion gültig ist und wieder gelöscht wird, sobald die Sub oder Funktion verlassen wird.Der Wert einer Variable kann wärend der Programmausführung geändert werden. Dies ermöglicht es zum Beispiel das Ergebnis einer Rechnung zu speichern.
Jede Variable benötigt - abhängig von ihrem Typ - eine bestimmte Menge an Speicherplatz im RAM. Bascom-AVR unterstützt die folgenden Datentypen:
- Bit: besteht aus nur einem Bit und kann den Wert 0 oder 1 speichern
- Byte: besteht aus 8 Bit und kann Ganzzahlen von 0 bis 255 speichern
- Word: besteht aus 16 Bit und kann Ganzzahlen von 0 bis 65535 speichern
- Integer: besteht aus 16 Bit und kann Ganzzahlen von -32768 bis +327687 speichern
- Long: besteht aus 32 Bit und kann Ganzzahlen von -2147483648 bis 2147483647 speichern
- Single: besteht aus 32 Bit und kann Fließkommazahlen von 1,5 x 10^–45 bis 3,4 x 10^38 speichern
- Double: besteht aus 64 Bit und kann Fließkommazahlen von 5,0 x 10^–324 bis 1,7 x 10^308 speichern
- String: kann text mit einer Länge von 1 bis 254 Zeichern speichern, jedes Zeichen benötigt ein Byte und zusätzlich wird ein Byte mehr benötigt als der String lang ist
Sollte deine Angabe stimmen, komme ich ins grübeln, da so etwas noch nicht erlebt.
Rechne mal selber. Double hat 8 Byte(ist das Max). Somit müssten 255 Variablen in dieser Größe im Code stehen(ist Grenzwert). Wie du aber erkennen kannst, mit Verschwendung der Strings, kommt man locker auf diese Größe.
Nur mal so:
Text = „Hallo“ somit 5 Byte + 1(sicher ist +2) = 6 Byte nötig, schreibst du es aber so,
Dim Text AsString*100
werden 94 Byte „verballert“. Warum?
War ja auch mal meine Anfrage poste auch mal die Dim’s deiner Variablen usw.
Bekamst auch schon den Hinweis, wenn Array oder Overlay nicht sauber eingestellt, kommt es zu Überschreibung der Byte. Fehlerfindung sehr schwierig, da dynamisch. Ist wie mit Windows „mal Gates mal nicht“
Bitte beachte, ist keine Belehrung, nur ein Hinweis.
Mit freundlichen Grüßen
fredred .
Lesezeichen