Hi,
ich habe mirs angeschaut - siehst soweit sehr gut aus
Welche Änderungen hast du für die nicht-optimierte Variante vor?
Drei Sachen (eher Sächelchen):
* Zwei Funktionen enable/disable_scheduling - oder, noch besser, incr/decr_scheduling_lock. Der Scheduler soll dann den Task nur wechseln, wenn die Lockvariable 0 ist. Diese könnte man dann z.B. in Systemfunktionen wie schreiben aufs LCD/UART, I2C etc. verwenden. So könnte man verhindern, dass sie unterbrochen werden und schlimmstenfalls im nächsten Task wieder aufgerufen werden. Deine Listenimplentierung ist wenn ich es richtig sehe z.B. auch nicht threadsafe, oder? malloc und Friends sind ebenfalls Kandidaten für einen Wrapper, der das absichert - ich glaube nicht, dass die threadsafe sind.
Mit incr/decr könnte man Systemfunktionen verschachteln.
* In _thread_s nicht nur den aktuellen Stackpointer, sondern auch Beginn und Größe speichern. So könnte man prüfen, ob der Stackpointer im aktuellen Bereich ist. Man könnte am Anfang und am Ende der jeweiligen Stacks jeweils auch ein Cookie legen und den beim Rein- und Raussprung überprüfen, ob das Cookie noch ok ist. Für viel später könnte man auch eine einfache Checksumme vorsehen
* Das ganze in eine .a-Datei stecken. Dann könnte man es einfach dazu linken und man kommt gar nicht erst in Versuchen zu pfuschen
Das wars erstmal
Ich werde den Code mir die nächsten Tage mal genauer anschauen und auf die Biene loslassen
Bissle offtopic: Ist es eigentlich geplant, den Code der Nibo2 und dem Nibobee zusammenzulegen? Oder dass man für die beiden Nibos jeweils eine Lowlevel Lib hat und für die höheren Funktionen wie Multitasking, I2C, Speicherverwaltung etc. in eine weitere Lib zusammenfassen, die dann auf beiden Robotern verwendet werden kann?