Bonsoir,
Mon projet est le suivant : gestion d'une activité sportive.
- au repos le module ne fait rien
- par le changement d'état sur une Entrée digitale je lance un dé-comptage ( il y aura l'électronique et le nombre de pins qui vont bien pour faire un affichage)
- Si tous les concurrents ont fini avant le temps limite je stoppe le dé-comptage et je fais une RAZ a l'aide d'une interruption : je veux stopper DEFINITIVEMENT le dé-comptage en cours.
Il doit y avoir une méthode bien mieux que de faire un reset.
Mes premiers essais me laissent a penser que l'interruption avec un Atmega 328 ne stoppe pas le programme en cours mais le suspend simplement ce qui fait qu'il reprend son cours dès que l'interruption cesse.
C'est le principe même d'une interruption

le programme principal est mis en pause et une fois le programme d'interruption finit on retourne au prog principal comme on la laisser avant l'interruption.
Sur le web j'ai trouvé cette solution :
//fonction pour un reset logiciel
void (*resetFunc)(void)=0; //Déclare resetFunc à l'adresse @ adress 0
Qui s'appelle dans la fonction qui va bien :
resetFunc();
Ma question :
Avez vous trouvé des pièges dans cette méthode et connaissez vous d'autres méthodes ?
N'utilise JAMAIS cette méthode ! Ceci n'est pas un reset hardware ! C'est un reset SOFTWARE, la mémoire n'est pas réinitialiser les registres restent en états, etc ... cela ne peut entrainer que des problémes. Si ton but est de forcer un reset hardware, active le watch dog et crée un boucle infini c'est radical.
PS dans la doc de l'ATmega328 il est précisé qu'il ne peut y avoir qu'une seule interruption active à la fois. Donc si "0" est déclenchée "1" ne pourra être actif que lorsque "0" cessera.
Comme pour tous µc il ne peut y avoir qu'une seule interruption simultané mais il est possible de d'arrêté une interruption par une autre interruption moyennant la fonction qui va bien.
Que veux-tu réellement quand tu parles de raz de programme ? que le sketch soit supprimé de l'Arduino ?
Est-ce que par "arrêter définitivement le programme", tu espères quand même pouvoir le relancer lors d'une session ultérieure sans réinstallation préalable ?
Veux-tu conserver la valeur présente sur l'afficheur lors de l'arrêt définitif ?
Je ne pense pas qu'il veut effacer le programme mais juste le faire repartir en mode "attente".