PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Wie "tief" geht GOSUB



Marco78
28.03.2005, 22:42
Ich habe ein Programm, das schon deutlich gewachsen ist.
Aber ab und zu kommt es zu Abstürzen. Der M16 führt ein Reset aus (Watchdog habe ich nicht eingestellt, macht BASCOM das evtl von sich aus?)

So wie es aussieht stürzt das Programm ab, wenn ich aus einem Label mit Return zurück springen will.

Ist GOSUB allgemein auf eine bestimmte "Tiefe" begrenzt?
Wobei ich grade mal max. 5 GOSUB hinter mir habe an der Stelle. Der C16 kommte 8 glaube ich ;)

Eingestellt habe ich bis jetzt:
Framesize: 48
SWStack: 32
HWStack: 64

Und das sollte ja schon mehr als genug sein, oder?

Gibt es irgendwie ein Anhalt für die Werte?

28.03.2005, 22:57
Hakllo marco78,

probiers doch einfach mal aus !



gosub one:
gosub two:
.
.
.
.
gosub ten:

sub one :
set Port
waitms 500
reset port
waitms 500
return sub


So ist die Frage gleich geklärt. Sag mir was du rausgefunden hast !

gruß Bernd (Gandalf)

engineer
29.03.2005, 02:18
Die gosubs beanspruchen stack - liegt es gfs daran =

oe9vfj
29.03.2005, 08:02
Die Anzahl der GOSUB sind im Prizip nicht begrenzt, hängt aber vom verfügbaren HW-Stack Speicherplatz ab (pro GOSUB 2 Bytes).

Schau mal in der Hilfe unter $DBG nach, dort sind die verschiedenen Stacks beschrieben, mit $DBG hast Du auch die Möglichkeit, den echten Bedarf ermitteln.

Marco78
29.03.2005, 16:58
(pro GOSUB 2 Bytes)
Danke, das war die Info, die ich brauchte.


Schau mal in der Hilfe unter $DBG nach, dort sind die verschiedenen Stacks beschrieben, mit $DBG hast Du auch die Möglichkeit, den echten Bedarf ermitteln.
Hab ich schon gescht. Aber ich habe diesen Stack Analyser nicht gefunden, der mir die Ergebnisse anzeigen würde.

Da ich aber die Stacks schon deutlich höher gesetzt haben, wird es wohl ein anderes Problem sein. Schade das niemand weiss, wie der Real Hardware Simulator funktioniert :(

Ich vermute mal ein gosub, was nicht mir return enden lösst den Fehler aus. Irgendwo könnte dann an Stelle von return goto stehen um zurück zu führen.
Und beim nächsten Return weiss der Stack nicht so wirklich, welchen Wert er übernehmen muss und gibt auf :D

Damit muss ich Gast auch nicht mehr erzählen, was das Ergebniss war :D