Ähm, wirkliches Multithreading gibts sowieso nicht, und ich denk nicht,
dass sich Linux auf nen AVR portieren lässt - dafür ists doch etwas zu
aufwendig.
Die einfache Methode: kooperatives Multitasking
void main()
{
while (1)
{
tastaturAbfragen();
dauerauftrag();
};
}
Die beiden Funktionen geben einfach nach einer gewissen Zeit wieder
zurück (d.h. tastaturAbfragen() fragt ab, ob sich grad was tut, wenn
nicht, dann beendet sich die Funktion, dann kann dein dauerauftrag() was
machen, wonach er sich wieder beendet, tastaturAbfragen() kommt wieder
dran usw...
Es gibt Betriebssysteme für uCs (zB RTX oder so ähnlich), die sind aber
meistens ein Overkill und auf nem AVR denk ich ist das echt nicht
norwendig, der Overhead wär viel zu groß. Du kannst es aber natürlich
auch per Hand ausprogrammieren:
1. Timer stellen
2. Thread1 (=Funktion) starten
3. Wenn Timer überläuft, Stack, Register usw von Thread1 sichern
4. Timer wieder starten
5. Thread2 starten
6. Wieder auf Timerüberlauf warten, dann Register usw von Thread2
speicher, und die von Thread1 wiederherstellen
usw
Ist aber etwas aufwendig und wie gesagt meistens nicht erforderlich.