Liste der Anhänge anzeigen (Anzahl: 1)
Hallo marvin,
das freut mich aber.
Hier noch ein paar Detailverbesserungen die auf noch kürzeren (hex-)Libcode einerseits und weniger #define-Ballast andererseits, abzielen. Und allgemein auf einfacheren Code abzielen. Aber auch unter Berücksichtigung der tiefen Einsichten von Sternthaler -> Danke!
Und ausserdem habe ich noch ein paar klärende Kommentare mehr gestiftet.
Was will man mehr, oder? ;-)
Hat schon mal einer über Exceptions (bzw. Makros dafür) nachgedacht?
Frei nach dem Motto:
Code:
try {
// Fahre 2m gerade aus!
GoTurn (2000, 0, 150);
} catch(COLLISION) {
// Aber falls ASURO dabei auf ein Hindernis stößt sofort stoppen!
MotorSpeed (0, 0);
}
Hallo Sternthaler,
ich muß sagen, dass ich immer schlechte Laune bekomme, wenn ich auf den Code (hier test.c) einer State-Transition-Machine (STM) schaue. Das einzige was die Laune bei Deinem STM-Code hebt sind die wirklich ausführlichen und guten Kommentare.
Wie dem auch sei, Dein Programm (und damit der ASURO) läuft erst mal bei mir wie designed.
Mal sehen ob mir was zu "Kombination" einfällt.
Liste der Anhänge anzeigen (Anzahl: 1)
Das mit den Switches ist doch empfindlicher (bzgl. Motor an/aus) als ich dachte und ist von mir jetzt etwas sorgfältiger umgesetzt worden. Deshalb der patch3 im Anhang.
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo Sternthaler,
hier meine Überlegungen zur "Kombination" (siehe Anhang): Ich habe Deinen, von Dir vorgegebenen Code (V120.zip), ein wenig gemorpht bis er auch mit der Lib 2.8.0 (plus mein patch3) läuft. Du müßtest Deinen (alten) STM-Code darin gut wiedererkennen, oder?
Das Schöne: Jetzt kommt er sogar ohne STM aus. Die (notwendige) Kooperation zwischen den "Prozessen" findet jetzt mittels wait(..) statt. (Stichwort: subsumption)
All Deine Prozesse: PROZESS_Nav_i(), PROZESS_StatusLEDBearbeiten(), etc. und main() benutzen jetzt wait(..). wait(..) wirkt wie MSleep(..), "vergeudet" aber seine Zeit nicht einfach damit zu warten. Sondern übergibt (in der Zwischenzeit) die Kontrolle an Prozesse mit höherer Priorität! Dazu werden Deine Prozesse, ganz zu Beginn, mittels subsumptionInit(..) an wait(..) übergeben.
Damit das extreme HW_MOTOR_DIFF Deines ASURO keine Rolle spielt, habe ich den Code noch um eine PID-Regelung der Motoren erweitert (siehe PROZESS_MotorRegeln).
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo Sternthaler,
hier meine Überlegungen zur "Kombination" (siehe Anhang): Ich habe Deinen, von Dir vorgegebenen Code (V120.zip), ein wenig gemorpht bis er auch mit der Lib 2.8.0 (plus mein patch3) läuft. Du müßtest Deinen (alten) STM-Code darin gut wiedererkennen, oder?
Das Schöne: Jetzt kommt er sogar ohne STM aus. Die (notwendige) Kooperation zwischen den "Prozessen" findet jetzt mittels wait(..) statt. (Stichwort: subsumption)
All Deine Prozesse: PROZESS_Nav_i(), PROZESS_StatusLEDBearbeiten(), etc. und main() benutzen jetzt wait(..). wait(..) wirkt wie MSleep(..), "vergeudet" aber seine Zeit nicht einfach damit zu warten. Sondern übergibt (in der Zwischenzeit) die Kontrolle an Prozesse mit höherer Priorität! Dazu werden Deine Prozesse, ganz zu Beginn, mittels subsumptionInit(..) an wait(..) übergeben.
Damit das extreme HW_MOTOR_DIFF Deines ASURO keine Rolle spielt, habe ich den Code noch um eine PID-Regelung der Motoren erweitert (siehe PROZESS_MotorRegeln).