PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Feher beim Rücksprung aus einer Sub



andreasrohe
26.11.2009, 21:44
Hallo, wer kann mir bei folgendem Problem helfen?

Programm aus BASCOM
Problem beim Rücksprung aus einer Sub

Klassischer Programmaufbau

$regfile '...für ATMEGA 8
'...Initialisierung diverser Merker, Vars ect.
'...
'unter anderem wird hier ein Motor ein eine Grundposition
'gefahren
while "motor nicht in grundposition"
motor_fahren = on
wend
motor_fahren = off
'Hauptprogrammschleife
-------------------------------------------------------------------
do
debounce taster, 0, sub1
loop
end

sub1
i2cstart 'start command für i2c
i2cwrite &h04 'ansteuerung
i2cwrite &h00 'ansteuerung
i2cwrite &h00 'ansteuerung
i2cstop 'stop für i2c bus
waitms 100 'wartezeit min 32 für beendigung der i2c-kommunikation
call sub2
end sub 1

sub2
'irgendwelche befehle
call sub3
end sub2

sub3
...z.b. i2c um eine gegenoeration vom sub1 durchzuführen

end sub3
----------------------------------------------------------------
Alle einzelnen Subs funktionieren, nur in der Kombination habe ich das Problem, dass der MS nicht zurückspringt, es scheint fasst so als würde er von ganz von vorne anfangen.
Ich könnte fluchen da ich schon Tage mit diesem Problem verbracht habe.
Ich möchte eigentlich vermeiden alles in eine Routine zu packen, da es ja eigentlich für solche Zwecke Subs schreibt.
Benötige also dringend Hilfe.
VD

Jaecko
26.11.2009, 23:16
Läuft dir da der Stack über?
Wie gross sind denn HWStack, SoftStack und Framesize?

Nachtrag: Häng mal die gesamte .bas + .cfg an, so dass man die mal durch den Simulator jagen kann.

andreasrohe
27.11.2009, 06:51
Hallo,

das Programm ist mal beigefügt.

andreasrohe
27.11.2009, 07:05
... Beitrag schon Geschichte, unten geht es weiter !!

peterfido
27.11.2009, 11:33
Ich habe dir das Prog mal als PN geschickt. Wobei ich nur erstmal die Calls gegen Gosubs getauscht habe. Ob, die Subs sich jedesmal wieder gegenseitig aufrufen und so der Stapelspeicher überläuft habe ich nicht getestet. Könnte aber daran liegen.

andreasrohe
27.11.2009, 21:36
Hallo liebe Helfenden,

mein Tag war ziemlich bes......., letztlich haben ich nur eine Erkenntnis mehr gewonnen.
Wie es scheint hat der MC Probleme bei der Ausführung (mehrfachen) der I2C-Befehle.
Im angefügten Programm ist das Problem z.B. das, dass das Prog die SUB Arm_zuruckfahren ausführt, dann aber nicht die SUB Wagen_hoch und zur SUB Warten kommt das Prog gar nicht.

Ich haben auf einen Speicherüberlauf getippt aber die Stacks sind riesig, Gesamtspeicher des MC ist auch nicht ausgelastet, ich bin völlig ratlos.
Evtl. fällt Euch ja etwas ein.

Vorab vielen Dank und ein schönes Wochenende

Andreas

File: http://www.weber-textagentur.de/file

Vitis
28.11.2009, 15:36
probiers mal ohne die i2c-lib, dann per soft-i2c, pins definieren etc.