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 Lorenz, > > Grundlagen C2: > Funktionen können nur Werte und Variablen bzw. Referenzen auf Variablen(Arrays) > übergeben werden. > Ein Thread ist keines davon. Deshalb kann dies auch nicht übergeben werden. > > Nun zum Problem: > Die Schlüsselworte zur Threadkontrolle erwarten die Threadnummer als Konstante. > D.h. diese wird einkompiliert. (siehe vmcodes.c2) > Wenn man mit run, halt, resume, reset arbeitet führt daran kein Weg vorbei. > Es gibt zwei Möglichkeiten: > 1. Du baust Dir eine Weiche. > Mit If-Anweisungen wählst Du die entsprechenden Threads aus. > 2. Du arbeitest mit einem kleinem Trick. > Ich hatte im Zusammenhang mit einem anderem Problem vor langer Zeit eine direktere > Möglichkeit der Thread-Kontrolle aufgezeigt: > <a href="lesen.php?eintrag=14514">Re: Funktions/Thread-Definitionen</a> vom 11.05.2008 > Einziger Nachteil: Du mußt die Thread-ID in Erfahrung bringen. Ändert sich die Reihenfolge > der Threads, anderen sich auch die IDs. Diese werden von Oben nach unten > bei 1 beginnend zugewiesen. Der Mainthread (der unterste) hat die höchste ID. > Sinnvoll ist es, wenn die Threads Ihre IDs selbst verraten. Dazu müssen alle Threads > bei Programmstart kurz anlaufen. > > z.B.: > <code> > byte ThreadID[32]; Array für bis zu 32 Threads > const Thread_irgendwas=1; > const Thread_wasanderes=2; // Der Index hat nichts mit der ID zu tun > //dies Dient nur zu leichteren Verwendung. Man kann die IDs natürlich > //auch in einzelne Bytevariablen speichern. > > thread irgendwas > { > ThreadID[Thread_irgendetwas]=TID(); > halt;// Wichtig, wenn der Thread nicht sofort weiterlaufen soll. > // Kann entfallen, wenn die ThreadID erst nach dem ersten vorgesehenem run benötigt wird. > loop // Eigentlicher Threadinhalt > { > //... > } > } > > thread irgendwas > { > ThreadID[Thread_wasanderes]=TID(); > halt; > loop // Eigentlicher Threadinhalt > { > //... > } > } > </code> > > Die Threads können dann mit setPrio() beinflußt werden. > Eine Priorität von 0 heißt, daß der Thread steht. > 1 bis 255 heißt, er soll mit der entsprechenden Prio laufen. > > Bei dieser Lösung kann weiterhin parallel mit den Schlüsselworten gearbeitet werden. > Der Vorteil dieser Lösung ist, daß man nicht den Einschränkungen des Single-Pass-Compilers > unterliegt, sondern auch ein weiter oben stehender Thread auch einen weiter unten steuern kann. > > MfG André H. > > > > > > Hallo, > > ich möchte gern wissen ob man meinen Code kürzer schreiben kann. > > Dieser wäre der untenstehende Code und zwar 5 mal hintereinander geschrieben, > > nur dass menu.Ladepumpe_tog durch eine andere Variablen ersetzt wird und dass > > der thread ladepumpe.Pumpe durch andere threads gestartet und gehalten wird. > > > > <code> > > thread auto > > { > > > > byte x[5]; > > > > > > loop > > { > > if menu.Ladepumpe_tog != 0 > > { > > x[2] = 1 ; > > if menu.Ladepumpe_tog == 1 > > { > > if stports.get(10) == 0 > > { > > halt ladepumpe.Pumpe; > > > > stports.set(10,-1) ; > > } > > > > } > > else > > { > > if stports.get(10) != 0 > > { > > halt ladepumpe.Pumpe; > > stports.set(10,0); > > } > > > > } > > } > > else > > { > > if x[2] == 1 > > { > > run ladepumpe.Pumpe; > > sleep 1000; > > } > > x[2] = 0; > > } > > sleep 1000; > > } > > > > } > > </code> > > > > Ich habe es vesucht so zu lösen wie in diesem Beispiel, aber es hat nicht funktioniert: > > > > <code> > > function update(var myvar, thread mythread) > > { > > ... > > } > > > > function auto() > > { > > function update(var1, thread1); > > function update(var2, thread2); > > function update(var3, thread3); > > }</code> > > > > MfG > > Lorenz
Dateianhang: (.gif, .png., .jpg, .zip, .rar)
max. 256kB
max. 256kB