PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Ständiges lauschen bei While-Schleife?



ansgar
08.11.2005, 09:32
Ich schreibe gerade mein erstes Programm zur Steuerung in BASCOM.
Der Algorithmus sieht so aus (ist nur die Grundstruktur, noch nicht in BASCOM übersetzt.)

port X = Eingabe 1;2;3

Do

while port x = 1
funktion A

if port x = 2
funktion B

if port x = 3
funktion C

loop

funktion A
funktion B
funktion C

end


Meine Frage:
Lauscht der µC in dieser While-Schleife ununterbrochen auf das Signal aus Port x? Wenn nicht, würde das Programm ja jedesmal nur am Anfang Funktion A ausführen, damit dann aufhören und erneut port x überprüfen. Dann würde es "stocken" und nicht rund laufen.

Grusim
08.11.2005, 09:39
Nach meinem Verständnis prüft er einmal am Anfang ob der Port x =1 ist, wenn er das nicht ist, wird die gesamt Schleife beendet.
Do...while bedeutet ja, Wiederhole solange, d.h. Solange die Bedingung erfüllt ist, mache die Schleife.

Wenn du eine Endlos-Schleife ohne Abbruch machen willst oder ein Schleife mit Abbruch mach doch (wenn es das bei BASCOM gibt, programmiere noch kein µC) Do...loop (ohne Bedingung) oder do....until port x=4 (Wiederhole bis der Wert an Port X = 4 ist. Port X=1 msst dann über If-Abfrage in der Schleife abfragen.

ansgar
08.11.2005, 10:03
Du hast Recht, Grusim.
Übrigens soll funktion A ein ständiges geradeaus fahren des Roboters bedeuten. die anderen funktionen sind dann hindernis ausweichen und greifarm bewegen.

dann ginge es auch so:

port x = 1;2;3

for port x = 1

do

funktion A (Fahren)

loop

if poert x = 2
funktion B
if port x = 3
funktion C

funktion B
funktion C

end

klingt logisch meine ich.

Gruß,
Ansgar

PicNick
08.11.2005, 10:05
weil das eben nicht eindeutig ist, gibt es eine Reihe von bedingungs-"end" Statements.


Do
' while..wend
while port x = 1 '
funktion A
wend
' if... end if
if port x = 2
funktion B
end if
' if... end if
if port x = 3
funktion C
end if
loop ' zurück nach "DO"


Um das zu verstehen, sind "Struktogramme" recht anschaulich
http://de.wikipedia.org/wiki/Nassi-Shneiderman-Diagramm

Fahr dem Ablauf mit dem Bleistift nach. Du solltest erkennen, daß
while port x = 1 '
funktion A
wend
eigentlich sinnlos ist.

ansgar
08.11.2005, 10:12
Du hast geschrieben: "weil das eben nicht eindeutig ist,..."

Meinst du damit meine erste Frage?
Danke für den tipp mit den Struktugrammen.

aber was ist mit meinem 2. Algorithmus (die Antwort auf Grusim).
Logisch oder nicht?


ansgar

Grusim
08.11.2005, 10:48
Code von Ansgar:
port x = 1;2;3

for port x = 1
do
funktion A (Fahren)
loop

--> Das klappt nicht! Es wird abgefragt ob Portx=1 bei wahr geht es in eine Endlosschleife, die immer gemacht wird. Kein Abbruch der Schleife, fährt also geradeaus bis Akku leer.


if poert x = 2
funktion B
if port x = 3
funktion C
--> Das funktioniert nur fehlt ein Endif damit das Programm weiss, wie weit die Funktionen für die jeweilige Bedingung ist.

funktion B
funktion C

-->Und nachdem alles einmal abgefragt wurde, soll er noch ausweichen und rückwärts fahren?! Oder warum werden die Funktionen aufgerufen?

end

PicNick
08.11.2005, 10:50
Bei der zweiten Konstuktion bist du syntaktisch leider ganz daneben. Da hilft dir aber dann auch die BasCom "Help"
Schleifenkonstruktionen können zwar verschachtelt sein (eine innerhalb einer anderen)


while bedingung
for var = 1 to 10
next var
wend

aber sie dürfen sich nicht überlappen


while bedingung
for var = 1 to 10
wend
next var


https://www.roboternetz.de/wiki/pmwiki.php?n=Main.Compilerlop