Gast
#890452
Hallo, viele Anfragen hier nach einer "Steuerungssoftware" werden auf die state-machine der Butterfly Software verwiesen. Der avr-gcc / avr-libc port von martin thomas ist hier: http://www.siwawi.arubi.uni-kl.de/avr_projects/#bf_app Siehe main.c und menu.h Ich versuche mal eine Erläuterung: Wenn ich das richtig verstanden habe, wird das Programm in Zustände unterteilt, die in dem Fall wohl eher makroskopisch aus den Menüpunkten bestehen. Ereignisse (hier ein Tastendruck) veranlassen dann einen Wechsel in einen anderen Zustand. menu.h: Zur Steuerung sind zwei Arrays angelegt, in denen die Elemente als Struktur definiert sind, und die nötigen Daten zusammenfassen. Das liegt alles als const .... PROGMEM im Flash. Das eine Array (menu_state) enthält ein Byte für die Zustands-ID einen Zeiger auf den Menü-Text einen Funktionszeiger Das andere Array (menu_nextstate) enthält für jede Zustands-ID und die möglichen Ereignisse die folgende Zustands-ID. main.c Da passiert folgendes, sofern nicht im Power-Save - LCD-Ausgabe, wenn Text ansteht - Tasten einlesen - Zum Zustand gehörige Funktion ausführen, wenn Funktionszeiger vorhanden - Wenn Taste gedrückt: Die Funktion statemachine sucht anhand der aktuellen Zustands-ID und des Ereignisses die nächste Zustands-ID aus dem Array nextstate - Wenn Zustandswechsel ansteht, Menütextzeiger und Funktionszeiger aktualisieren. Ok, damit lassen sich über ein Menü Funktionen aufrufen - aber wie geht es weiter? Blockieren diese Funktionen dann alles andere und kehren erst nach Beendigung zur state-machine zurück? Dann müssten alle anderen Funktionen, die "parallel" ablaufen, ja ausschließlich in ISRs stehen?