[Numérique] Problème d'interruption C++ sur Raspberry
Répondre à la discussion
Affichage des résultats 1 à 11 sur 11

Problème d'interruption C++ sur Raspberry



  1. #1
    sandrecarpe

    Problème d'interruption C++ sur Raspberry


    ------

    Bonjour à tous,

    Je programme en C++ sur Raspberry et j'essaie de rajouter une fonctionnalité qui me permet de compter le temps qu'une GPIO reste à l'état haut, grâce aux interruptions. (Je veux savoir combien de temps mon tube fluo reste allumé)
    Lorsque l'interruption détecte un front montant, je lance un chrono que j'arrête dès au prochain front descendant.

    Cependant, je rencontre plusieurs problèmes que vous pourrez peut-être m'aider à résoudre.
    Dans la phase de fonctionnement normal du programme, lorsqu'il y a une interruption, le programme gère ça comme il faut.
    Par contre, dès que je force le programme à s'arrêter (CTRL+C), j'appelle mes différents destructeurs pour que le programme s'arrête proprement.
    Dans un des destructeurs, je change l'état de la pin que je surveille à l'état bas. Et là, ma fonction d'interruption se déclenche 2 fois ! Mais pas deux fois de suite non non ! Il rappelle la fonction qui avait été appelée la dernière fois !
    Admettons qu'il y ai eu une interruption il y a 20 minutes et une autre à l'instant même. C'est la fonction d'interruption avec le code et l'état actuel des variables qui est appelé une première fois et une seconde fois avec l'état des variables qui correspondait il y a 20 minutes.

    Par contre, si je rappelle la fonction wiringPiISR() pour reconfigurer l'interruption de telle sorte à diriger les interruptions vers une fonction qui fait rien (j'ai pas trouvé d'autre façon de désactiver l'interruption), je retrouve un comportement normal et l'interruption est appelé qu'une seule fois. Pourtant, on pourrait se dire que plus aucune interruption ne devrait être détecté puisque je lui ai demandé de ne rien exécuter à chaque nouvelle interruption !

    Code:
    Eclairage::~Eclairage()
    {
    	wiringPiISR(PIN_ECLAIRAGE, INT_EDGE_BOTH, [](void* param){return;}, 0); //on redirige les interruptions vers une fonction qui fait rien
    	digitalWrite(PIN_ECLAIRAGE, LOW);
    }
    Je ne sais pas si c'est un problème lié à la compréhension des µc ou si c'est un problème logiciel. Donc je ne sais pas si je suis dans le bon forum.
    Bref, comportement incompréhensible pour moi. Mais peut-être que vous avez quelque chose à m'apporter ?
    Merci pour votre aide

    -----

  2. #2
    etpi7out

    Re : Problème d'interruption C++ sur Raspberry

    Bonsoir,

    Je ne suis pas sur de bien comprendre ton problème, mais je trouve des similitudes avec ce post la :
    http://forums.framboise314.fr/viewtopic.php?f=63&t=3801

  3. #3
    Vincent PETIT
    Animateur Électronique

    Re : Problème d'interruption C++ sur Raspberry

    Salut,
    Le lien de etpi7out est intéressant.

    Il confirme ce que j'ai toujours dit sur d'autres forums (heureusement pour moi ) sur un Raspberry, il est impossible de faire une interruption (dans le sens où tu le ferais sur un microcontroleur) car il y a un OS non temps réel qui tourne et il ne peut pas te laisser faire ça.

    Au mieux tu lancera un thread et cela explique pourquoi tu n'arrives pas à le stopper aussi simplement que tu le voudrais.

    Regarde comment stopper un thread en C++ et regard si une des méthodes de ta bibliothèque ne te renvoie pas une info sur le thread en question.
    Là où il n'y a pas de solution, il n'y a pas de problème.

  4. #4
    Seb.26

    Re : Problème d'interruption C++ sur Raspberry

    Si tu veux du temps réel, installe FreeRTOS sur ton PI ...
    << L'histoire nous apprend que l'on apprend rien de l'histoire. >>

  5. A voir en vidéo sur Futura
  6. #5
    sandrecarpe

    Re : Problème d'interruption C++ sur Raspberry

    Bonsoir,
    Merci pour vos réponse.

    Je ne suis pas sur de bien comprendre ton problème
    Moi non plus en fait

    J'ai appris quelques trucs sur les interruptions sur Raspberry. Je ne pensais pas qu'il était si compliqué de faire une vraie interruption (au sens d'un µc). En fait j'ai pas du tout besoin de temps réel Seb.26, si l'interruption met 5 secondes (ce qui est déjà énorme) à arriver c'est vraiment pas un problème. Ca me ferait ***** de devoir installer un autre OS juste pour une simple interruption qui demande rien de compliqué.
    C'est une piste très intéressante l'histoire du thread, Vincent, je vais voir si je peux faire quelque chose du code source car la librairie ne fournie aucun retour sur ce thread, et encore plus étonnant, rien pour l'arrêter.

    Je mesure le temps que reste allumé mon tube fluo pour savoir quand est-ce que je dois le changer (je pourrais voir quand est-ce qu'il ne s'allume plus mais malheureusement c'est pas le bon critère ici). Donc rien de critique

    Si vous avez d'autre piste ou lien je suis preneur
    Dernière modification par sandrecarpe ; 09/05/2017 à 21h56.

  7. #6
    Seb.26

    Re : Problème d'interruption C++ sur Raspberry

    Dans ce cas pourquoi ne pas juste faire un Daemon qui scrute ton I/O toutes les secondes et qui compte le temps ou c'est allumé ? ...

    PS: pas très écolo ton truc, tu vas changer des tubes fluo juste car ils sont vieux ??? ... même s'ils marchent encore ... ... les constructeurs d'ampoules se sont embêtés à faire des ampoules de 1000h pour rien ...

    -> c'est quoi le but ultime de la manip ? ...
    -> et tu fais quoi si un tube fluo claque un peu avant les autres ? ...
    << L'histoire nous apprend que l'on apprend rien de l'histoire. >>

  8. #7
    sandrecarpe

    Re : Problème d'interruption C++ sur Raspberry

    Dans ce cas pourquoi ne pas juste faire un Daemon qui scrute ton I/O toutes les secondes et qui compte le temps ou c'est allumé ?
    Oui je pense que c'est que je vais devoir faire mais ça m'embête un peu, j'aime pas trop faire ce genre de truc dégueu

    pas très écolo ton truc, tu vas changer des tubes fluo juste car ils sont vieux ??? ... même s'ils marchent encore ... ... les constructeurs d'ampoules se sont embêtés à faire des ampoules de 1000h pour rien ...
    En fait c'est des tubes fluo spéciaux pour la culture de plantes exotiques. Le constructeur garanti un spectre pour un certain nombre d'heure. Au-delà, c'est comme-ci que les plantes étaient dans le noir ! Pourtant la lumière "fonctionne" encore

  9. #8
    Seb.26

    Re : Problème d'interruption C++ sur Raspberry

    Et ça vaudrait pas le coup de trouver une des fréquences de ton spectre qui te permettrait de surveiller l'état de santé de ton tube ?
    ... genre les IR, les UV, le bleu, le vert ...etc...

    Tu pourrais vachement optimiser ta conso de tubes ... ... et du même coup vérifier les dires du fournisseur ...
    << L'histoire nous apprend que l'on apprend rien de l'histoire. >>

  10. #9
    sandrecarpe

    Re : Problème d'interruption C++ sur Raspberry

    Citation Envoyé par Seb.26 Voir le message
    Et ça vaudrait pas le coup de trouver une des fréquences de ton spectre qui te permettrait de surveiller l'état de santé de ton tube ?
    ... genre les IR, les UV, le bleu, le vert ...etc...

    Tu pourrais vachement optimiser ta conso de tubes ... ... et du même coup vérifier les dires du fournisseur ...
    Heu je préfère racheter des tubes

  11. #10
    Seb.26

    Re : Problème d'interruption C++ sur Raspberry

    NB: et un bête compteur électrique ? ... ça mesure la durée d'utilisation (dans la plupart des cas) et ça coûte 15€ ...
    << L'histoire nous apprend que l'on apprend rien de l'histoire. >>

  12. #11
    sandrecarpe

    Re : Problème d'interruption C++ sur Raspberry

    Oui mais le Rasberry je l'ai déjà et fait partie intégralement du système, donc ça me coûte 0,0 €
    Parce qu'évidement il ne sert pas uniquement à mesurer combien de temps ma lumière est allumée, j'aurais pas payé un Raspberry 40 balle si c'était juste pour faire ça
    Dernière modification par sandrecarpe ; 11/05/2017 à 20h53.

Discussions similaires

  1. [Numérique] Problème UART picaxe - Raspberry
    Par sandrecarpe dans le forum Électronique
    Réponses: 9
    Dernier message: 03/01/2016, 10h10
  2. Réponses: 29
    Dernier message: 29/10/2014, 07h39
  3. problème avec raspberry pi need help freinds :D
    Par lotfimrad dans le forum Électronique
    Réponses: 0
    Dernier message: 19/03/2013, 01h49
  4. Probléme interruption
    Par invite225faa3f dans le forum Électronique
    Réponses: 2
    Dernier message: 04/05/2011, 12h09
  5. probleme interruption
    Par invite020e659a dans le forum Électronique
    Réponses: 3
    Dernier message: 26/06/2010, 23h29
Découvrez nos comparatifs produits sur l'informatique et les technologies.