64Bit Linux

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
Rising_Edge
Posts: 8
Joined: Wed Dec 16, 2009 11:03 pm

64Bit Linux

Post by Rising_Edge »

Hallo ,

Hat jemand iowkit unter einen 64Bit Linux laufen.
Ich habe mir mal die Größen der Datentypen angeschaut, da IowKitWrite auf PIPE IO Pins nie 5Byte ergeben hatte sondern immer 9 Byte. Obwohl Reportsize ja eingentlich 5Byte sein soll, das kann also niemals wirklich gehen.Zumindes bei mir nicht.
Hier mal die Datentypengrößen bei mir auf dem Rechner :

Code: Select all

Size of Boolean type is 1 byte(s)

Number of bits in a character: 8
Size of character types is 1 byte
Signed char min: -128 max: 127
Unsigned char min: 0 max: 255
Default char is signed

Size of short int types is 2 bytes
Signed short min: -32768 max: 32767
Unsigned short min: 0 max: 65535

Size of int types is 4 bytes
Signed int min: -2147483648 max: 2147483647
Unsigned int min: 0 max: 4294967295

Size of long int types is 8 bytes
Signed long min: -9223372036854775808 max: 9223372036854775807
Unsigned long min: 0 max: 18446744073709551615

Size of long long types is 8 bytes
Signed long long min: -9223372036854775808 max: 9223372036854775807
Unsigned long long min: 0 max: 18446744073709551615
Gruß

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

Re: 64Bit Linux

Post by Guido Körber »

int ist die Datentype mit der man sich in den Fuß schießt, die Länge ist definiert als das Datenwort des verwendeten Prozessors (bei x86 würde ich da gehässig 8 Bit sagen). Damit hängt die tatsächliche Länge halt vom Compiler ab. Long wäre die richtige Type.
friend-of-rq
Posts: 389
Joined: Sun Feb 13, 2005 1:22 pm
Location: Gerblingerode / Duderstadt
Contact:

Re: 64Bit Linux

Post by friend-of-rq »

hallo Rising_Edge,
ich gehe von einem IOW-40 aus (PIPE IO Pins nie 5Byte)
bitte dazu schreiben :-)

Code: Select all

         Pipe(0)    Pipe(1)
IOW-24 = 3 Byte     8 Byte
IOW-40 = 5 Byte     8 Byte
IOW-56 = 8 Byte     64 Byte
ein Byte ist ein Byte = 8Bit ... sollte auch bei Linus Torvalds so sein ?!

Word = 16 Bit
dword = 32 Bit
qword = 64 Bit
dqword = 128 Bit oder oword = 128
Long wäre die richtige Type.
???
verstehe ich nicht ? werden die Bytes in Linux in einer Zahl übertragen ? nicht in einer Feld variabel ... Byte(x)
Guido Körber
Site Admin
Posts: 2879
Joined: Tue Nov 25, 2003 10:25 pm
Location: Germany/Berlin
Contact:

Re: 64Bit Linux

Post by Guido Körber »

Sorry, habe wohl nicht genau gelesen, nur auf "int" reagiert, das ist jedenfalls eine Tyoe die man nicht verwenden sollte.

Richtig ist natürlich, dass die Reports Arrays mit Unsigned Chars sind.
Rising_Edge
Posts: 8
Joined: Wed Dec 16, 2009 11:03 pm

Re: 64Bit Linux

Post by Rising_Edge »

Hallo,

Ja es handel sich um einen IOW40.
So wie ich das mit long verstanden habe muss es mindestens 4Byte groß sein , kann aber Platformabhängig auch größer sein . (http://info.baeumle.com/c03.html)

In iowkit.h steht :

Code: Select all

typedef unsigned long          DWORD;

typedef struct _IOWKIT40_IO_REPORT
 {
  UCHAR ReportID;
  union
   {
    DWORD Value;
    BYTE Bytes[4];
   };
 }
  IOWKIT40_IO_REPORT, *PIOWKIT40_IO_REPORT;

#define IOWKIT40_IO_REPORT_SIZE sizeof(IOWKIT40_IO_REPORT)

IowKitWrite gibt 5 zurück , da hatte ich mich geirrt. Aber sizeof(IOWKIT40_IO_REPORT) ergibt bei mir auf den Rechner halt 9Byte , DWORD = long = Value 8Byte + 1 Byte report ID.

Code: Select all

IOWKIT40_IO_REPORT report;
ULONG res;
// Write IO pins of IO-Warrior 40
report.ReportID = 0;
report.Value = 0; // all LEDs *on*
res = IowKitWrite(ioHandle, IOW_PIPE_IO_PINS,
&report, IOWKIT40_IO_REPORT_SIZE);
if (res != IOWKIT40_IO_REPORT_SIZE)
{
// Didn't write, handle error
...
}
Das bedeutet so wie im Manual von IOWKit1.5 wird es bei mir nie funktionieren. Zumindest wird die Überprüfung ob der Report gesendet wurde, nicht funktionieren.

Gruß

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

Re: 64Bit Linux

Post by Guido Körber »

Nein, die typedef für den Report ist völlig falsch, der Report muss als Array of Unsigned Char angelegt werden.

Es geht da nicht nur die Abfrage nach dem Senden der Daten fehl, selbst wenn dieser 9 Byte Report beim IO-Warrior ankommen sollte, wird dieser ihn einfach nur ignorieren.
Rising_Edge
Posts: 8
Joined: Wed Dec 16, 2009 11:03 pm

Re: 64Bit Linux

Post by Rising_Edge »

Hallo,

Naja sage ich doch das da mit dem was nicht stimmt. Aber der ist ja nicht meine Erfindung der ist aus der Headerdatei vom SDK.
Aber ignorieren tut er es nicht. Ich vergleiche einfach mit 5 und da geht das auch.
Post Reply