C Control PRO Unit Mega 128 198219 사용자 설명서
제품 코드
198219
361
C-Control Pro IDE
© 2013 Conrad Electronic
Thread Konfiguration
Vor IDE Version 2.12 die Konfiguration der Threads wurde in den Projekt Optionen eingestellt. Dies
hat sich geändert. Jetzt wird die Konfiguration der threads mit Hilfe des neues "#thread" Befehls im
Source Code vorgenommen:
hat sich geändert. Jetzt wird die Konfiguration der threads mit Hilfe des neues "#thread" Befehls im
Source Code vorgenommen:
#thread thread_nummer, benutztes_ram, anzahl_zeit_zyklen
Ein Thread bekommt für seine lokalen Variablen soviel Platz wie ihm mit #thread zugewiesen wird.
Eine Ausnahme ist Thread "
Eine Ausnahme ist Thread "
0
" (das Hauptprogramm). Dieser Thread erhält den restlichen Speicher-
platz, den die anderen Threads übrig lassen. Eine RAM Zuweisung mit "#thread 0" für das Haupt-
programm wird daher ignoriert. Man sollte daher vorher planen, wie viel Speicherplatz jeder zusätzli-
che Thread wirklich benötigt.
programm wird daher ignoriert. Man sollte daher vorher planen, wie viel Speicherplatz jeder zusätzli-
che Thread wirklich benötigt.
Die "#thread" Anweisungen müssen nicht bei den Thread Funktionen sein, sondern dürfen
überall im Programm stehen. Benutzt man keine Threads, so ist ein "#thread 0" Befehl unnötig.
Vergisst man einen Thread zu definieren, so wird das
Vergisst man einen Thread zu definieren, so wird das
Beispiel CompactC:
#thread
0
,
0
,
20
// Hauptthread mit Task Wechsel alle 20 * 10ms =200ms
#thread
1
,
128
,
10
// Thread 1 mit 128 byte & Task Wechsel 10*10ms =100ms
#thread
2
,
256
,
10
// Thread 2 mit 256 byte & Task Wechsel 10*10ms =100ms
Beispiel BASIC (Syntax identisch zu CompactC):
#thread
0
,
0
,
20
' Hauptthread mit Task Wechsel alle 20 * 10ms =200ms
#thread
1
,
128
,
10
' Thread 1 mit 128 byte & Task Wechsel 10*10ms =100ms
#thread
2
,
256
,
10
' Thread 2 mit 256 byte & Task Wechsel 10*10ms =100ms
Da z.B.
wartet, bis ein Zeichen von der seriellen Schnittstelle ankommt, kann es
passieren, das der Thread länger als die ihm zugewiesenen Zeitzyklen arbeitet.
Beim arbeiten mit Threads sollte man immer
und nicht
benutzen. Wird
trotzdem z.B. ein AbsDelay(1000) aufgerufen, so wartet der Thread 1000ms, auch wenn ihm weniger
Zeit zugewiesen wurde.
Zeit zugewiesen wurde.
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 Anweisun-
gen
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 Anweisun-
gen
und
Ein Thread, der warten soll, führt die Anweisung Thread_Wait mit einer Signal Nummer aus. Der Zu-
stand 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 inak tiv. Jetzt wird er
bei einem möglichen Threadwechsel wieder berücksichtigt.
stand 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 inak tiv. Jetzt wird er
bei einem möglichen Threadwechsel wieder berücksichtigt.