Forum: PC-Programmierung RS232-Kommunikation geht nicht


von Georg T. (microschorsch)


Lesenswert?

Hallo zusammen,

seit Jahren nun Programmiere ich unter Linux, ohne größere 
Schwierigkeiten. Nun habe ich mich überreden lassen ein Interface zu 
meinem Multi I/O Board unter Windows zusammenzuprogrammieren.... 
folgendes Problem:

Das Board hat einen FTDI Uart2USB Chip, wie gesagt Board läuft unter 
Linux super, auch unter Windows kann ich es mit Putty ansteuern.

Wenn ich nun meine Code-Schnipsel zusammensuche bin ich mir sicher, dass
 * CreateFile läuft
 * und WriteFile läuft (auf dem Board kann ich die LEDs ein und 
ausschalten :-) )

ReadFile will nicht, was mache ich falsch?
1
sendLine("?"); // Hier hinter steckt ein WriteFile...
2
Sleep(1000);
3
LPVOID lpBuffer;
4
BOOL ret;
5
static DWORD iBytesRead;
6
for (int i = 0; i < 10; i++) {
7
  ret = ReadFile(_device,lpBuffer, 1, &iBytesRead,NULL);
8
  cout << "Reading: " << ret << " " << (char*)lpBuffer << endl;
9
}

hab auch schon mit den Timeouts rumgespielt, aber egal was ich tue "ret" 
ist immer 0 und in lpBuffer steht Kauderwelsch


Danke

Schorsch

: Verschoben durch User
von Peter II (Gast)


Lesenswert?

Georg T. schrieb:
> hab auch schon mit den Timeouts rumgespielt, aber egal was ich tue "ret"
> ist immer 0 und in lpBuffer steht Kauderwelsch

Unter Windows gibt es sogar ein Auführliche doku.
http://msdn.microsoft.com/en-us/library/windows/desktop/aa365467(v=vs.85).aspx

If the function fails, or is completing asynchronously, the return value 
is zero (FALSE). To get extended error information, call the 
GetLastError function.

von res (Gast)


Lesenswert?

Du solltest auch eine Buffer haben, auf den lpBuffer zeigt!
...
BYTE buf;
ReadFile( _device, &buf, 1, &iBytesRead, NULL );
...

von Georg T. (microschorsch)


Lesenswert?

Habs gefunden,

vielen Dank für die Infos, die GetLastError Methode hat mir sehr 
geholfen:

so sah mein CreateFile Aufruf aus:
1
_device = CreateFile(*lstr, GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);

richtig ist aber
1
_device = CreateFile(*lstr, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);

Ich dachte, dass "WRITE" ebenfalls ein "READ" impliziert, dem ist nicht 
so

Gruß und Danke

Schorsch

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.