Auteur Sujet: A propos de la mémoire  (Lu 4361 fois)

Minimir09

  • Jr. Member
  • **
  • Messages: 53
    • Voir le profil
A propos de la mémoire
« 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 ...

La perfection n’existe pas sur Terre … Mais alors, d’où est-ce que je viens ?

Pierre59

  • Sr. Member
  • ****
  • Messages: 321
    • Voir le profil
Re : A propos de la mémoire
« Réponse #1 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

msport

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 2218
  • HO avec DCC++ en DIY Réseaux très éphémères
    • Voir le profil
Re : A propos de la mémoire
« Réponse #2 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
Cordialement

Pierre59

  • Sr. Member
  • ****
  • Messages: 321
    • Voir le profil
Re : A propos de la mémoire
« Réponse #3 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

chris_bzg

  • Global Moderator
  • Sr. Member
  • *****
  • Messages: 310
    • Voir le profil
Re : A propos de la mémoire
« Réponse #4 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 !
« Modifié: novembre 24, 2020, 12:01:08 pm par chris_bzg »