Zu 2.
cmd (als Abkürzung für command) ist eine komplexe Variable vom Typ behaviour_command_t, der im Programm als struct so definiert ist, dass cmd aus einem "Satz" von Variablen besteht, die zusammen den "Befehl" (und gleichzeitig auch den Status) für die Bewegungen darstellen. Da drin sind move und rotate Einzelbits (flags).
Da das ganze Programm recht schnell durchlaufen wird, kommt es an die Abfrage "if(!(cmd->move || cmd->rotate))" öfter, bevor die Bewegung abgeschlossen ist. Damit ist diese Abfrage natürlich erforderlich, damit nicht VOR Ablauf einer move oder rotate Bewegung ein anderer Fahrbefehl (moveAtSpeed) oder eine Änderung der Bewegungsrichtung (changeDirection) erlaubt wird.
Letztlich wird danach erst dann, wenn die move/rotate Bewegung abgeschlossen ist (isMovementComplete()), das move- und rotate- Flag im cmd struct gelöscht.
Danach sind dann auch wieder Änderungen der Bewegungsrichtung oder Geradeausfahrten möglich.
Lesezeichen