Go Down

Topic: [resolu] Variable persistante (Read 1 time) previous topic - next topic

Clemzo

Apr 23, 2015, 11:31 pm Last Edit: Apr 25, 2015, 07:52 pm by Clemzo
Bonjour,

Je débute sur Arduino depuis un mois et sur C par la même occasion, d'ou probablement de grossières erreurs de langage.

Par variable persistante (terme très certainement impropre), je veux dire une variable qui serait déclarée dans le "setup" :
Par exemple :
Code: [Select]
String jour = "lundi";

Cette variable serait modifiée dans le "loop" :
Code: [Select]
Serial.println (jour); // Affiche lundi
jour = "mardi";


et souhaiterais que lors d'un redémarrage (après coupure d'alimentation), le Serial.print puisse m'afficher mardi au lieu de lundi.

J'ai tenté de voir si je ne pouvais pas régler ce PB avec les pointeurs, mais je ne m'en sort pas.

Merci pour votre aide.

bricoleau

Oulah

C'est exactement comme si je demandais :

J'ai mon PC allumé, j'ouvre un éditeur de texte, je saisis un texte sans sauvegarder mon document, j'éteins brusquement le PC et quand je le rallume, je voudrais retrouver mon document dans l'état où il était.

Réponse à ton avis ?

Les données que tu veux conserver après coupure d'alimentation doivent être écrites sur un support non volatile.
Dans le cas de l'arduino :
- eeprom (limité en nb d'écritures)
- mémoire flash (pas très simple et pas conseillé)
- SDCard (si module présent)
- RAM non volatile d'un DS1307 (limitée à 56 octets, et à condition d'avoir une pile en état)
 
Tutoriels arduino : http://forum.arduino.cc/index.php?topic=398112.0

patg_

Bonjour,
Comme l'indique Bricoleau tu peux commencer par essayer d'utiliser l'EEProm de l'Arduino, c'est le plus simple.
Mais comme toute mémoire de type flash, elle est limitée en nombre d'écritures (environ 100 000 écritures si j'ai bonne mémoire), au-delà elle n'est plus fiable.
Il faut donc faire très attention à l'usage qu'on en fait (limiter les écritures au strict nécessaire).

Pour une carte SD le problème existe aussi mais est moins visible car il me semble que la carte intègre un mécanisme de "répartition de l'usure" de la flash qui du point de vue utilisateur ne provoque qu'une diminution progressive de capacité utilisable.

Beaucoup d'horloges RTC intègrent aussi une mémoire utilisable. C'est le cas du DS1307 cité par Bricoleau, mais aussi de certaines de breakout-boards à base de DS3231 pour citer celle que je viens de commander (flash de 4KO, 1 000 000 de cycles d'écriture, rétention de données garantie 100 ans).

Mes Arduineries: http://breizhmakers.over-blog.com/

bricoleau

Hep tu m'intéresses avec ton ds3231 couplé à une flash. Ça se trouve où ?
Tutoriels arduino : http://forum.arduino.cc/index.php?topic=398112.0

_pepe_

#4
Apr 24, 2015, 02:45 pm Last Edit: Aug 20, 2018, 02:00 am by _pepe_
Supprimé

_pepe_

#5
Apr 24, 2015, 03:13 pm Last Edit: Aug 20, 2018, 02:00 am by _pepe_
Supprimé

patg_

Le circuit intégré DS3231 ne contient qu'une horloge de précision. Mais on peut trouver des modules intégrant à la fois ce circuit et une mémoire Flash série (AT24C32 ou autre).

Une recherche sur Gogol permet d'en trouver immédiatement (exemple)
C'est exactement celui que j'ai commandé :)
Mes Arduineries: http://breizhmakers.over-blog.com/

bricoleau

Ok merci, mais cela ne correspond pas encore à mon besoin, pourtant tout simple.

J'ai besoin d'un circuit RTC avec une NVRAM comme le DS1307, mais précis comme un DS3231.

A chaque seconde, mon arduino lit l'heure du RTC et la réécrit plus loin dans la NVRAM.
Cela me permet de tracer avec précision les coupures électriques.

Mais cela fait 365*24*60*60 = 31 millions d'écritures pas an
L'avantage de la NVRAM est qu'il n'y a pas de limite de cycle d'écriture, puisque c'est une RAM maintenue sous tension grâce à une pile.
Tutoriels arduino : http://forum.arduino.cc/index.php?topic=398112.0

Clemzo

Bonjour messieurs et merci pour vos réponses.

Je pense que j'ai effectivement besoin d'écrire mes variables, en flash ou en EEprom.
Mon idée de base était de modifier les variables ou constantes décalrées dans mon programme à l'endroit ou il est stoké. (cette opération de "réécriture" ne serait que très rare, je ne pense donc pas à terme avoir de soucis avec un cota d'écritures).

Pourriez-vous dans cet optique, m'indiquer comment je pourrais procéder dans mon exemple ci dessus pour modifier le contenu "en dur" de ma variable jour ?

Merci encore pour votre aide.

_pepe_

#9
Apr 25, 2015, 11:09 am Last Edit: Aug 20, 2018, 02:00 am by _pepe_
Supprimé

Clemzo

#10
Apr 25, 2015, 12:30 pm Last Edit: Apr 25, 2015, 04:31 pm by Clemzo
Merci,

suite à quelques recherches mon besoin s'affine.
Finalement écrire et relire dans l'EEprom ne semble pas nécessaire et je n'ai pas besoin d'écrire dans l'urgence (pas sur coupure de courant).
j'ai besoin d'écrire à un moment bien précis (maîtrisé) dans la mémoire Flash et plus particulièrement dans la partie ou sera stoké le contenu de la variable "jour" comme si je modifiais mon programme originel.

Je ne demande pas une solution toute faite, mais je recherche le mécanisme (description) qui me permettra d'y arriver, car mes premiers essais avec les pointeurs ne m'ont pas permis d'atteindre mes objectifs, très certainement à cause de mon inexpérience.

_pepe_

#11
Apr 25, 2015, 06:26 pm Last Edit: Aug 20, 2018, 02:00 am by _pepe_
Supprimé

Clemzo

En effet cela n'a pas l'air simple, mais c'est exactement ce que je cherche.

Merci beaucoup pour ce coup de main.

Go Up