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 :

Attente non bloquante d'un changement de flag en mémoire externe


Sujet :

C++

  1. #1
    Membre chevronné
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Points : 2 107
    Points
    2 107
    Par défaut Attente non bloquante d'un changement de flag en mémoire externe
    Bonjour à tous,

    Je vais devoir réaliser dans quelques semaines une interaction entre mon programme C++ et une carte externe de traitement de données (sur slot PCI). Le tout programmé par mes soins.
    Les données arrivent directement sur la carte de calcul qui effectue un premier travail. Puis mon programme en soft doit prendre le relais. Pour indiquer que les données sont prêtes, j'ai pensé que la carte de calcul pourrait mettre un flag à 1 dans une case précise de sa mémoire. Et mon programme en soft scannerait la valeur du flag jusqu'à ce qu'elle soir à 1, puis récupère les données.
    Je me posais la question suivante : je vais quand même pas faire un truc du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    while(flag == false)
    { 
        flag = GetFlag();
    }
    Ca va me bouffer un coeur entier rien que pour savoir si mes données sont prêtes !

    J'imagine qu'il doit exister une autre solution, peut être plus proche de l'OS (Windows, même si dans l'idée j'aimerai le porter sous Linux à moyen terme).

    J'attends vos suggestions !


  2. #2
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Points : 50 367
    Points
    50 367
    Par défaut
    Ta carte pourrait lever une interruption.

    Cela va t'obliger à écrire un driver pour cette interruption.

    Ou sinon, dans les prérequis, tu demandes un dual core
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  3. #3
    Modérateur
    Avatar de nouknouk
    Homme Profil pro
    Inscrit en
    Décembre 2006
    Messages
    1 655
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 655
    Points : 2 161
    Points
    2 161
    Par défaut
    salut,

    une autre idée: faire que ton process de la carte d'acquisition ouvre une socket TCP d'écoute sur un port local ; les autres process qui doivent être prévenus s'y connectent. Lorsque les process doivent être prévenus, tu émets un message sur chacune des sockets connectées.

    Après, je ne suis pas convaincu que ce soit la méthode la plus efficace mais elle me paraît déjà plus 'propre' qu'une attente active et moins fastidieuse que l'écriture d'un driver. A toi de voir en fonction de tes besoins/contraintes (notamment temps-réel).

    Sinon, tu peux faire des recherches sur google avec quelques mots clefs, genre : "inter process syncronization", "IPC", "binary semaphores", ...
    Mon projet du moment: BounceBox, un jeu multijoueurs sur Freebox, sur PC et depuis peu sur smartphone/tablette Android.

  4. #4
    Membre chevronné
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Points : 2 107
    Points
    2 107
    Par défaut
    Citation Envoyé par ram-0000 Voir le message
    Ta carte pourrait lever une interruption.
    Cela va t'obliger à écrire un driver pour cette interruption.
    J'ai jamais fait ça. C'est compliqué? Toutes les cartes peuvent lever une interruption?
    Ou sinon, dans les prérequis, tu demandes un dual core
    Ouais ça j'ai déjà ! Au pire je commande même un quad core, je pense pas que ça posera problème. Je trouve juste cette solution un peu moins propre.

    Citation Envoyé par nouknouk Voir le message
    une autre idée: faire que ton process de la carte d'acquisition ouvre une socket TCP d'écoute sur un port local ; les autres process qui doivent être prévenus s'y connectent. Lorsque les process doivent être prévenus, tu émets un message sur chacune des sockets connectées.
    Mouais, j'ai une appli temps réel assez contraignante (20 ms). D'autra part, la carte de traitement est un FPGA. Autant les sockets en soft me font pas peur, autant sur FPGA un peu plus...

    Merci en tous cas pour les idées, ça m'aide tout de même beaucoup.

  5. #5
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Points : 50 367
    Points
    50 367
    Par défaut
    Citation Envoyé par poukill Voir le message
    J'ai jamais fait ça. C'est compliqué?
    Je ne sais pas, la dernière fois que j'ai fais cela, c'était sous DOS donc c'était plus facile.

    Maintenant, sous microsoft, on peut imaginer que ton interruption lève un événement et que ton application soit en attente bloquante sur cet événement. Regarde OpenEvent() et ses petites soeurs.

    Citation Envoyé par poukill Voir le message
    Toutes les cartes peuvent lever une interruption?
    Cela dépend, il faut lire les spécifications techniques de ta carte, il y a peut être des exemples livrés avec le SDK de ta carte
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  6. #6
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 074
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 074
    Points : 12 120
    Points
    12 120
    Par défaut
    C'est quoi connectique entre la carte et le PC hôte ?
    COM, PCI, PCI Express ???
    Un driver, c'est un peu compliqué mais ce n’est pas insurmontable.
    Sous Vista, je crois qu'il on mit au point un mode Driver en Mode User, mais c'est que pour Vista et Window Server 2008.

  7. #7
    Modérateur
    Avatar de nouknouk
    Homme Profil pro
    Inscrit en
    Décembre 2006
    Messages
    1 655
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 655
    Points : 2 161
    Points
    2 161
    Par défaut
    Citation Envoyé par bacelar Voir le message
    C'est quoi connectique entre la carte et le PC hôte ? COM, PCI, PCI Express ???
    hem...

    Citation Envoyé par poukill
    Je vais devoir réaliser dans quelques semaines une interaction entre mon programme C++ et une carte externe de traitement de données (sur slot PCI)
    Mon projet du moment: BounceBox, un jeu multijoueurs sur Freebox, sur PC et depuis peu sur smartphone/tablette Android.

  8. #8
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 074
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 074
    Points : 12 120
    Points
    12 120

  9. #9
    Membre chevronné
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Points : 2 107
    Points
    2 107
    Par défaut
    Ok merci bien, j'ai noté toutes vos idées. Je vais aller fouiller dans la doc du FPGA pour voir quelles sont les possibilités qui s'offrent à moi maintenant.

    Merci à tous, je vous donnerai des news en cas de problèmes !

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

Discussions similaires

  1. Réponses: 9
    Dernier message: 26/10/2005, 12h29
  2. Réponses: 5
    Dernier message: 02/09/2005, 12h47
  3. Rendre la lecture non bloquante
    Par Charlinecha dans le forum API standards et tierces
    Réponses: 4
    Dernier message: 05/07/2005, 15h46
  4. Réponses: 3
    Dernier message: 16/03/2004, 16h42
  5. [API] Communication série NON-bloquante : OVERLAPPED/Thread
    Par Rodrigue dans le forum C++Builder
    Réponses: 2
    Dernier message: 07/11/2003, 13h43

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