Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - Zum C-Control-I-Forum - Zum C-Control-II-Forum

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
Ich nutze:
C-Control Pro Mega32
> > 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: