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

POSIX C Discussion :

thread pour Gui et pour tache temps reel


Sujet :

POSIX C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau candidat au Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 1
    Par défaut thread pour Gui et pour tache temps reel
    Bonjour,

    J'ai réalisé un programme temps reel linux (RTAI) permettant le contrôle (aquisition mesures, calcules, génération signaux) d'une "machine".
    Ce programme étant fonctionnel, il me faut maintenant écrire une interface graphique pour permettre à l'utilisateur de la machine de rentrer certains paramètre. Jusque là pas de problèmes, j'ai opté pour Glade et GTK+ (merci aux forums).
    Je dois ensuite regrouper les deux progs dans un seul à l'aide de thread (pthread).
    Je réalise mon prog:

    un thread pour la GUI
    un thead temps reel FIFO
    La GUI modifie des variables globales et le thread temps reel les lit pour ensuite faire des calculs. Pour tester mon appli j'ai remplacé le thread temps reel FIFO par:

    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
    //mes variables globales modifiées par le thread non temps réel
    static volatile int COMMENCE = 0;
    static volatile int FIN = 0;
    .
    .
    .
    pthread_create(&th_test,&attr,test,NULL)
    .
    .
    .
    void * test (void * arg){
     
    while(!FIN){
    if (COMMENCE){
    printf("ok\n");
    }
    }
    pthread_exit(EXIT_SUCCESS);
    }
    tout ce passe bien.

    Enfin ma question, j'aimerais savoir si je pars dans la bonne direction ou si lorsque je vais passer en temps réel, la tache temps réel ne rendra jamais la main au thread non temps réel (qui est censé modifier des variables globales).

  2. #2
    Inactif  
    Avatar de Mac LAK
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    3 893
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 893
    Par défaut
    Citation Envoyé par Pierag Voir le message
    Enfin ma question, j'aimerais savoir si je pars dans la bonne direction ou si lorsque je vais passer en temps réel, la tache temps réel ne rendra jamais la main au thread non temps réel (qui est censé modifier des variables globales).
    Si ta tâche temps réel ne laisse pas de temps libre, t'es mort, tout simplement, par famine.

    Les performances de ton système vont beaucoup dépendre de la taille des buffers hardware que tu as sur la machine : si ta RTT bouffe 90% du temps CPU et/ou déclenche une IT toutes les millisecondes pour aller lire quelques mots dans la carte, c'est mal barré par exemple. Si elle se réveille toutes les 50 millisecondes pour vider 2 Mo de données depuis la carte, ce n'est pas un problème par contre.
    Ou alors, il va te falloir cantonner la RTT sur un des cœurs (et la rendre prioritaire), et tout le reste sur l'autre cœur... Aux risques de prise de contrôle du bus mémoire près, bien sûr.

    Ce qui me fait "peur" dans ton truc, pour ma part, c'est d'avoir une IHM sur un système RT... C'est rarement une bonne idée en soi côté performances, j'aurais plutôt tendance à avoir une machine RT qui acquiert les données et les balance sur un réseau haute vitesse (TCP/IP sur Gigabit, USB 2.0 [device] en mode isochrone ou bulk, etc.).

    Pourquoi un lien gigabit pour Ethernet ? Tout simplement pour que le contrôleur Ethernet soit bloqué sur les émissions le moins de temps possible, et que les risques de collisions CSMA/CD soient les plus réduits possibles. Si tu es en réseau 100% privé (de machine à machine), j'aurais carrément tendance à passer directement en Ethernet / raw sockets et à balancer les données directement sur le réseau, avec juste un horodatage et un compteur.

    Ensuite, sur une machine déportée, tu te contentes de lire les données depuis le réseau et de les traiter avec ton IHM.
    Mac LAK.
    ___________________________________________________
    Ne prenez pas la vie trop au sérieux, de toutes façons, vous n'en sortirez pas vivant.

    Sources et composants Delphi sur mon site, L'antre du Lak.
    Pas de question technique par MP : posez-la dans un nouveau sujet, sur le forum adéquat.

    Rejoignez-nous sur : Serveur de fichiers [NAS] Le Tableau de bord projets Le groupe de travail ICMO

Discussions similaires

  1. truc pour tracer des courbe en temps reel qvec perl tk
    Par mohaz dans le forum Interfaces Graphiques
    Réponses: 5
    Dernier message: 16/06/2009, 16h48
  2. [Joomla!] module pour chat sur Joomla (chat support pour aide en temps reel)
    Par Nadjia.ccce dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 3
    Dernier message: 15/02/2009, 14h27
  3. Réponses: 1
    Dernier message: 19/03/2006, 15h35
  4. [Threads]Comment les organiser pour un jeu du serpent ?
    Par Pill_S dans le forum Algorithmes et structures de données
    Réponses: 12
    Dernier message: 11/05/2004, 15h22

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