Go Down

Topic: Comment puis-je faire une reset manuel sur un Leonardo (Read 4265 times) previous topic - next topic

fdufnews

En fait les questions à se poser c'est:

  • Qu'elle est l'intérêt d'un reset?

  • Pourquoi est-il nécessaire de le faire?



Parce que, lorsqu'un programme fonctionne bien, il n'est absolument pas nécessaire de faire un reset.
De la à conclure qu'il y a un problème de programmation qui va être masqué par ce reset. On en arrive à la question quel est le bug qui t'oblige à faire un reset et qu'il serait peut bon de chercher au lieu de perdre du temps à essayer de réinitialiser la carte.

B@tto


Salut,
Merci. Oui j'aivais aussi trouvé ceci. C'est de là que j'ai eu ce questionnement.

@_pepe_
Quote

Sinon, pour éviter de devoir faire face à une coupure de la liaison USB, on peut câbler un bouton-poussoir sur une entrée de l'Arduino Leonardo, et lancer une routine de réinitialisation logicielle quand on appuie dessus.

Pour plus de détails sur la façon de procéder, il faudrait connaître le besoin qui mène à utiliser une telle procédure, et le contexte de fonctionnement de la carte (variables, interruptions, périphériques présents, actuateurs éventuels...).


En fait ce que je pourrai faire, c'est mettre la pin 12 par exemple
Code: [Select]
pinMode(12,OUTPUT);
digitalWrite(12,LOW);

Mettre un cable entre la pin 12 et la pin rst
Puis dans ma loop()
Code: [Select]

void serialhwread(void)
{
  int i=0;
  char inSerial[5]; //inSerial[20]
  boolean error = false;
 
  if (Serial.available() > 0){   
     
      while (Serial.available() > 0) {
        inSerial[i]=(Serial.read());
        delay(10);
        i++;     
       }
   
    inSerial[i]='\0';
   
    /* REST THE BOARD */
    if(!strcmp(inSerial,"reset"))
    {
        Serial.println("> Reseting the board");
digitalWrite(12,HIGH);
delay(1500)
digitalWrite(12,LOW);
    }
   
   
    // Vide inSerial
    inSerial[0]='\0';
  }
}


Quand je tape 'reset' dans mon terminal, mon Leonardo devrait reseter sans perdre la connexion USB.
N'es-ce pas?



Pas de rapport, je te parle de la deuxième méthode du tuto qui est purement software. La tienne permet un reset hard par le soft.


Par contre les plus calés me moi statueront sur la "propreté" de la méthode puisqu'il me semble que ce n'est pas un pur reset puisque la RAM n'est pas remise à zéro notamment


C'est inexact. Dans tous les cas, la mémoire est réinitialisée par la routine exécutée au démarrage (voir __do_clear_bss ci-dessous). Fort heureusement, car l'état de la RAM est aléatoire après une mise sous tension de la carte.



Justement je me disais que peut-être cette routine n'était pas executée du fait de la méthode employée. Mais tant mieux si c'est le cas :)

Et je confirme qu'elle marche, je bosse sur un projet actuellement ou j'avais par erreur pointé une fonction sur l'adresse 0 et évidemment ça rebootait !
Blog électronique : battomicro.wordpress.com
Photographie : www.interactive-celebration.fr
Fablab de Montpellier : www.labsud.org

_pepe_

Supprimé

Go Up