Archiv verlassen und diese Seite im Standarddesign anzeigen : Bacom FOR NEXT mit GOSUB Fehler?
Hallo,
ich hab folgenden code:
do
gosub trigger
For I = 0 To 2
Gosub 10
Gosub 0
Gosub 01
Gosub 1
Next I
loop
der geht nicht....die for next schleife wird nicht wiederholt...sondern nur einmal ausgeführt...(quasi ohne for next schleife)
ziel ist, dass
Gosub 10
Gosub 0
Gosub 01
Gosub 1
mehrfach ausgeführt wird.
warum gelingt das nicht?
die subs sind korrekt mit "label:" und "return"
Mach mal das Do und das Loop weg. Wenn die Schleife nur von 0-2 laufen soll ist es bischen unnütz diese 3 Schleifendurchläufe dann in eine Endlosschleife zu packen oder?
das do loop ist die hauptschleife...
das in der for next schleife wird eine präambel, also eine zeit lang der gleiche code....
danach folgt ein anderer indvidueller code, dass ganze wiederholt sich dann....
for next wird am ende ca. 600 erreichen...
Dim I As Byte
do
gosub trigger
For I = 0 To 2
Gosub 10
Gosub 0
Gosub 01
Gosub 1
Next I
Loop
10:
Print "10"
Return
0:
Print "0"
Return
01:
Print "01"
Return
1:
Print "1"
Return
Trigger:
Print "trigger"
Return
Dies läuft bei mir im Simulator.
Eventuell liegt der Fehler bei dir in einer der Unterprogramme. Weil die For-Next Schleife sieht soweit in Ordnung aus.
benutzt Du die Variable "I " auch in einer Subroutine?
Wenn ja hängts daran, dass dort der Wert gesetzt
wird und die for-Next dann aufgrund des neuen Wertes
verlassen wird.
peterfido
24.07.2010, 09:54
Da wird wohl I in einer der Subs benutzt.
Eine weitere Möglichkeit:
do
gosub trigger
gosub VierSubs
gosub VierSubs
gosub VierSubs
loop
end
VierSubs:
Gosub 10
Gosub 0
Gosub 01
Gosub 1
return
edit:
@Vitis: gleicher Gedanke...
Bist du sicher, dass er z.B. bei GOSUB 0 den Label anspringt und nicht die Adresse 0
Oder ist das ein "O" ?
peterfido
24.07.2010, 16:18
Stimmt, ist mir gar nicht aufgefallen. Gosub 0 sollte man nicht verwenden. Überhaupt reine Zahlen...
Bist du sicher, dass er z.B. bei GOSUB 0 den Label anspringt und nicht die Adresse 0
Oder ist das ein "O" ?
Bascom verarbeitet das so wie es da steht. Auch das Label 0: wird angesprungen. Hatte ich doch oben geschrieben.
Allerdings geht jetzt kein Goto 0 mehr, um einen Pseudo-Reset durchzuführen.
Ansonsten ist das ja ganz normal, Labels als Zahlen zu haben.
Ich wüsste keinen Grund, warum man das nicht machen sollte. Höchstens das Labels sinnhafte Namen haben sollten.
nein ich hab den fehler gefunden...gosub mit zahlen geht einwandfrei......
hatte I mehrfach verwendet...deshalb hat die schleife oben nicht funktioniert...war nur ein tippfehler..
.....Höchstens das Labels sinnhafte Namen haben sollten.
Interessanter Gedanke. Sollte man vielleicht mal diskutieren.
das sind sinnhafte namen...die einzige aufgabe des Atmegas ist es eine gewisse 10101010110... folge zu produzieren.
Dabei gibt es die zustände 1 und 0 und die flankenübergänge 01 und 10.
das ganze wird durch ein 8 bit r2r netzwerk erzeugt.
ich könnte natürlich auch als namen "flankevonobennachunten:" oder "vonnullnacheins" nehmen...oder einfach die die oben stehen;)
die möglichkeit von peterfido hab ich absichtlich nicht genommen, da ich sonst eine sub mehr hätte, da ich ja "1" "0" "01" "10" sowieso brauche...:)
funkheld
25.07.2010, 13:44
das sind keine sinnhaften namen. das ist nur unsinn den bascom nicht versteht.
gruss
Es sind sinhafte namen und BASCOM versteht sie sehr wohl! Erst probieren, dann labern!
peterfido
26.07.2010, 20:38
Beides wird vom Compiler eh in Adressen umgewandelt. Sinnhafte Namen sind also nur für uns Programmierer einfacher zu handhaben. Ein gosub Uhranzeigen sagt mir mehr als ein gosub 1.
Meine Version von oben kann unter Umständen den fertigen Programmcode verkürzen, wie ich bei Optimierungsarbeiten schon feststellen durfte. Ebenso ist ein >=11 platzsparender als ein >10. Aber das ist OffTopic...
funkheld
18.08.2010, 19:17
Es sind sinhafte namen
Das ist dummes Zeug und kein sinnhafter Name: 0 01 0.... ](*,)
Es sind sinhafte namen und BASCOM versteht sie sehr wohl! Erst probieren, dann labern!
Verstehst DU die Labels noch in/nach 10 Jahren wenn Du den code noch einmal Brauchst? Dku, labels,kommentare...sind lästig aber sehr wichitig!
Gruß Richard
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.