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 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