C Control Pro application board Mega 128 198258 User Manual

Product codes
198258
Page of 200
159
Compiler
© 2005 Conrad Electronic
Zeichen von der seriellen Schnittstelle ankommt, kann in Ausnahmefällen ein Zyklus sehr lange
dauern.
Ein Thread bekommt für seine lokalen Variablen soviel Platz wie ihm in den 
 des
Projekts zugewiesen wird. Eine Ausnahme ist Thread "
0
" (das Hauptprogramm). Dieser Thread
erhält den restlichen Speicherplatz, den die anderen Threads übrig lassen. Man sollte daher
vorher planen, wie viel Speicherplatz jeder zusätzliche Thread wirklich benötigt.
 Damit zusätzliche Threads gestartet werden können muß "Multithreading" in den
 benutzen. Wird trotzdem
z.B. ein AbsDelay(1000) benutzt, so tritt folgender Effekt auf: Da der Thread erst nach 5000 Zyklen
(Default Wert) zum nächsten Thread wechselt, würde der Thread 5000 * 1000ms (5000 Sek.)
laufen, bis der nächste Thread anfangen könnte zu arbeiten.
Thread Synchronisation
Manchmal ist es nötig, daß ein Thread auf den anderen wartet. Dies kann z.B., eine gemeinsame
Hardwareresource sein, die nur ein Thread bearbeiten kann. Oder manchmal definiert man
kritische Programmbereiche, die nur ein Thread betreten darf. Diese Funktionen werden durch die
Anweisungen 
 realisiert.
Ein Thread, der warten soll, führt die Anweisung Thread_Wait mit einer Signal Nummer aus. Der
Zustand des Threads wird auf wartend gesetzt. Dies bedeutet, daß dieser Thread bei einem
möglichen Threadwechsel übergangen wird. Hat der andere Thread seine kritische Arbeit beendet,
gibt er den Befehl Thread_Signal mit der gleichen Signalnummer, die der andere Thread für
Thread_Wait benutzt hat. Der Threadzustand des wartenden Threads wechselt dann von wartend
zu inaktiv. Jetzt wird er bei einem möglichen Threadwechsel wieder berücksichtigt.
Deadlocks
Thread mehr, der die anderen Threads aus dem wartenden Zustand befreien könnte. Diese
Konstellationen sind bei der Programmierung zu vermeiden.
Tabelle Threadzustände:
Zustand
Bedeutung
aktiv
Der Thread wird momentan abgearbeitet
inaktiv
Kann nach einem Threadwechsel wieder
aktiviert werden
schlafend
Wird nach einer Anzahl von Ticks wieder auf
"inaktiv" gesetzt
wartend
Der Thread wartet auf ein Signal