attachInterrupt & detachInterrupt VS interrupts & noInterrupts

Bonjour, par rapport à mon projet de VMC, je me pause une question concernant les interruptions

en effet je ne fait pas d'interruption tout le temps - vu que je n'en ai pas besoin - donc dans mon code je fait: attachInterrupt puis detachInterrupt

Mais il existe les commandes suivantes: interrupts et noInterrupts [u]au delà du fait que ces fonctions lance et arrête toutes les interruptions de la carte arduino[/u], je me pause la question de la différence avec les fonctions attachInterrupt & detachInterrupt?

y a t'il une stratégie d'économie d'énergie? de code? de rapidité d'exécution? ou autre?

connaissez vous un lien d'une personne s'étant déjà tripoté les méninges sur ce sujet?

merci

attach interrupt affecte une routine à un interruption ( pour uno, ce sera soit INT 0 soit INT 1 )

interrupt autorise les interruptions qui ont été initialisées ( affectées )

no interrupt interdit les interruptions .

pour une question d'économie d'énergie en vue de ménager la pile d'alimentation, il y a le watchdog pour la fonction sleep

le fait de faire attach interrupt puis détache interrupt ne sert à rien dans ton cas.

( tu affecte puis désafecte une routine à une interruption)

c'est interrupt autorise et interrupt interdit qui fait qu'une interruption attribuée est prise en compte ou pas

Attention si tu interdit globalement les interruptions il peut y avoir des dégats colatéraux. Les fonctions Wiring/arduino forment un ensemble complexe qu'il est délicat de modifier sans en avoir la maîtrise.

Les fonction attach.... et detach..... font les actions suivantes : attach... - configure les registres pour autoriser [u]la bonne[/u] interruption. - appelle la macro "ISR" de l'avr-libc avec le bon vecteur. Dans le corps de l'ISR elle place un appel à ta routine d'interruption. detach..... - fait une raz sur les registres qui gèrent les interruptions.

Bien entendu on peut faire la même chose sans passer par les fonctions arduino : ce sera moins limpide mais plus optimisé coté code.

Il y a un moyen d'optimiser la consommation. Dans un micro-contrôleur il y a ce qu'on appelle les périphériques (peripherals). C'est l'UART, le convertisseur analogique/digital, le SPI etc. Tous ces périphériques peuvent être "éteints" individuellement. Plus d'informations dans la datasheet , pour un Atmega328p -> chapitre 10 "Power management"

Il ne faut pas mettre la charrue avant les bœufs : ce n'est que quand tout fonctionne qu'on peut penser à optimiser la conso et pour valider il faut être bien certain d'avoir testé tous les cas.

Un peu de doc sur les interruptions "en mode registre" : http://forum.arduino.cc/index.php?topic=100906.0