IOW56: Programm-Absturz beim Aufruf von 'IowKitCloseDevice()'

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
H.S.
Posts: 5
Joined: Thu Aug 30, 2018 9:13 am
Contact:

IOW56: Programm-Absturz beim Aufruf von 'IowKitCloseDevice()'

Post by H.S. »

Hallo,

das Probleme ist aufgetreten, nachdem ich beide TO-Funktionen 'IowKitSetWriteTimeout()' und 'IowKitSetTimeout()' benutze.

Ich habe versucht, die Ursachen einzugrenzen und weiter unten einen Testcase angefügt, mit dem genau dieses Problem nachgestellt werden kann (?).
Er beschränkt sich auf wenige IowKit* Funktionsaufrufe. Die Sinnfälligkeit sei dahingestellt, es sollte trotzdem ohne den o.g. Absturz funktionieren. In der Original-Anwendung sind noch diverse I2C-Routinen enthalten, die bis jetzt problemlos funktionieren.
Beim Beenden der Anwendung stürzt sie beim IowKitCloseDevice()-Aufruf ab ("XY.exe funktioniert nicht mehr ... -> Programm schließen").

IOW: IOW56, FW version 2.0.0.1
OS: Windows 10 Enterprise, Vers. 1803
Prozessor: Intel i7-2640 @ 2.80GHz

Anbei der Testcase (ANSI C). Wenn man einen der mit *) markierten Aufrufe auskommentiert, gibt es keine Probleme.
Vielleicht kann mir jemand weiterhelfen?
--
#include <stdio.h>
#include "iowkit.h"

IOWKIT_HANDLE ioHandle;
USHORT buffer[9];

int main (int argc, char* argv[]) {

ioHandle = IowKitOpenDevice();
if (ioHandle != NULL) {
printf("firmware revision: 0x%04X\n", IowKitGetRevision(ioHandle)); // *)
IowKitGetSerialNumber(ioHandle, buffer); // *)

// set write + read TO values to 1000ms
//-------------------------------------
IowKitSetWriteTimeout(ioHandle, 1000); // *)
IowKitSetTimeout(ioHandle, 1000); // *)

IowKitCloseDevice(ioHandle);
}
return 0;
}
User avatar
Christoph Jung
Posts: 670
Joined: Sun Oct 08, 2006 3:43 pm
Location: Germany / Berlin
Contact:

Re: IOW56: Programm-Absturz beim Aufruf von 'IowKitCloseDevice()'

Post by Christoph Jung »

Hallo,

Ich habe den Code (mit einer kleinen Änderung beim 'buffer' WCHAR anstelle von USHORT) 1:1 kopiert und ausgeführt und er läuft ohne Probleme bei mir. Keine Fehler, keine Abstürze.
Mein System läuft ebenfalls auf Win10 Enterprise mit allen Updates.
Abteilung: Softwareentwicklung
Folge uns auf Twitter
Follow us on twitter
H.S.
Posts: 5
Joined: Thu Aug 30, 2018 9:13 am
Contact:

Re: IOW56: Programm-Absturz beim Aufruf von 'IowKitCloseDevice()'

Post by H.S. »

Danke für die schnelle Antwort.
Welcher Compiler wurde benutzt?
Vielleicht liegt es ja daran...
User avatar
Christoph Jung
Posts: 670
Joined: Sun Oct 08, 2006 3:43 pm
Location: Germany / Berlin
Contact:

Re: IOW56: Programm-Absturz beim Aufruf von 'IowKitCloseDevice()'

Post by Christoph Jung »

Wir nutzen Visual Studio 2017. Aber ich wüsste nicht, warum es am Compiler liegen sollte.
Abteilung: Softwareentwicklung
Folge uns auf Twitter
Follow us on twitter
H.S.
Posts: 5
Joined: Thu Aug 30, 2018 9:13 am
Contact:

Re: IOW56: Programm-Absturz beim Aufruf von 'IowKitCloseDevice()'

Post by H.S. »

Hallo,

"Kaum macht man es richtig - funktioniert's" :)
soll heißen: Ursache gefunden

Für den Fall, dass es andere auch interessiert:
Am Compiler lag es nicht. Ich habe kein Visual Studio, ich bin mehr oder weniger auf gcc/g++ (MinGW32) angewiesen.
Und da lag es an
  • fehlendem "include <windows.h>"
    • da hatte ich mir mit -U_WIN32 und der Verwendung von USHORT (s. Korrektur von C.Jung) beholfen
  • meinen bescheidenen Kenntnissen bzgl. Compiler-Aufruf und Einbinden der Import-Lib
Beides wird bei Visual Studio wahrscheinlich unter der Haube gehandelt, weshalb es da problemlos funktioniert (im o.g. Beispiel fehlt leider eine Behandlung für nicht vorhandenen IOW - wodurch es bei fehlendem IOW auch zu funktionieren scheint).

Folgender Compiler-Aufruf brachte nun den "Erfolg":
> gcc testcase.c -L. -liowkit -include windows.h -o testcase
User avatar
Christoph Jung
Posts: 670
Joined: Sun Oct 08, 2006 3:43 pm
Location: Germany / Berlin
Contact:

Re: IOW56: Programm-Absturz beim Aufruf von 'IowKitCloseDevice()'

Post by Christoph Jung »

Ah ok, klar VS bindet gleich die Windows.h ein und über die Projekteinstellungen die lib-Datei.
Ich hatte den gcc bisher nur unter Linux eingesetzt und da haben wir ja eine passendes SDK.
Abteilung: Softwareentwicklung
Folge uns auf Twitter
Follow us on twitter
Post Reply