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 Norbert, > > Ich muß der richtigen Aussage von krassos noch etwas hinzufügen: > > Es gibt prinzipell zwei Arten von Captures: > 1. Das Systemeigene mit den Schlüsselworten <code>capture</code> und <code>release</code>. > Diese dürfen auf keinen Fall verschachtelt werden, da dies zu einem Deadlock führen würde. > 2. Die erweiterten Captures des Moduls cap.c2 und das I²C-Bus-Capture. > Diese funktionieren komplett unabhängig vom System-Capture und beeinflussen > es in keinster weise. > Es stehen somit insgesamt 18 Captures bereit. > 1x das Systemeigene > 1x das I²C-Bus-Capture > 16x vom Modul cap.c2 . > Man könnte somit insgesamt auf 18 Ebenen verschachtelt capturen. > Dabei muß nur folgendes beachtet werden. > Nur das Systemeigne Capture kann implizit und explizit verwendet werden. > Die anderen Captures sind alle explizit. > Im Extremfall kann mal also so ein Konstrukt schreiben: > <code> > capture flag; > wait i2c.Capture(); > wait cap.Capture(0); > wait cap.Capture(1); > wait cap.Capture(2); > wait cap.Capture(3); > wait cap.Capture(4); > wait cap.Capture(5); > wait cap.Capture(6); > wait cap.Capture(7); > wait cap.Capture(8); > wait cap.Capture(9); > wait cap.Capture(10); > wait cap.Capture(11); > wait cap.Capture(12); > wait cap.Capture(13); > wait cap.Capture(14); > wait cap.Capture(15); > cap.Release(15); > cap.Release(14); > cap.Release(13); > cap.Release(12); > cap.Release(11); > cap.Release(10); > cap.Release(9); > cap.Release(8); > cap.Release(7); > cap.Release(6); > cap.Release(5); > cap.Release(4); > cap.Release(3); > cap.Release(2); > cap.Release(1); > cap.Release(0); > i2c.stop(); //Das I²C-Capture wird mit I²C-Stop gelöst > release; > </code> > Die Reihenfolge ist nicht bindend. Es sollten aber die Captures, die zuletzt > gesetzt wurden, auch wieder zuerst gelöst werden. > > Wenn das ganze nicht so wäre, würde mein Modul cap.c2, > sowie das eigene I²C-Bus-Capture keinerlei Sinn machen. ;-) > > Zu einem Deadlock kommt es nur, wenn Du zwei <u>gleiche</u> Captures verschachtelst. > Als Beispiele: > <code> > capture flag1; > capture flag2; //<= deadlock > </code> > Aber auch: > <code> > wait i2c.Capture(); > wait i2c.Capture(); //<= deadlock > </code> > Oder: > <code> > wait cap.Capture(11); > wait cap.Capture(11); //<= deadlock > </code> > Es kann aber auch zu einem Deadlock kommen, wenn Du verschiedene Captures > verschachtelst, diese aber z.B. in anderer Reihenfolge wieder freigegeben werden, > als Sie gesetzt wurden: > <code>thread a > { ... > wait cap.Capture(4); > ... > wait cap.Capture(15); > .. > cap.Release(4); > cap.Release(15);// das hier selbst führt noch nicht zum Deadlock > ... > } > thread b > {... > wait cap.Capture(15); > ... > wait cap.Capture(4); > ... > cap.Release(15); > ... > cap.Release(4); > // Aber diese Kombination schon > ... > }</code> > Wenn thread b aber in der richtigen Reihenfolge die Captures wieder löst, ginge es wieder: > <code>thread b > {... > wait cap.Capture(4); > ... > wait cap.Capture(15); > ... > cap.Release(15); > ... > cap.Release(4); > ... > }</code> > > Allerdings kann man die Captures von cap.c2 und das I²C-Bus-Capture "per Hand" wieder lösen: > Dazu kann man beim I²C-Bus-Capture einfach aus einem anderem > (nicht wartenden ;-) ) Thread <code>i2c.stop()</code> aufrufen. > Bei Captures von cap.c2 geht das genauso mit <code>cap.Release()</code>. > > Ich würde sagen, schreibe Dir ein paar kleine Testprogramme und experimentiere ein wenig. ;-) > > MfG André H.
Dateianhang: (.gif, .png., .jpg, .zip, .rar)
max. 256kB
max. 256kB