PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Probleme mit Sub



molleonair
22.02.2006, 19:04
Hallo ich habe ein Problem mit der sub funktion

ich übergebe eine 19 und bekomme eine 62 der code ist grad mal 10 Zeilen
und ich kapiers nicht.
ist der Speicher in einer sub begrenzt ? wenn ja auf wieviel und
wie kann ich das problem lösen

Danke für Antwort
Gruß Daniel



$regfile = "m16def.dat"
Declare Sub Menueupdate(byval Menpunkt As Byte )

Call Menueupdate(19)
End

Sub Menueupdate(byval Menpunkt As Byte )

Local Adresse As Byte
Local Neuadresse As String * 3
Local Langstring As String * 20

Print "menuepunkt sub " ; Menpunkt

End Sub

linux_80
22.02.2006, 19:10
Hallo,

zum testen kannst Du die Localen Variablen weglassen, die werden ja noch nicht gebraucht,
ansonsten mit Hilfe dieser Seite die Stack und Framegrössen ändern:
https://www.roboternetz.de/wissen/index.php/Bascom_Inside

molleonair
22.02.2006, 19:16
die sind ja extra drinn weil sie den fehler verursachen

hab den urcode solange eingekürzt bis das übrig blieb

es liegt ja wahrscheinlich am sw stack leider verstehe ich nicht viel davon
wie groß kann man die stacks dimensionieren
wo kommt der platz her wenn ich diese vergrößere?

brauch ne antwort in dummy deutsch

Gruß Daniel

linux_80
22.02.2006, 19:43
Hast Du die Seite gelesen, da würde es drinstehen wann wieviel Speicher in etwa verbraten wird.
Alles zusammen darf dann aber nicht grösser werden wie der SRAM des AVR.

molleonair
22.02.2006, 20:04
wenn man ne seite liest heiß das noch nicht das man das auch versteht

also was mach ich wie wie damit ich 40 byte locale variablen im sub verbraten kann

linux_80
22.02.2006, 21:20
Hallo,
wenn man sich diesen Abstz durchliest:
https://www.roboternetz.de/wissen/index.php/Bascom_Inside#Lokale_Daten

Lokale Daten

Für lokale Daten muß natürlich erstmal ein Platz geschaffen werden. BasCom verwendet dazu das Frame, ...

würde ich darauf schliessen erstmal den Wert bei $frame zu erhöhen, standarmässig ist er auf 32, was nicht reicht, also mal mind. 50 probieren.

Den Wert für $swstack auch sicherheitshalber mal auf 50, wenns noch nicht geht nochmal alles etwas grösser machen bis es geht, dann nochmal für etwas reserve.

Der M16 hat 1024 Byte SRAM, wenn das nicht reicht, anders Programmieren, oder einen grösseren AVR.

molleonair
23.02.2006, 17:15
alles klar ..werd die mal bissl aufstocken und dann solang drosseln bis ich wieder probs bekomm
dann hab ich in etwa die grenze

danke für den tip

Roberto
23.02.2006, 22:40
Hallo

Ein kurze Bemerkung vielleicht zu den Sub's und Function's

Die Brauchen leider ein wennig mehr Speicher :-(

Für mich stelle ich mir die Frage, ob man nicht doch gleich bei Gosub und Goto bleiben soll. (leider)

Blöd wäre es , wenn man sich auf die Sub und Function einschiesst und dann, wen der Speicher nicht reicht, erst wieder alles umschreiben muss :-(
Mir geht es derzeit so mit einem Mega16
Derzeit bin ich bei 13946 Byte (von 16000 Byte) und das Programm ist noch nicht ganz fertig. (Alle noch mit Gosub)
Habe mal ein paar von den Gosub's in Sub geändert (ich glaub so ca. 17Stück)
und ich komme von 13946 auf 14326Byte :-(

Um den Daumen so ca. 30 Byte mehr für einen Sub-Aufruf :-(

Nur mal so zum Nachdenken ;-)
(und ich wollte keinen Extra Thread dafür aufmachen ;-)