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 :

Communication série: ouvrir et fermer un port COM sous Linux


Sujet :

C

  1. #1
    Membre confirmé

    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    532
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2011
    Messages : 532
    Points : 604
    Points
    604
    Par défaut Communication série: ouvrir et fermer un port COM sous Linux
    Bonjour a toutes et tous,

    J'ai créé un programme en C sous linux qui me permet d'ouvrir une liaison série, d'écrire et de lire sur cette liaison série et fermer la communication avec la structure termios (pour ceux qui ne connaisse pas: http://manpagesfr.free.fr/man/man3/termios.3.html )

    Actuellement, mon programme principal ce décompose ainsi:

    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
     
    int main(void)
    {
    //initialisation de différentes variables
     
    //ouverture de mon port COM et configuration de la liaison série avec termios
     
    while(1)
    {
    //ecriture sur la liaison
     
    //lecture de la réponse
    }
     
    return(0);
    }

    Actuellement, et je suppose que cela doit être un problème, lorsque je quitte mon programme que j'ai lancé sur un terminal Linux (./mon_programme) je me rend compte que je ne ferme jamais ma liaison série.

    D'où ma question: étant donné que j'utilise une boucle infinie, mieux vaut-il qu'à chaque tour dans la boucle j'ouvre mon port COM, j'écris, je lis et je ferme, où alors tel que je le présente ici, cela ne pose pas de problème ???

    Dans l'attente de vos réponse,
    Cordialement,
    Si vous voulez suivre les différents championnats de football américain en France, en Europe et dans le Monde (en tout 32 pays différents), c'est sur www.fandefootus.fr

  2. #2
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2009
    Messages
    4 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 481
    Points : 13 679
    Points
    13 679
    Billets dans le blog
    1
    Par défaut
    Tu termines le programme en faisant Ctrl + C ?

    Tu devrais pouvoir t'en sortir avec atexit() : http://manpagesfr.free.fr/man/man3/atexit.3.html

  3. #3
    Membre confirmé

    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    532
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2011
    Messages : 532
    Points : 604
    Points
    604
    Par défaut
    Citation Envoyé par Bktero Voir le message
    Tu termines le programme en faisant Ctrl + C ?

    Tu devrais pouvoir t'en sortir avec atexit() : http://manpagesfr.free.fr/man/man3/atexit.3.html
    oui actuellement je termine mon programme en faisant Ctrl + c, d'où cette question étant donné que je n'ai pas mis de close(nom_de_mon_port) je ne le ferme jamais et vu que j'arrête le programme avec Ctrl + c il ne fermerai jamais le port vu qu'il ne quitterai quand même pas la boucle.

    Actuellement, je fais des essais en faisant l'ouverture et la fermeture du port dans a la boucle infinie, le fonctionnement demeure inchangé (ce qui est positif) mais je me posais la question sur "la lourdeur" (j'arrive pas à trouver un autre mot) à ouvrir/fermer a chaque boucle plutôt que d'ouvrir qu'une seule fois
    Si vous voulez suivre les différents championnats de football américain en France, en Europe et dans le Monde (en tout 32 pays différents), c'est sur www.fandefootus.fr

  4. #4
    Membre expérimenté

    Homme Profil pro
    Collégien
    Inscrit en
    Juillet 2010
    Messages
    545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Afghanistan

    Informations professionnelles :
    Activité : Collégien

    Informations forums :
    Inscription : Juillet 2010
    Messages : 545
    Points : 1 431
    Points
    1 431
    Par défaut
    Actuellement, je fais des essais en faisant l'ouverture et la fermeture du port dans a la boucle infinie, le fonctionnement demeure inchangé (ce qui est positif) mais je me posais la question sur "la lourdeur"
    Sur la lourdeur je ne sais pas. Mais ce qui est sure c'est que ce n'est pas une solution.
    Si le CTRL-C tombe pendant un read ou un write le port n'est toujours pas fermé..

    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
     
    #include <signal.h>
     
    static void sig_handler (int sig)
    {
    	exit(EXIT_SUCCESS);
    }/* end sig_handler*/
     
    void serial_close(int status,void * arg)
    {
        close(*((int*)arg));
    }
    on_exit(&serial_close,&fd);
    signal(SIGINT,&sig_handler);
    signal(SIGTSTP,&sig_handler);

  5. #5
    Membre confirmé

    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    532
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2011
    Messages : 532
    Points : 604
    Points
    604
    Par défaut
    ok merci pour vos réponses,

    je vais voir ce que je peux faire avec les éléments que vous m'avez donné
    Si vous voulez suivre les différents championnats de football américain en France, en Europe et dans le Monde (en tout 32 pays différents), c'est sur www.fandefootus.fr

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

Discussions similaires

  1. Fermer un port COM ouvert précédemment
    Par megamario dans le forum Développement Windows
    Réponses: 1
    Dernier message: 10/10/2013, 15h32
  2. Communication avec un FT232 sur un port com virtuel
    Par fcrd03 dans le forum LabVIEW
    Réponses: 1
    Dernier message: 13/03/2012, 19h09
  3. Comment ouvrir et fermer un port réseau ?
    Par andrianiaina dans le forum Dépannage et Assistance
    Réponses: 3
    Dernier message: 23/11/2011, 09h22
  4. Comment ouvrir ou fermer les port COM5, COM6 et COM7
    Par pierrot10 dans le forum Windows 7
    Réponses: 1
    Dernier message: 18/03/2011, 18h06
  5. comment ouvrir et fermer des ports
    Par aefmaaradji dans le forum Réseau
    Réponses: 3
    Dernier message: 16/04/2008, 15h00

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