SRAM moi pas comprendre!

Salut à tous

Voilà j’avais presque fini mon programme quand je me suis aperçu qu’il n’arrivé plus à écrire sur la carte SD!

J’ai donc récupéré la librairie FreeMemory pour savoir si ce n’était pas la mémoire qui était saturé…

Mon programme fait 25Ko est il tourne avec 234octet restant!
Avec 304octets il arrive à écrire sur la carte!

Mais en faisant d’autre test je me suis aperçu que la mémoire diminué en fonction du nombre de ligne et non du nombre est de la taille des variable, c’est la que je ne comprend pas! Quelqu’un pourrait il m’expliqué???

Un exemple:

Bonsoir,
Ta carte Arduino dispose de 3 types de mémoire de stockage, à savoir:

  • la flash memory pour stocker ton programme
  • la SRAM pour le stockage de tes variables
  • la EEPROM pour le stockage de données et qui sont conservées même hors tension.

La valeur de ces mémoires dépend de la carte utilisée.
Pour la UNO
Flash Memory = 32 kO
SRAM = 2 kO
EEPROM = 1 kO
Pour la MEGA
Flash Memory = 256 kO
SRAM = 8 kO
EEPROM = 4 kO

Attention : il ne faut pas mélanger mémoire programme et mémoire variable
@+

Je n'est pas confondu!! rassure toi, Je fais attention à chaque fois que je déclare une variable à savoir si le type utilisé est le bon. Sa m'a d’ailleurs déjà joué des tours à force de toujours faire au plus juste (un -14 avec un word par exemple!!).

Mais je n'avais pas compris/fait attention que les librairie importé allais en mémoire, et que les "Serial.print("truc");" aussi , d’ailleurs j'ai remplacé ceci par "Serial.print(F("truc"));" est j'e suis passé de 235 octet de libre à 721 !

D'ailleurs je pense qu'on ne le dit pas assez dans les forum/tuto/etc de faire attention au Serial.print bouffeur de mémoire en plus de bien choisir ses type de variables, j'ai toujours pensé que c'était juste pour avoir un "visuel du programme".

Bon du coup j'ai réglé mon soucis moi......

rabillou: Mais je n'avais pas compris/fait attention que les librairie importé allais en mémoire, et que les "Serial.print("truc");" aussi , d’ailleurs j'ai remplacé ceci par "Serial.print(F("truc"));" est j'e suis passé de 235 octet de libre à 721 !

Lorsqu'on parle de mémoire il est préférable de préciser de laquelle on parle. Là je suppose que tu parles de la RAM.

Les librairies importées vont dans la flash comme le reste du code mais elles consomment aussi de la RAM. Par exemple : Serial consomme de la RAM car elle déclare en RAM un tampon de réception et un tampon d'émission où sont stockées les données qui transitent par la liaison série. La Librairie SD consomme aussi pas mal de RAM car les accès à la carte SD se font par blocs de 512 octets.