[Résolu : chaines carac en flash] Optimisation mémoire et variables globales

Bonjour à tous,

Je suis en train de faire la partie gestion d'une carte 8 relais connectée à arduino UNO disposant d'un shield ethernet

J'ai réussi à faire mon programme avec le site web, et ça fonctionne, mais j'ai une alerte lors du téléversement sur l'utilisation mémoire.

Le croquis utilise 12862 octets (39%) de l'espace de stockage de programmes. Le maximum est de 32256 octets.
Les variables globales utilisent 1793 octets (87%) de mémoire dynamique, ce qui laisse 255 octets pour les variables locales. Le maximum est de 2048 octets.
La mémoire disponible faible, des problèmes de stabilité pourraient survenir.

Et effectivement la stabilité s'en fait ressentir, après 5 ou 6 relais allumés le serveur web ne répond plus et l'arduino se fige, l'alimentation des relais se fait via une alim externe 5V j'exclus donc un soucis de consommation.

J'ai posté mon code en fichier joint, j'ai tenté d'optimiser les types de variables et j'ai remplacé les int par des bytes mais pas de changement, j'ai aussi tenté de supprimer des variables globales comme le numéro des relais (pinRelais1 à 8) en le mettant en 'dur' mais là idem pas de changement et je ne comprends pas trop pourquoi vu que j'ai supprimé des variables...

Là ou je ne comprends pas c'est qu'en supprimant ces variables j'ai toujours la même utilisation mémoire, je n'ai surement pas compris quelques chose mais je trouve pas non plus que mon programme soit particulièrement gourmand en grosses variables avec des bytes et booleans

Si c'est possible de m'éclairer, merci bien.

code.txt (10.6 KB)

hello
l'affichage de chaines............. :slight_smile:

serial.print ( "xxx");
serial.print (F(xxx"));

ethernet_8_relais.zip (2.09 KB)

Bonjour,

Que tu déclares tes constantes numérique en const ou en #define, elles ne seront pas instanciées par le compilateur , donc ça ne fera pas de différence.
Par contre ou tu peux gagner beaucoup de ram c'est en implantant tes constantes chaine en flash comme ceci:

      client.print(F(" <a href=?61 target=_self >On</a>"));

Super ! Merci à vous deux, je comprends mieux !
Merci beaucoup !