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 André! > > Habe mittlerweile meinen Programmcode aufgeräumt. > Mit ist jetzt klar, dass ich bei vielen Standardmodulen kein zusätzliches capture und release einbauen > darf. > > Das Programm funktioniert jetzt auch soweit. > > Danke! > > mfg > > Peter Schmidthaler > > > Hallo Peter, > > > > > Kann mir jemand bei meinem Miniprogramm helfen. > > > unter http://www.jvpstmarien.at/steuerung/index.htm und dann den File threads.zip > > > stehen die Daten. > > > > Dieses kleine Proggie hättest Du auch ohne weiteres posten können. ;-) > > Dann mach ich das: > > <code>byte flag; > > > > thread a > > { > > capture flag; > > data.x = 65; > > lcd.clear(); > > lcd.goto(0,0); > > lcd.put(data.x); > > sleep 2000; > > release; > > > > } > > > > thread b > > { > > capture flag; > > lcd.clear(); > > data.x = 66; > > lcd.goto(0,0); > > lcd.put(data.x); > > sleep 2000; > > release; > > }</code> > > > > > Das ganze soll ein Testaufbau sein, da ich in einem komplexeren Programm Schwierigkeiten habe und > > > deshalb das ganz einmal mit einem Miniprogramm testen will. > > > > > > Das Programm soll abwechselnd A und B am LCD der Unit ausgeben. > > > > > > ACHTUNG: Ich will unbedingt Capture und Release verwenden, da ich diese Befehle wahrscheinlich bei > > > meinem anderen Programm brauche und ich bis jetzt noch nicht damit zu recht komme. > > > > Dein Testprogramm kann so nicht funktionieren, wie Du es willst. > > Es wird hier immer nur ein Thread laufen und der andere ewig auf die Freigabe warten. > > In Deinem Fall wäre das thread a, da dieser zuerst gestartet wurde. > > Um kurz zu erklären, was hier passiert: > > Thread a läuft an und setzt das Capture. > > Thread b wird auch gestartet, aber wartet bei <code>capture flag;</code>, da > > das Flag bereits von Thread a besetzt ist. > > Thread a wird komplett durchlaufen bis zum <code>sleep 1000;</code>. > > Hier wird die Rechenzeit solange abgegeben, bis die 2000ms vorbei sind. > > Thread b wartet prüft inzwischen bei jeder Rechenzeitzuteilung, ob das Flag > > wieder frei ist, gibt aber die Rechenzeit gleich wieder ab, da das Flag noch von Thread a > > besetzt wird. > > Nun sind die 2000ms um, und Thread a kommt zum <code>release;</code> und anschließend > > gleich wieder zum <code>capture flag;</code> am Anfang. > > Da es unmittelbar vor dem Release durch das Sleep zu einem Threadwechsel kam, > > kann der Thread nach dem Sleep wieder 32 VM-Instruktionen ohne Unterbrechung durcharbeiten. > > <code>release;</code> ist eine, dann wären es noch 31. > > <code>capture flag;</code> wäre die zweite. <code>data.x=65</code> zusammen > > die dritte und vierte usw. > > Kurz: Solange es zu keinem Threadwechsel zwischen dem release und capture kommen kann, > > wird der zuerst gestartet Thread immer exklusiv laufen. > > Jetzt gibt es in diesem Beispiel drei Möglichkeiten: > > 1. Du setzt die Prio beider Threads auf 1. (<code>run 1;</code>) > > 2. Du baust nach dem <code>release;</code> ein <code>yield;</code>, um an dieser Stelle > > gezielt die Rechenzeit vorzeitig abzugeben. > > 3. Du baust noch etwas Programmcode nach dem Release oder vor dem Capture ein, sodaß > > dazwischen mindestens soviele VM-Instruktionen ausgeführt werden, wie es mit der Prio > > festgelegt ist. (Bei Standard-Prio wären das 32 VM-Instruktionen) > > > > MfG André H. > >
Dateianhang: (.gif, .png., .jpg, .zip, .rar)
max. 256kB
max. 256kB