Forum: Mikrocontroller und Digitale Elektronik avr + multithreading?


von Korbinian (Gast)


Lesenswert?

Gibts eigentlich ne möglichkeit nen avr mit multithreading zu betreiben? 
ich denk da z.b. an tastaturabfrage + irgend n dauerauftrag + paralele 
interuptverarbeitung.
müsst ich da dieses linux für microcontroller nehmen?

von Rainer (Gast)


Lesenswert?

Ä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.

von Andreas S. (andreas) (Admin) Benutzerseite


Lesenswert?


von Oli Streisand (Gast)


Lesenswert?

Hallo,

such doch mal nach AVRX das ist ein preemptives Multitasking für AVRs 
und man kann seine Tasks sogar in assembler und in (gcc) c 
programmieren.

Gruß Oli

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.