- Labornetzteil AliExpress         
Ergebnis 1 bis 8 von 8

Thema: Serielle Schnittstelle Empfangsbuffer

Baum-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #4
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    04.09.2011
    Ort
    Hessen
    Beiträge
    707
    Hallo,

    ich will Peter nicht vorgreifen, vielleicht kennt er sich da besser aus. Das Problem ist, dass die Windows Funktionen für die serielle Schnittstelle so vielfältig sind, dass man sein Programm sehr unterschiedlich aufbauen kann.

    Ist der Code irgendwie zusammenkopiert oder selber geschrieben ?

    Das zeichenweise Lesen über ReadFile ist sehr ineffizient. Nicht umsonst hat ReadFile einen Parameter, der angibt wie viele Zeichen gelesen wurden. Wenn man schon die COMMTIMEOUTS setzt, kann man sie auch gleich so setzen, dass ReadFile mit dem zurückkommt, was im Eingangspuffer steht.

    Ein funktionsfähiges Beispiel für Eventbasiertes Lesen ohne asynchrones IO habe ich mit Google auf die Schnelle nicht gefunden. Ich hätte erwartet, dass man die Schnittstelle dann mit Overlapped öffnet, so wie hier
    http://www.codeguru.com/cpp/i-n/netw...in-Windows.htm
    Das mache ich normalerweise nicht, ist mir zu kompliziert. Sollte ich das mal brauchen, würde ich wohl eine fertige Klasse dafür nehmen, so wie die hier
    http://www.naughter.com/serialport.html

    Wenn man schon in einem Thread arbeitet, das mache ich bei seriellen Schnittstellen normalerweise auch, dann kann man da auch einfach pollen, ob was da ist, sonst eine Weile schlafen. Ist was da, liest man alles was da ist und nimmt das dann auseinander.

    Ungefähr so
    Code:
    //
    // Anzahl der Bytes im Eingangspuffer
    //
    DWORD SensorInterface::InputSize()
    {
      DWORD PortErrors;
      COMSTAT PortStatus;
    
      if ( ClearCommError(m_hComm, &PortErrors, &PortStatus) )
      {
        return PortStatus.cbInQue;
      }
      else
      {
        return 0;
      }
    }
    und so
    Code:
    std::string SensorInterface::Receive()
    {
      if ( !m_bOpen )
      {
        throw std::runtime_error("port not open");
      }
    
      const int nReadSize = 128;
      std::vector<char> Buffer(nReadSize);
      unsigned long nDataRead;
    
      if ( !ReadFile( m_hComm, &Buffer[0], nReadSize, &nDataRead, NULL) )
      {
        throw std::runtime_error("General Read Error");
      }
    
      return std::string(Buffer.begin(), Buffer.begin() + nDataRead);
    }
    Geändert von Mxt (28.04.2016 um 09:47 Uhr)

Ähnliche Themen

  1. 5v serielle schnittstelle und ISP
    Von Roboman93 im Forum Elektronik
    Antworten: 3
    Letzter Beitrag: 11.06.2008, 18:58
  2. serielle schnittstelle
    Von Roboman93 im Forum Robby RP6
    Antworten: 11
    Letzter Beitrag: 15.04.2008, 18:48
  3. Serielle Schnittstelle
    Von pacer_one im Forum AVR Hardwarethemen
    Antworten: 6
    Letzter Beitrag: 08.01.2008, 17:33
  4. Serielle Schnittstelle
    Von suggle im Forum Sensoren / Sensorik
    Antworten: 4
    Letzter Beitrag: 24.01.2006, 13:34
  5. [ERLEDIGT] serielle Schnittstelle
    Von Devil Ray im Forum C - Programmierung (GCC u.a.)
    Antworten: 13
    Letzter Beitrag: 04.10.2004, 12:26

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

fchao-Sinus-Wechselrichter AliExpress