Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - FAQ - Zum CC1-Forum - Zum CC-Pro-Forum

Wichtig: Bevor Du wegen einem Problem mit der CC2 postest, stelle sicher, daß Du
die neueste OS-Version, die neuseste Compiler-DLL und die neuesten Modulversionen benutzt!
Beachte, daß sich auf der CD zur CC2-Unit/Station auch jetzt noch die ältesten Dateien befinden!
Es gelten folgende Anleitung und Regeln: Regeln CC2Net.de-Forum
Zurück zum Artikel  (Blaue Felder sind Pflichtfelder)


Name:   UserID: 
 E-Mail:
Kategorie
Betreff
Homepage:
Link-Titel:
Link-URL:
Cookie für Name, UserID, E-Mail, Homepage-URL setzen
(Erspart die Neueingabe bei Beiträgen und Antworten)
(Zum Löschen des Cookies hier klicken)
Ich nutze:
C-Control II Unit
C164CI-Controllerboard
C-Control II Station
CCRP5 mit CC2-Unit (Conrad Roboter)
CC2-Application-Board
CC2-StarterBoard
CC2-ReglerBoard
eigenes Board
original OS     OSOPT_V2     OSOPT V3.0 OSOPT V3.1

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>
C2 Quellcode formatieren: <code>Quellcode</code>
ASM Quellcode formatieren: <asm>Quellcode</asm>
(Innerhalb eines Quellcodeabschnitts ist kein html möglich.)
Wichtig: Bitte mache Zeilenumbrüche, bevor Du am rechten Rand des Eingabefeldes ankommst !  

> Hallo Christian, > > Ich wusste, ich hatte vergessen jemanden zu Antworten. :-) > > > Wenn ich Dich richtig verstanden habe, bedeutet das run thread x > > nichts anderes, als das der thread x die Priorität 32 bekommt auch wenn er die schon hatte. > > Richtig. > > > In meinem Bsp. würde das bedeuten, der thread circilation_pump würde > > bei der wait-Bedingung stehen, wenn er durch die Schleife erneut aufgerufen würde > > und (wenn die wait-Bedingung noch immer zutrifft) sofort wieder verlassen. > > Auch richtig. > > > Ist vielleicht falsch ausgedrückt, er wird gar nicht aufgerufen wie eine Funktion, sondern > > er bekommt eine (ggf. neue) Priorität. Das war wohl mein falsches Verständnis von threads, > > sie können(sollten) nicht wie Funktionen behandelt werden, da sie einmal gestartet, > > in einer Endlsoschleife weiterlaufen. > > Korrekt. > Threads können aber durch das Schlüsselwort <i>reset;</i> zurückgesetzt werden. > (Prio wie zum Programmstart, ggf. Capture lösen) > > > Wenn ich das jetzt nicht falsch verstanden habe, > > dann kann ich meine threads, die ich in meinen loop´s der verschiedenen main-threads > > aufrufe, alle vor die loop-Schleife setzen, das sie ja eh in einer Endlosschleife laufen. > > Richtig. Threads müssen nur einmal gestartet werden.(nicht aufgerufen!) > Um einen Vergleich mit Windows zu machen: > Man kann dies mit dem Aufruf eines odere mehrerer Programme vergleichen. > Nur, wenn diese beendet wurden (hier mit reset). müssen diese neu gestartet werden. > > Natürlich gibt es noch <i>halt</i>. Hiermit "friert" man einen Thread ein.(vgl. run 0;) > Wird der Thread wieder gestartet, macht dieser an der Stelle weiter, wo er angehalten wurde. > Mit resume wird einem Thread die Prio vor der letzten Änderung mit run oder halt zugewiesen. > > > Ist für einen Insider sicherlich sonnenklar, aber wenn man aus anderen Programmiersprachen kommt, > > dann übersieht man halt leicht das Offensichtliche.(Asche über mein Haupt). > > Multithreading ist eben etwas gewöhnungsbedürftig. :-) > > > Auf mein Bsp. übertragen: das erneute Aufrufen bewirkt gar nichts, außer dem Aufwand dem thread > > circulation_pump erneut die Priorität 32 zuzuweisen. > > Korrekt. > > > Aber das ist doch sicherlich eine ganze Menge weniger, als die <b>Funktion</b> > > circulation_pump zu durchlaufen ?????? > > Theoretisch ja, praktisch nein. > Das Threadhandling, das im hintergrund im OS abläuft, benötigt einiges an Rechenzeit. > Das heißt, je mehr Threads es gibt, desto mehr Rechenzeit wird für das Threadhandling > benötigt, desto langsamer wird die CC2. > Darum: Nur so viele Threads wie nötig ! > Darum lieber mehr mit if-Abragen arbeiten und diese kurz halten.(Einzeiler) > > > Mir gefällt das mit den threads, weil ich -anders wie bei der CC1- nicht den ganzen Programmfluß > > stoppe, wenn eine wait-Bedingung nicht erfüllt ist. Viele Dinge mit wait zu lösen ist einfacher, als ein > > "Pumpen" von Komponenten durch viele Variablen zu verhindern oder permanent Überwachungsfunktionen > > aufzurufen. > > Bsp.: Untere Temp-Grenze erreicht-> Kessel einschalten > >          wait bis obere Grenze erreicht ist > >          obere Temp-Grenze erreicht-> Kessel ausschalten > > das ging halt mit der CC1 nicht so. > > Nachdem ich das nun (hoffentlich) alles richtig verstanden habe, werde ich wohl in meinem Programm > > etliche Funktionen durch threads ersetzen(es gibt eine Menge Schleifen, wo gewartet werden muss, dass > > nach Stunden oder Tagen eine Änderung eintritt). > > Arbeite lieber weiter überwiegend mit Funktionen, sonst wird die CC2 irgendwan sehr langsam. > Eigene Threads nur dort, wo es sinnvoll ist. > > Für die gesamte Regelung selbst benutze ich z.B. nur 3 Threads. > Ich habe nur den Mischer-Kreisen je einen eigenen Thread gegönnt. > Aber die Hauptregelung läuft in <u>einem</u> eigenem Thread ab. > Dazu habe ich noch einen Thread der die COM an hwcom übernimmt, > einen weiteren für mein Touch-Bedieneinheit an swcom für das gesamte > Menü, die Eingaben und System-Anzeigen. > Dann noch einen Thread für mehrere Terminals(Display+Tastatur) im Haus am I²C-Bus. > Ein geplanter Thread für I2CCOM, um die Regelung über I²C-Bus an meinen > lokalen Server zu binden. > Dann noch die im Hintergrund laufenden Threads für den AD-Multiplexer > und den Uhrenbaustein des CC2-ReglerBoards. > > Somit komme ich schon auf 9 Threads. > Wenn Du jetzt jede Funktion in einen Thread packts, kommst Du schnell an die > Grenze von 254 Threads. > > MfG André H.
Dateianhang: (.gif, .png., .jpg, .zip, .rar)
max. 256kB
max. 256kB