Go Down

Topic: Interruption pas exécutée entièrement (Read 620 times) previous topic - next topic

vincelge

Sep 01, 2010, 04:52 pm Last Edit: Sep 01, 2010, 04:53 pm by vincelge Reason: 1
Bonjour à tous,
j'essaie de mettre en oeuvre les interruptions mais j'ai un soucis: la fonction appelée par l'interruption n'est pas toujours exécutée entièrement.

J'ai ce code:

Code: [Select]

     pinMode(contact_av_G,INPUT);
     digitalWrite(contact_av_G,HIGH); // active les R de pull-up
     attachInterrupt(0,int_rot_G,FALLING); // active les interruptions

// Traitement des interruptions:

void int_rot_G()
{
       status=2;
       Serial.println(">>>Inter G !!!");
       arret();
       
}


Sur l'entrée 2, j'ai un contact qui amène une masse lorsque je ferme un micro switch.
Sur la console, j'ai bien >>>Inter G !!! qui s'affiche, mais la fonction arret() n'est pas toujours exécutée et le prog continue à s'exécuter  >:(.

De quoi cela peut-il bien venir ???  :-/
Tous les jours, je roule en Electrique
Arretons de polluer !

Moi & mon Ardu

bonsoir,

désactive les interruptions le temps de traiter arret():
commande noInterrupts() en début de traitement de l'interruption
Réactive ensuite les interruptions à la fin de arret() avec la commande interrupts()

Gromain
"pour résoudre un gros problème, il est souvent plus facile de le diviser en petits problèmes élémentaires..."

projet domotique xPLDuino
IRC: freenode #xplduino

J_C

Même remarque que précédemment, avec peut être un effet de rebond sur le switch lors du contact (double contact), d'où deux interruptions successives...et pas le temps de finir la fonction entre temps.

A+
JC

vincelge

Merci pour les réponses, je vais essayer.
Par contre, si l'interruption était stoppée à cause d'un rebond, donc le redéclenchement de l'inter, la fonction devrait tout de même être complètement exécutée lors de la 2eme interruption, non ? Car à l'heure actuelle, je retourne dans la fonction loop, comme si rien ne s'était passé.

Je penchais plutôt pour un pb genre alim. L'appel de la fonction arret qui coupait  2 moteurs assez consommateurs, et qui aurait pu provoquer une fluctuation niveau alimentation. J'ai séparer l'alim de commande et l'alim de puissance sans résultats.

Je vais donc tester l'inhibition des interruptions.
Tous les jours, je roule en Electrique
Arretons de polluer !

Moi & mon Ardu

fdufnews

Quote
Par contre, si l'interruption était stoppée à cause d'un rebond, donc le redéclenchement de l'inter, la fonction devrait tout de même être complètement exécutée lors de la 2eme interruption, non ?

Il faudrait être certain que la gestion des IT est réentrante. Si quelqu'un à la réponse ....

Go Up