Ein paar Anmerkungen: Das Display für die Biene hat einen eigenen AVR, der vom Haupt-AVR per I2C angesteuert wird. Kostet auch nur 10 Euro mehr
Ja, ISRs haben ihre eigene Umgebung, bzw. speichern die die Register, die sie brauchen, auf den Stack, und räumen Stack und Register beim Verlassen wieder auf.
Zum Multitasking: Ja, da gibts verdammt viele Möglichkeiten
Mal die wichtigsten:
* man versucht alles in einer while() reinzustopfen - nunja, nicht die eleganteste Variante^^ Ob man das Multitasking nennen will ist eine andere Frage
* mehrere parallel laufende Zustandsautomaten: Die Funktionen (~einzelne Tasks) werden regelmäßig vom TimerISR aufgerufen, diese machen nur eine Kleinigkeit, speichern den Zustand und returnen sofort. Kooperatives Multitasking ist genau das.
* preemptives Multitasking: Den Tasks werden vom Scheduler die Kontrolle übergeben und auch wieder entzogen. Die Tasks "merken" davon nichts, dafür muss der Schduler den Status der einzelnen Tasks vewalten, man muss darauf achten, dass kritische Sequenzen nicht unterbrochen werden, Zugriff auf HW-Ressourcen und globaler Speicher muss synchronisiert werden etc. pp.
Für viele Sachen sollte die 2. Variante ausreichen
Man kann auch die Kombination aus 1. und 2. Variante machen: ein Haupttask, dem über die vom TimerISR kontrollierten Zustandsautomaten zugearbeitet wird.
Man sollte auch Multitasking (im "normalen" Sinne bei "großen" Betriebssystemen und wie es die Wikipedia hat) und Multithreading außeinander halten. Beim Multitasking sind die Prozesse strikter voneinander getrennt, z.B. haben die einen eigenen Adressraum. Beim Multithreading sind die einzelnen Threads im selben Adressraum, können sich also z.B. auch direkt gegenseitig beeinflussen. Auf den Mikrocontroller macht man fast immer Multithreading, schon alleine weil die Mikrocontroller keine MMU (Speicherverwaltungseinheit, die für die verschiedenen logischen Adressbereichen sorgen kann) haben.