Go Down

Topic: Reset Software. (Read 4 times) previous topic - next topic

skywodd


Quote
Ton commentaire me laisse penser que je risque d'avoir des resets intempestifs ("réarmer périodiquement"?).

Le watchdog est un temporisateur qui doit être remis à zéro avant la fin de sa période de comptage sinon il reset la carte.
Si tu programmes un watchdog de 30ms comme dans le code que tu donnes en exemple il faut le réinitialiser avant l'échéance de ces 30ms. ce qui veut dire que tu dois avoir une fonction dans ta boucle loop qui remette à zéro le watchdog et tu dois t'assurer qu'en toutes circonstances ta boucle s'exécute en moins de 30ms.

Il veut faire un reset hardware depuis le software justement.

En activant le watchdog avec un timeout 30Ms et en créant une boucle infini juste derrière il force un reset hardware au moyen du watchdog.
Lors du reset le watchdog est désactivé par le bootloader (voir même par le fusible WDTON=1) ou au pire par la ligne que je donnai tout à l'heure.
Donc pas de réarmement nécessaire.

Après c'est vrai que la gestion du rollover de millis() serait bien propre qu'un simple reset.
Des news, des tuto et plein de bonne chose sur http://skyduino.wordpress.com !

Pac2Kro

#41
Jan 13, 2013, 01:53 pm Last Edit: Jan 13, 2013, 02:42 pm by Pac2Kro Reason: 1
Merci à vous deux pour ces explications claires et précises. Je regarde la solution logicielle du rollover de millis().



Edit : j'utilise bien millis() sous la forme :
Code: [Select]
if ( (millis() - date_avant) > TEMPS) )
Par contre, je ne savais pas qu'en C, pour une variable unsigned long, le résultat d'une soustraction donnant un résultat négatif, il est ajouté 2^32 (modulo 2^32). Donc pas de gestion à gérer lorsque millis() repasse à zéro.

Ryan_MX

Voici une méthode qui pourrait vous intéresser:
void(* resetFunc) (void) = 0; //declaration of the function

resetFunc();  //call reset

skywodd


Voici une méthode qui pourrait vous intéresser:
void(* resetFunc) (void) = 0; //declaration of the function

resetFunc();  //call reset

Très mauvaise idée car cela ne replace pas les valeurs par défaut des registres ;)
Des news, des tuto et plein de bonne chose sur http://skyduino.wordpress.com !

Ryan_MX

Pourtant elle marche pour mon appli, j'aimerais une explication  :smiley-roll-sweat:

Go Up