Kommentar: Einfügen von HTML im Kommentar: Link einfügen: <a href="LINKURL" target="_blank">LINKTITEL</a> Bild einfügen: <img src="BILDURL"> Text formatieren: <b>fetter Text</b> <i>kursiver Text</i> <u>unterstrichener Text</u> Kombinationen sind auch möglich z.B.: <b><i>fetter & kursiver Text</i></b> C Quellcode formatieren: <code>Quellcode</code> BASIC Quellcode formatieren: <basic>Quellcode</basic> (Innerhalb eines Quellcodeabschnitts ist kein html möglich.) Wichtig: Bitte mache Zeilenumbrüche, bevor Du am rechten Rand des Eingabefeldes ankommst ! -> I > > > 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 > > > > > <basic>Quellcode</basic> > > > '******************************************************************************* > > > #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 > > > '*******************************************************************************