Re: Threads Kategorie: Programmierung Basic (von Dirk Dahlmanns - 8.02.2011 18:52) | ||
Als Antwort auf Re: Threads von PeterS - 8.02.2011 8:42 | ||
| ||
> > Hallo, > > > > mit dem nachfolgedem Programm habe ich versucht, die Funktion der Threads zu verstehen. > > Ich verwende die C-Control Pro IDE 2.12.0.10 und das Projectboard mit der Mega32 Unit. > > > > Wenn man die Parameter bei thread 0 nicht angibt, wird die zeit von thread 2 nicht eingehalten. > > > > Gibt man die Parameter für thread 0 an (siehe unten im Prog.) erhält man für Port D7 ein Signal -> > > mit einer frequenz von 20ms (50Hz). Sollte aber schneller laufen. > > > > Ich gehe davon aus, dass es keinen Sinn macht den 3. Parameter der #thread Anweisung kleiner -> > > anzugeben als die "Thread_Delay-Zeit" innerhalb der Threadprozedur. > > > > Auch die Zuweisung des 2 Parameters von #thread 0 (128) wirkt sich auf die Ausführung von thread2 -> > > aus. > > > > Weiterhin scheint es keinen Unterschied zu geben ob man Thread_Delay(0) oder Thread_Delay(1) angibt. > > > > Wird kein Thread_Delay angegeben, erhält man ein unsauberes Signal. (Threadwechsel erkennbar) > > > > Aus den Versuchen stellen sich folgende Fragen: > > > > -Wie schnell kann ein Thread maximal ausgeführt werden? > > -Muss man den #thread 0 mit viel Speicher (Parameter 2) und kleinstmöglicher Taskwechselzeit -> > > parametrieren, um sicher zu stellen, dass die anderen Threads sicher ausgeführt werden? > > -Ist es Sinvoll die Taskwechselzeit(Parameter 3) mit der Thread_Delay-Zeit gleich zu halten? > > -Gibt es sinnvolle Parametergrenzen, die man einhalten bzw. beachten muss? > > -Wird die maximale Ausführungsgeschwindigkeit eines Threads durch eine höhere Anzahl von Threads -> > > kleiner? (z.B. 10 Threads mit einer Taskwechselzeit von 10ms) > > > > Hi, > > dies ist die erste Version der IDE mit einem Zeitscheiben Threading, daher hatte mir noch > keiner in Erinnerung gerufen, in die Anleitung zu schreiben, das man möglichst nicht > an die Grenzen gehen soll. > > 1) Das Threading basiert auf einem 10ms Takt, und kann erst nach Vollenden des Bytecodes > den Thread wechseln. Bei langwierigen I/O oder floating point Operationen kann das bis zu > einigen ms dauern. Man kann daher keine Zeitschleifen damit machen, dafür genau genug sind > nur die Timerfunktionen. > > 2) Werte von null und eins sind grenzwertig und sollten vermieden werden. Ich würde im > Prinzip einen Wert von 10 = 100ms als Taskwechselzeit empfehlen. > > 3) Viel oder wenig Speicher macht vom Timing keinen Unterschied. Es ist egal wie nah > das Thread Delay() an der Threadwechselzeit liegt. > > 4) Klar wird die Ausführungsgeschwindigkeit bei mehr Threads kleiner, da sich ja alle > Threads den Prozessor teilen müssen. > > Der Interpreter hat nicht viel Platz, deshalb ist das Multithreading auch sehr einfach > gestrickt. Hat man eine sehr langsame I/O Operation (wie z.B. warten auf die serielle > Schnittstelle) kann es auch passieren, das ein Thread einmal keine Rechenzeit bekommt, > da der noch laufende Bytecode länger als die Threadwechselzeit des neu aktiven Threads > den Ablauf blockiert hat. > > Gruss Peter > > > Hallo Peter, > > vielen Dank für die Informationen. > Ich denke, ich habe verstanden, wie die Threads funktionieren und worauf ich zu achten habe. > > Gruss, Dirk > > > Quellcode > > '******************************************************************************* > > #thread 0,128,0 > > #thread 1,128,100 > > #thread 2,128,1 > > '******************************************************************************* > > Sub thread1() > > > > Do While True > > > > Port_ToggleBit(30) 'Port D6 (LED1) > > 'Port_ToggleBit(31) 'Port D7 (LED2) > > > > Thread_Delay(100) '100x10ms=1s > > > > End While > > > > End Sub > > '******************************************************************************* > > Sub thread2() > > > > Do While True > > > > 'Port_ToggleBit(30) 'Port D6 (LED1) > > Port_ToggleBit(31) 'Port D7 (LED2) > > > > Thread_Delay(1) '1x10ms=0.01s > > > > End While > > > > End Sub > > '******************************************************************************* > > Sub ini() > > > > Port_DataDirBit(PORT_LED1,PORT_OUT) 'Port D.6 > > Port_DataDirBit(PORT_LED2,PORT_OUT) 'Port D.7 > > > > End Sub > > '******************************************************************************* > > Sub main() > > > > ini() > > > > Thread_Start(1,thread1) > > Thread_Start(2,thread1) > > > > Do While(1) > > > > End While > > > > End Sub > > '******************************************************************************* | ||
Antwort schreiben Antworten: |
Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - Zum C-Control-I-Forum - Zum C-Control-II-Forum