IowKitReadNonBlocking in for Schleife

Dies ist das deutsche Forum für alle Themen um den IO-Warrior. Beiträge bitte nur in Deutsch.

Moderator: Guido Körber

Post Reply
MagicMaster
Posts: 14
Joined: Thu Feb 07, 2008 4:57 pm

IowKitReadNonBlocking in for Schleife

Post by MagicMaster »

Hallo zusammen,

zurzeit programmiere ich eine Formular Anwendung mit Borland C++ Builder.
Soweit funktioniert auch alles, lediglich mit IowKitReadNonBlocking habe ich ein Problem.

Der Befehl IowKitReadNonBlocking soll in einer Schleife 8x mal hintereiander ausgeführt werden. Das kompilieren und Linken klappt nur wenn ich dann den entsprechenden Button drücke um die Schleife zu starten. Bekomme ich folgende Fehlermeldung:

Image

Benutze ich hingegen den Read Befehl bekomme ich diese Fehlermeldung nicht...Leider erfüllt das Programm nicht die gewünschte Aktion.
Das komische ist, das die Schleife in einer normalen Konsolenanwendung anstandslos geschluckt wird.

Hoffe ihr könnt mir helfen...Bin mit meinen Nerven am Ende.
User avatar
Christoph Jung
Posts: 673
Joined: Sun Oct 08, 2006 3:43 pm
Location: Germany / Berlin
Contact:

Post by Christoph Jung »

Ohne ein wenig Quelcode der Schleife lässt sich schwer sagen, was der Fehler ist. Bitte mal die Schleife hier (mit Tag-Option) posten.
Software developer
MagicMaster
Posts: 14
Joined: Thu Feb 07, 2008 4:57 pm

Post by MagicMaster »

Ohhh...sry hab ich ganz vergessen hier anzuhängen.

Code: Select all

// Q8 High setzen

					IowBytes[0] = 2;
					IowWrite(IowHandle, IowBytes);


					//Einmaliges P/S ausführen

					IowBytes[1] = 2;
					IowWrite(IowHandle, IowBytes);
					IowBytes[1] = 0;
					IowWrite(IowHandle, IowBytes);

					//Ersten Zustand auslesen
                                        //Um diese Schleife handelt es sich


					for(int c=0; c<=8; c++)
					  {
					   IowKitRead(IowHandle, IOW_PIPE_IO_PINS, (PCHAR) &IowReport, IOWKIT24_IO_REPORT_SIZE);
					  }

					IowKitRead(IowHandle, IOW_PIPE_IO_PINS, (PCHAR) &IowReport, IOWKIT24_IO_REPORT_SIZE);
                                  
                    
                     if (IowReport.Bytes[0] == 2)
                      {                      
						CheckBox16->Checked = true;
						eingang[0] = 1;
                      }
                      else
					  {
						CheckBox16->Checked = false;
                        eingang[0] = 0;   
                      } 
Das ist der zugehörige Code, der auf Button Click ausgeführt wird.

Mfg
Alibaba258
MagicMaster
Posts: 14
Joined: Thu Feb 07, 2008 4:57 pm

Post by MagicMaster »

Also mir ist jetzt noch aufgefallen, das auch ein einzlnes IowKitReadNonBlocking den selben Fehler erzeugt.

Hoffe ihr könnt mir da weiterhelfen.

Mfg
wayoda
Posts: 362
Joined: Fri Dec 19, 2003 12:00 pm
Location: Wuppertal/Germany

Post by wayoda »

Hallo,
mal so ins dunkle geraten ...

Es gibt eine IowKit-Lib Version 1.4 ohne die Funktion ReadNonBlocking und eine Version 1.5 mit der Funktion ReadNonBlocking.

Und weil es nun mal Windows ist, tragen beide den Namen IOWKIT.DLL.

Ist nun vielleicht nur Version 1.4 installiert, oder gibt es Reste einer alten installation die im Suchpfad der DLL's zufällig früher gefunden wird.

Am besten läßt Du das ganze System mal nach Kopien von IOWKIT.DLL durchsuchen.

Eberhard
MagicMaster
Posts: 14
Joined: Thu Feb 07, 2008 4:57 pm

Post by MagicMaster »

Ich danke dir schon mal für deinen Tipp.

Ich hab gerade mal alles durchsucht, jedoch ist alles die Version 1.5. Das blöde ist ja, das der Befehl in einer Konsolenanwendung problemlos funktioniert. Ledigleich bei einer Formular anwendung gibt es da Probleme.

Ich hab das ganze auch schon auf verschiedenen PCs probiert....Leider ohne Erfolg.


Mfg
friend-of-rq
Posts: 389
Joined: Sun Feb 13, 2005 1:22 pm
Location: Gerblingerode / Duderstadt
Contact:

Post by friend-of-rq »

Hallo Magic,
welche Pipe verwendet dein IowWrite()
(0) Setzen der Ports
(1) Ansprechen der Functionen

Code: Select all

IowBytes[0] = 2;
IowWrite(IowHandle, IowBytes); 
Du setzt IowBytes[0] auf 2 ... bei Pipe_0 muss das aber 0 sein
und bei Pipe_1 würdest Du die I2C-Function(Senden) ansprechen ohne definierte Werte (Flag/Data)

Code: Select all

BEISPIELE:     Werte an den PORTS ändern über PIPE_0
--------------------------------------------------------------------------------------------
Buffer mit Werte füllen um die Ports am IOW(24) zu ändern
DAT(0) = 0        muss Null sein
DAT(1) = 0-255    port 0
DAT(2) = 0-255    port 1
n = IowKitWrite( IODH , 0, dat(0) , 3 )   ... wenn OK dann N=3
Danach erzeugst Du einen Takt / Ausloser an Port_0.1 :

Code: Select all

IowBytes[1] = 2;
IowWrite(IowHandle, IowBytes);
IowBytes[1] = 0;
IowWrite(IowHandle, IowBytes);
... denn unter I2c würde das kein sinn machen ...
aber warum versuchst Du den Buffer ersmal 8 mal zu lesen , woher weist Du denn wieviel Reports vorhanden sind ?

Code: Select all

for(int c=0; c<=8; c++)
	{
	IowKitRead(IowHandle, IOW_PIPE_IO_PINS, (PCHAR) &IowReport, IOWKIT24_IO_REPORT_SIZE);
	}  
um Ihn dann ein neuntes mal zu lesen um dann den eigelesenen Wert auszuwerten, ob dieser von der I2C-Funktion kommt:

Code: Select all

IowKitRead(IowHandle, IOW_PIPE_IO_PINS, (PCHAR) &IowReport, IOWKIT24_IO_REPORT_SIZE);
if (IowReport.Bytes[0] == 2)
	{                     
	CheckBox16->Checked = true;
	eingang[0] = 1;
	}
else
	{
	CheckBox16->Checked = false;
	eingang[0] = 0;   
	}
denn beim einlesen gibt data(0) an von welcher Quelle die Daten stammen:

Code: Select all

0   = ( z.B. nach TimeOut bei IowKitRead )
2   = I2C
3   = I2C
6   = LCD
9   = SPI
12  = RC5
25  = switch Matrix
26  = switch Matrix
255 = Ports
oder liege ich total daneben , beim lesen deines Codes ?!
was willst Du denn überhaupt machen ?
MagicMaster
Posts: 14
Joined: Thu Feb 07, 2008 4:57 pm

Post by MagicMaster »

Also im Grunde wird ein 8Bit Schieberegister(Eingang) eingelesen. Die Daten werden parallel eingelesen und seriell ausgegeben.

Deswegen die Abfrage des Ports. Die 8mal IowKitReadNonBlocking mache ich deshalb, da sonst die Abfrage in meinem Konsolenprogramm falsch war....Erst mit diesen 8 Lesevorgängen ging es einwandfrei.

Mfg
Guido Körber
Site Admin
Posts: 2876
Joined: Tue Nov 25, 2003 10:25 pm
Location: Germany/Berlin
Contact:

Post by Guido Körber »

Wenn ein Schieberegister ausgelesen werden soll, bietet sich dann nicht an die SPI Funktion dafür einzuspannen?
Post Reply