IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C++ Discussion :

Problème avec select lecture fichier


Sujet :

C++

  1. #1
    Membre confirmé

    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2009
    Messages
    377
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Novembre 2009
    Messages : 377
    Points : 597
    Points
    597
    Par défaut Problème avec select lecture fichier
    Bonjour,

    j'ai un problème avec l'utilisation de SELECT pour lire sur un port série.

    J'utilisais à la base un simple read, mais il a le désavantage d'utiliser du temps processeur pour rien.

    D'après ce que j'ai compris le SELECT, permet de savoir si un port est disponible en lecture, et dès qu'il est disponible de retourner l'information. Cependant, dans mon cas, il me retourne toujours rien dans ret

    Fonction de configuration:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    void ConnectSerie::start()
    {
        // Next step, we connect to device through associated file and check the connection:
        m_fd = open(const_cast<char*>(m_serialAddr.c_str()), O_RDWR | O_NONBLOCK);
     
        if (m_fd == -1 )
    {
            perror("Open_port: Unable to open port.");
        }
        else
        {
            printf("Port 1 has been sucessfully opened and %d is the file description\n", m_fd);
        }
     
     
        // Retrieve port params.
        if (tcgetattr(m_fd, &m_deviceConfig) != 0)
        {
            std::cout << "Error!" << std::endl;
            perror("Unable to connect");
        }
     
        cfmakeraw(&m_deviceConfig);
     
        // Set port params
        if(tcsetattr(m_fd, TCSANOW, &m_deviceConfig) != 0)
        {
            perror("error");
        }
        else
        {
            tcflush(m_fd,TCIFLUSH);
        }
     
        // With following code we send to device some bits:
        if(tcsetattr(m_fd, TCSAFLUSH, &m_deviceConfig) < 0)
        {
            perror("Error during the configuration of the serial port");
        }
     
        // Configure for select (reading).
        FD_ZERO(&m_rfds);
        FD_SET(m_fd, &m_rfds);
    }
    Fonction lecture :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    unsigned char ConnectSerie::readChar()
    {
        unsigned char retChar;
        int ret;
        // Debug 
        printf("deb %d \n", m_tv.tv_sec);
     
        ret = select(1, &m_rfds, NULL,NULL,&m_tv);
     
        // Debug
        printf("fin : %d\n", ret);
     
        // Set data become inconsistant
        m_tv.tv_sec = m_tvBackupVal;
        m_tv.tv_usec = 0;
        FD_ZERO(&m_rfds);
        FD_SET(m_fd, &m_rfds); // Ajout 
     
        if (ret > 0)
        {
            read(m_fd, &retChar, 1);
            return retChar;
        }
        else
        {
            throw "No data";
        }
    }
    }
    Et je tombe toujours dans l'exception "no data".

    J'ai encore la configuration du port série, mais elle doit être correcte, vu que si je fais un simple code de lecture avec read() cela fonctionne. Et que je peux écrire sur le port série.

    Merci de votre aide

    [EDIT] J'ai ajouté deux instructions dans le code afin de re-setter l'input, car elle devenait inconsitante.

  2. #2
    Membre confirmé

    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2009
    Messages
    377
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Novembre 2009
    Messages : 377
    Points : 597
    Points
    597
    Par défaut
    J'ai fais une erreur de compréhension, le premier argument est en faite le numéro du file descriptor + 1 et non comme je le pensais le nombre de file descriptor.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème avec la lecture d'un fichier texte
    Par Pentos60 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 31/01/2011, 15h27
  2. probléme avec la lecture d'un fichier xml
    Par adel.87 dans le forum Débuter
    Réponses: 13
    Dernier message: 09/10/2008, 13h54
  3. [PL/SQL]problème avec la lecture de fichier
    Par magicbisous-nours dans le forum SQL
    Réponses: 4
    Dernier message: 16/05/2007, 16h17
  4. Réponses: 4
    Dernier message: 19/02/2007, 18h58
  5. Problème avec la lecture de fichiers audio
    Par ksper92 dans le forum Flash
    Réponses: 3
    Dernier message: 22/01/2007, 13h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo