www.mikrocontroller.net

Forum: PC-Programmierung com port lesen / schreiben zugriffsverletzung


Autor: tibo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich benutze die serielle com schnittstelle in C (Win32 Anwendung, 
VS2010). Eigentlich ein alter Hut. Will ich jedoch schreiben oder lesen 
erhalte ich immer eine Zugriffsverletzung beim schreiben an position 
0x00000000. Für mich ist das nicht nachvollziehbar. Die Kommunikation 
funktioniert reibungslos über Terminal. Hat jemand einen Tipp?
serialHandle = CreateFile(L"COM5", GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);

  serialParams.DCBlength = sizeof(DCB);

  printf("%i\n", GetCommState(serialHandle, &serialParams));
  serialParams.BaudRate = 115200;
  serialParams.ByteSize = 8;
  serialParams.StopBits = ONESTOPBIT;
  serialParams.Parity = NOPARITY;
  printf("%i\n", SetCommState(serialHandle, &serialParams));
  sprintf_s(statusLine, 160, "Baudrate: %i kb/s\n", 115200);
  printf(statusLine);

  printf("%i\n", GetCommTimeouts(serialHandle, &serialTimeouts));
  serialTimeouts.ReadIntervalTimeout = 50;
  serialTimeouts.ReadTotalTimeoutMultiplier = 10;
  serialTimeouts.ReadTotalTimeoutConstant = 50;
  serialTimeouts.WriteTotalTimeoutMultiplier = 10;
  serialTimeouts.WriteTotalTimeoutConstant = 50;
  printf("%i\n", SetCommTimeouts(serialHandle, &serialTimeouts));

  char tx = 0x00;

  WriteFile(serialHandle, &tx, 1, bytesWritten, NULL);

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
tibo schrieb:
> WriteFile(serialHandle, &tx, 1, bytesWritten, NULL);

wo kommt bytesWritten her?

Autor: tibo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
HANDLE serialHandle;
DCB serialParams;
COMMTIMEOUTS serialTimeouts;
LPDWORD bytesRead = 0, bytesWritten = 0;

ist oben definiert.

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
tibo schrieb:
> COMMTIMEOUTS serialTimeouts;
> LPDWORD bytesRead = 0, bytesWritten = 0;

LPDWORD sind zeiger, das darst du so nicht machen.


mach mal

DWORD bytesRead = 0, bytesWritten = 0;

WriteFile(serialHandle, &tx, 1, &bytesWritten, NULL);

Autor: tibo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Long Pointer, nicht wahr ?!

Danke. Schuld war natürlich so ein verfluchtes Beispiel, wo es so drin 
stand.

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
tibo schrieb:
> Danke. Schuld war natürlich so ein verfluchtes Beispiel, wo es so drin
> stand.

das ist halt das Problem wenn man sich das zeug nur kopiert - dabei 
lernt man nichts und sucht sinnlose fehler. Wenn man es selber abtippt 
denkt man meist noch darüber nach.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.