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 :

fonction read et assimilé


Sujet :

C

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    138
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Mai 2006
    Messages : 138
    Par défaut fonction read et assimilé
    Bonjour,


    J'ai un petit souci de programmation. Je réalise un programme en langage C sur de l'embarqué (un module contenant un linux embarqué et des ports séries).

    Un port série me sert à dialoguer entre mon module et un équipement (automate sous protocole JBUS). Pour ouvrir ce port j'utilise la fonction open et pour lire ce qui arrive sur l'UART du port série j'utilise la fonction read.

    cependant la fonction read réalise deux étapes en une:

    - elle vérifie si un caractère est présent dans l'UART (elle retourne 1 si oui)
    - elle met ce caractère dans une variable.

    Voici le problème:

    j'ai besoin de ces deux opérations mais dans deux procédures différentes.

    l'une sert à vérifier si il y a un caractère, l'autre le récupère (si il y en a un)

    Est ce que quelqu'un connait des fonctions pour faire ces deux actions séparement; Merci

  2. #2
    Expert confirmé
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Par défaut
    pour ce qui est de vérifier la présence d'un caractère, tu peux toujours utiliser select
    Rédacteur "éclectique" (XML, Cours PHP, Cours JavaScript, IRC, Web...)
    Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
    je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
    pensez à la balise [ code ] (bouton #) et au tag :resolu: (en bas)

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    138
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Mai 2006
    Messages : 138
    Par défaut
    Je n'arrive pas à le faire marcher. Dans le man je m'apercois qu'il n'est pas POSIX. Pourrais-tu me donner un exemple STP.

  4. #4
    Expert confirmé
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Par défaut
    Pourtant ici : http://man.developpez.com/man2/select.2.php on voit "D'après Posix ..." en plus tu as tous les exemples nécessaires
    Rédacteur "éclectique" (XML, Cours PHP, Cours JavaScript, IRC, Web...)
    Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
    je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
    pensez à la balise [ code ] (bouton #) et au tag :resolu: (en bas)

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 42
    Par défaut Fonction read et assimile
    Bonjour,

    Peut etre que quelque part dans l'UART tu peut trouver un flag (drapeau), cad un bit dans un registre, qui change d'etat quand le buffer est rafraichi.

    A voir dans la doc constructeur de l'UART

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    138
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Mai 2006
    Messages : 138
    Par défaut
    Merci pour ta reponse Swoog. Je vais me pencher dessus.

    Merci pierabobl. Mais je vais avoir du mal à trouver les registres qui doivent etre contenu dan l'OS.

  7. #7
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par pierabobl
    Peut etre que quelque part dans l'UART tu peut trouver un flag (drapeau), cad un bit dans un registre, qui change d'etat quand le buffer est rafraichi.

    A voir dans la doc constructeur de l'UART
    Pfff... N'importe quoi... On est sous Linux...Il y a un driver. L'utilisateur n'a pas accès au composant...

    Si on doit tester quelque chose, c'est avec un ioctl()... Mais vu que par défaut, read() est blocant, c'est inutile. Suffit de le coller dans un thread et on en parle plus...

  8. #8
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par fveysseire
    Merci pierabobl. Mais je vais avoir du mal à trouver les registres qui doivent etre contenu dan l'OS.
    Laisse tomber...

  9. #9
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par fveysseire
    j'ai besoin de ces deux opérations mais dans deux procédures différentes.

    l'une sert à vérifier si il y a un caractère, l'autre le récupère (si il y en a un)

    Est ce que quelqu'un connait des fonctions pour faire ces deux actions séparement
    Pourquoi ? Certes, par défaut, read() est blocant, mais est-ce génant ? Il suffit de le coller dans un thread et le tour est joué.

    Sinon, il y a possibilité de configurer le driver en mode non blocant (ioctl(), je suppose...) et d'appeler read() dans une boucle et testant le code retour :
    • 0 = rien à lire.
    • >0 = des caractères lus.

    Détails sur le forum Linux (rien à voir avec le langage C).

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    138
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Mai 2006
    Messages : 138
    Par défaut
    Citation Envoyé par Emmanuel Delahaye
    Pfff... N'importe quoi... On est sous Linux...Il y a un driver. L'utilisateur n'a pas accès au composant...

    Si on doit tester quelque chose, c'est avec un ioctl()... Mais vu que par défaut, read() est blocant, c'est inutile. Suffit de le coller dans un thread et on en parle plus...
    Bien sur qu'il suffirais de le coller dans un thread, et je te rassure c'est ce que je fais d'habitude, mais là ce n'est pas possible.

    Dans ce programme là je dois m'appuyer sur un driver JBUS (le protocole de communication utilisé dans ce programme) qui contient deux appels de fonctions distincts :

    - Une fonction pour vérifier la présence d'un caractère dans l'UART du port série.

    - Une fonction pour lire le caractère s'il y en a un.

    Et finalement j'ai réussi à decomposer la fonction read en deux grâce à select(), comme le disais Swoög (Merci à toi).

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

Discussions similaires

  1. lecture de char au lieu de byte dans la fonction read
    Par andromeda dans le forum Entrée/Sortie
    Réponses: 4
    Dernier message: 20/07/2007, 20h02
  2. [Système] Fonction exec() et assimilées
    Par guidav dans le forum Langage
    Réponses: 4
    Dernier message: 24/04/2007, 10h41
  3. Fonction read ?
    Par K20 dans le forum C
    Réponses: 4
    Dernier message: 26/09/2006, 23h56
  4. Problème avec la fonction read.
    Par Whaouu dans le forum Langage
    Réponses: 10
    Dernier message: 23/09/2005, 10h33
  5. [langage] problème avec fonction read
    Par domidum54 dans le forum Langage
    Réponses: 2
    Dernier message: 30/03/2004, 20h42

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