- 12V Akku mit 280 Ah bauen         
Ergebnis 1 bis 6 von 6

Thema: Linux SerialStream.h friert ein bei Open("/dev/ttyUSB0")

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    19.03.2011
    Ort
    Berlin Moabit
    Beiträge
    14

    Linux SerialStream.h friert ein bei Open("/dev/ttyUSB0")

    Anzeige

    LiFePo4 Akku selber bauen - Video
    Hallo!

    mit "/dev/ttyS0" kann der Code die Schnittstelle öffnen!

    Aber mit "/dev/ttyUSB0" friert er immer bei usb_serial.open() ein.
    Wenn ich den USB Stecker raus ziehe, gehts weiter und es gibt den Fehler "error opening device". -> Also kriegt schonmal zumindest was mit von dem USB-SERIAL konverter.

    Hab jetzt alles durch was ich finden konnte und mir einfällt: sudo, neu starten usw.
    Ich habe das Gefühl, es liegt an irgendwelchen Handshakes jedoch finde ich keinen Ansatz, da etwas zu verändern.

    Code:
    /*
     * main.cc
     *
     *  Created on: 01.04.2011
     *      Author: thomas
     */
    
    #include <iostream>
    #include <SerialStream.h>
    #include <cstdlib>
    #include <string>
    
    using namespace LibSerial ;
    using namespace std;
    
    int main ()
    {
      string port( "/dev/ttyUSB0" );
    //  string port( "/dev/ttyS0" );
    
      SerialStream usb_serial;
    
      cout << "Open Port " << port << endl;
      usb_serial.Open(port) ;
      if (!usb_serial)
      {
        cout << "Error oppening Port " << port << endl;
        return 1;
      }
    
      usb_serial.SetBaudRate( SerialStreamBuf::BAUD_19200 ) ;
      if ( ! usb_serial.good() )
      {
         cerr << "Error: Could not set the baud rate." << endl ;
         exit(1) ;
      }
      usb_serial.SetCharSize( SerialStreamBuf::CHAR_SIZE_8 ) ;
      if ( ! usb_serial.good() )
      {
         cerr << "Error: Could not set the character size." << endl ;
         exit(1) ;
      }
      usb_serial.SetParity( SerialStreamBuf::PARITY_ODD ) ;
      if ( ! usb_serial.good() )
      {
         cerr << "Error: Could not disable the parity." << endl ;
         exit(1) ;
      }
      usb_serial.SetNumOfStopBits( 1 ) ;
      if ( ! usb_serial.good() )
      {
         cerr << "Error: Could not set the number of stop bits." << endl ;
         exit(1) ;
      }
      usb_serial.SetFlowControl( SerialStreamBuf::FLOW_CONTROL_NONE ) ;
      if ( ! usb_serial.good() )
      {
         cerr << "Error: Could not use hardware flow control." << endl ;
         exit(1) ;
      }
    
      usb_serial.Close() ;
      cout << "Port " << port << " closed!"<< endl;
      return 0;
    }

  2. #2
    Erfahrener Benutzer Begeisterter Techniker Avatar von just4fun
    Registriert seit
    06.09.2004
    Ort
    Hannover
    Alter
    53
    Beiträge
    314
    Hast du ausreichende Rechte auf ttyUSB0? Ich hatte bei mir unter Linux als normaler User keine Rechte und habe mit dafür eine extra udev-Regel gebaut.
    www.robotiklabor.de - Der Podcast rund um Robotikthemen
    www.direcs.de - Meine Robotik-Seite mit Videos, Fotos, Screenshots, Source-Codes und mehr.

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    19.03.2011
    Ort
    Berlin Moabit
    Beiträge
    14
    Ok, dass mit der udev Regel hab ich hin bekommen:

    Diese Zeile liegt jetzt in /etc/udev/rules.d/usbsrrial.rules
    SUBSYSTEM=="tty", DRIVERS=="cp210x", MODE="0777", KERNELS=="ttyUSB*"

    Jetzt sind die Zugriffsrechte immer 777 für das USB Gerät!

    Am Fehler hat sich aber leider nichts geändert. Komisch finde ich nach wie vor, das beim raus ziehen des USB-Kabels das Progrämmchen mir error reagiert!

  4. #4
    Erfahrener Benutzer Begeisterter Techniker Avatar von just4fun
    Registriert seit
    06.09.2004
    Ort
    Hannover
    Alter
    53
    Beiträge
    314
    Ich kenne die LibSerial gar nicht, ehrlich gesagt...

    Wie sieht die Header-Datei aus? Vielleicht liegt es daran, wie der Port geöffnet wird. Hast du es mal "zu Fuß" probiert, also ohne die gelieferten Methoden der Lib?

    Ich nutze das hier in meinem Sourcecode unter https://github.com/markusk/direcs/bl...recsSerial.cpp in der Methode "openAtmelPort" für meinen Atmel. Schau es dir mal an.
    www.robotiklabor.de - Der Podcast rund um Robotikthemen
    www.direcs.de - Meine Robotik-Seite mit Videos, Fotos, Screenshots, Source-Codes und mehr.

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    19.03.2011
    Ort
    Berlin Moabit
    Beiträge
    14
    All right! Das sieht gut aus... Werd's bald ausprobiern! Thanks just4Fun
    Zwischenzeitlich hab ich ein bisschen qt4 gelernt...

    Das läßt sich ja dann gut verschmelzen

  6. #6
    Neuer Benutzer Öfters hier
    Registriert seit
    10.01.2011
    Ort
    Baden Württemberg
    Beiträge
    18
    Hi,

    wenn du etwas mit QT machst, würde sich sicherlich auch noch folgende Bibliothek anbieten:
    http://www.qtwiki.de/wiki/QextSerialPort

    Vielleicht hilfts dir ja
    Gruß
    pc-fan

Ähnliche Themen

  1. Sehr schönes Projekt -> "Open Servo"
    Von Andree-HB im Forum Motoren
    Antworten: 8
    Letzter Beitrag: 26.01.2016, 12:57
  2. Linux AVR-GCC IDE "KontrollerLab"
    Von cadmaniac im Forum C - Programmierung (GCC u.a.)
    Antworten: 211
    Letzter Beitrag: 03.12.2009, 16:46
  3. Probleme mit Bascom: "Devise not open" / "Div
    Von Sebbokalypse im Forum Schaltungen und Boards der Projektseite Mikrocontroller-Elektronik.de
    Antworten: 0
    Letzter Beitrag: 13.11.2009, 14:59
  4. Fehler bei "make all" unter Linux
    Von Miolin im Forum Robby RP6
    Antworten: 2
    Letzter Beitrag: 26.11.2007, 14:21
  5. Antworten: 5
    Letzter Beitrag: 05.03.2005, 19:55

Stichworte

Berechtigungen

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

LiFePO4 Speicher Test