C Control PRO Unit Mega 128 198219 사용자 설명서

제품 코드
198219
다운로드
페이지 429
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:
#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 "
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.
   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 
 ignoriert.
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.
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 
 und 
 realisiert.
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.