Hallo Sternthaler,

zu Subsumption
Subsumption&ASURO war schon mal in einem anderen Thread von mir angesprochen worden.
Siehe Subsumption

So wie ich Subsumption im engen (und ASURO-einfachen) Sinne verstehe kommen Prozesse P(j) mit niedriger Prio erst dran wenn alle Prozesse P(i) mit höherer Prio ( hier i<j ) fertig sind bzw. erst mal "los gelassen" haben. Wenn da ein "unkooperativer" Prozess dabei ist, der z.B. in eine Endlosschleife geht, hat P(j) Pech.

Ich kann auch in wait(..) "die Schleife nicht von 0 bis zur Anzahl der eingetragenen Funktionen/Prozesse laufen" lassen weil P(j) welches ja wait(..) aufgerufen hat sonst ein zweites mal dran käme etc. . Deshalb darf ich die Schleife nur von 0 bis i<j laufen lassen oder, wie im Code steht, "currentTask<callingTask".

Würde mich freuen wenn Du Subsumption nutzt. Hat man mal einen mit dem man drüber reden kann .

zu "return adc >> 6"
Frag mich nicht warum, aber ich habe festgestellt, das gilt
(iADC>>6) == pADC
dabei ist iADC das durch interrupt gewonnene Signal und pADC das entsprechende durch pollen gewonnene Signal!!?? Ok, ADC Werte sind nur 10 Bit genau. (Bemerkung: Ich wüßte auch nichts von 10 + 6 ungenauen unteren Bits.) Vielleicht vergesse ich ja irgendwo ein Flag zu setzen? Keine Ahnung! Entweder habe ich falsch hingeguckt oder die Antwort steht irgendwo im ATMEL Manuel. Da könnte ich Hilfe gebrauchen!

zu adc.c/OdometryData()
Das Einschalten der Odometrie-LEDs habe ich so belassen wie ich es in 2.8.0 vorgefunden hatte. Ich bin darüber hinaus aber der Meinung, dass man hier die Rückwärtskompatibilität aufgeben sollte und die Odometrie-LEDs nicht manipulieren sollte. Denn, wer sie irgendwo im seinem Code ausschaltet wird einen Grund dazu haben.

zu MY_SWITCH_THRESHHOLD
In switches.c/PollSwitch() wird (und wurde schon bei der Jan-Grewe-Formel) von Werten zwischen 0 und 1023 ausgegangen. Und bei dem #define von MY_SWITCH_THRESHHOLD denke ich auch im Intervall [0, 1023].
Wegen "... sensor<(MY_SWITCH_THRESHHOLD<<6);" in asuro.c/IsrStandard() siehe meine Bemerkung zu "return adc >> 6" denn sensor ist ein iADC Wert. Die hübschere Alternative: "... (sensor>>6)<MY_SWITCH_THRESHHOLD;" kostet Laufzeit.

Gruß rossir