LOCODUINO

Parlons Arduino => Composants => Discussion démarrée par: Minimir09 le novembre 24, 2020, 08:37:42 am

Titre: A propos de la mémoire
Posté par: Minimir09 le novembre 24, 2020, 08:37:42 am
Bonjour à toutes et tous,

J'ai écris un croquis (pour le débutant que je suis, c'est pas si mal !) et je sais qu'il peut être simplifié.
Je me suis trouvé bloqué par la mémoire (à cause de ma mauvaise programmation !) mais ça m’amène à une réflexion ..
le croquis utilisait 90% de la place disponible sur une UNO R3. J'ai voulu créer un menu principal, page 1, page 2 etc.
Existe-t-il une possibilité d'augmenter, d'une façon ou d'une autre cette mémoire disponible ...
J'attends vos réponses avec impatience ...

Titre: Re : A propos de la mémoire
Posté par: Pierre59 le novembre 24, 2020, 09:45:30 am
Bonjour

Un Arduino UNO a deux types de mémoires, une mémoire pour le programme et une mémoire pour les données, c'est souvent cette dernière qui pose problème car elle est très limitée (2048 octets pour un UNO), un palliatif est de mettre les chaines de caractères dans la mémoire programme.

Cordialement

Pierre
Titre: Re : A propos de la mémoire
Posté par: msport le novembre 24, 2020, 09:59:44 am
Bonjour,

Un UNO reste un UNO, pas d'autre solution que de changer de carte si ça coince toujours après avoir fait le ménage dans son programme.

cf Pierre59 :
- en utilisant Serial.print(F("Hello World")) (Flash/RAM)
mais aussi
- en ne multipliant pas les variables (en les réutilisant)
- en utilisant des bibliothèques peu gourmandes
Titre: Re : A propos de la mémoire
Posté par: Pierre59 le novembre 24, 2020, 10:05:08 am
On peut aussi limiter au maximum les variables globales en utilisant des variables locales aux fonctions.

Pierre
Titre: Re : A propos de la mémoire
Posté par: chris_bzg le novembre 24, 2020, 11:53:11 am
Votre croquis utilise 90% de la mémoire, mais laquelle ? Je pense qu'il doit s'agir de la SRAM car c'est bien elle qui est la plus limitative.
Quand on veut utiliser un microcontrôleur, on doit apprendre à économiser l'espace mémoire SRAM et pour cela, il faut prendre les bons réflexes dès le début :
- déclarer les variables selon le type qui leur correspond. Par exemple, pas besoin de 4 octets (unsigned long) pour déclarer un numéro de broche car un seul octet (byte) suffit.
- ensuite, déclarer comme const tout ce qui est constant
- utiliser les #define au lieu de variables
- enfin, mettre certaines données constantes en mémoire flash, notamment les chaînes de caractères ou les tableaux qui prennent de la place, beaucoup de place.
Pour économiser l'espace mémoire programme (Flash), on peut réfléchir à la façon dont on code ; cela prend plus ou moins de place.
Par exemple, mais réservé à ceux qui ont de l'expérience, on peut pour compacter un code utiliser l'assembleur, mais le travail à fournir doit en valoir la chandelle car là, il faut tout prévoir par soi-même, ce qui demande une grande expertise. Par exemple, le programme Blink fourni en exemple dans l'IDE, utilise 924 octets de flash. J'ai écrit un programme qui n'en utilise que 646 en manipulant directement les registres, puis un programme en assembleur qui n'en utilise que 474 ! C'était juste pour me rendre compte, mais je ne me vois pas écrire tout en assembleur des programmes plus sophistiqués comme on en publie dans LOCODUINO.
Le succès de l'IDE vient justement du fait qu'il simplifie la programmation alors on ne va pas revenir en arrière au début des PIC et de leur programmation avec MPLAB !