Reboot programme à la ligne 10

Bonjour à tous,

Je sais qu'il est possible de redémarrer le programme depuis le début avec par exemple :

asm volatile("jmp 0x00");

Mais est il possible de le faire redémarrer à la ligne N° 10 par exemple ?
Car ça me permettrais de conserver quelques variables au redémarrage.

Merci d'avance.

Tu parles de quelle carte Arduino ?

C'est une Arduino Mega 2560.

Je ne sais pas, mais j'imagine qu'il faudrait savoir à quelle instruction du code assembleur correspond la ligne 10 de ton code C

je suppose que du coup c'est à la ligne 10 de l'assembleur, car un jump à l'adresse 0, ne t'amène pas exactement à la lige 0 du programme C, en admettant que cela à un sens

Bonjour,

Ce que tu veux faire existe en C/C++. C'est la fonction longjmp() et son corollaire setjmp().
Cependant c'es un peu comme goto qui existe mais qu'on utilise très très rarement.
En général si on ressent le besoin d'utiliser cette fonction c'est que son programme est plus ou moins bancal.

Salut.
Au démarrage, toutes les variables globales et statiques sont réinitialisées :

  • à ZERO si rien n'est précisé
  • à la valeur prévue lors de la déclaration
int var;         // remise à ZERO au startup
int var2 = 100;  // remise à 100 au startup

Le startup est exécuté avant Setup().
Aucune chance que ce que tu demandes soit réalisable, sauf si tu utilises l'EEPROM pour y stocker des variables.

OUi Iesept et terwal je vous rejoins complètement sur votre réflexion.

Bancal mon programme, kamill, il le le devient de plus en plus, car j'ai un problème de stabilité réseau (connexion à une base de données SQL) que j'essaie de contourner par un redémarrage du programme pour relancer la connexion réseau et au serveur de la base de données quand il vient de se déconnecter.
Mais cette discussion m'amène à revoir un peu ma copie, car en faite c'est une partie du setup qu'il faut que je relance, donc je vais créer une fonction avec ce que j'ai besoin que j'appellerai.

Oui hbachetti, j'avais bien ça en tète, et c'est pour cela que je ne voulais pas redémarrer en debut de programme et ni faire un reset.

vous feriez mieux de corriger le problème de stabilité...

Sinon pour que les données survivent à un reboot sur une MEGA, il faut écrire les données en EEPROM et les relire ensuite dans le setup(). (100,000 écritures max à la même adresse donc attention à ne pas trop écrire en EEPROM)

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.