IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Arduino Discussion :

Occupation mémoire élevée


Sujet :

Arduino

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Coach
    Inscrit en
    Novembre 2019
    Messages
    228
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Coach

    Informations forums :
    Inscription : Novembre 2019
    Messages : 228
    Par défaut Occupation mémoire élevée
    Bonjour,

    Je touche à la fin de mon programme sur Arduino Mega Pro Mini et heureusement, car lors de ma dernière compilation (sans erreur), je viens d'avoir le message suivant:

    Le croquis utilise 24614 octets (9%) de l'espace de stockage de programmes. Le maximum est de 253952 octets.
    Les variables globales utilisent 6514 octets (79%) de mémoire dynamique, ce qui laisse 1678 octets pour les variables locales. Le maximum est de 8192 octets.
    La mémoire disponible faible, des problèmes de stabilité pourraient survenir.


    Qu'en pensez-vous ?

    Ca me paraît beaucoup car je suis loin d'utiliser toutes les fonctions ou pins de la MEGA, dont je me dit que ceux qui la poussent dans ses retranchements doivent être vite bloqués... sauf s'il existe des solutions ?

    Est-ce que de nombreux "Serial.println("textes divers et variables diverses")" utilisés pour le déboguage du programme via le Moniteur Série peuvent contribuer à l'occupation mémoire élevée ?

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 134
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 134
    Par défaut
    Bonjour,
    Citation Envoyé par grizzli06 Voir le message
    Est-ce que de nombreux "Serial.println("textes divers et variables diverses")" utilisés pour le déboguage du programme via le Moniteur Série peuvent contribuer à l'occupation mémoire élevée ?
    Certainement.

    Essaye de placer les chaines dans la mémoire flash comme cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Serial.println(F("textes divers et variables diverses"))
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  3. #3
    Membre confirmé
    Homme Profil pro
    Coach
    Inscrit en
    Novembre 2019
    Messages
    228
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Coach

    Informations forums :
    Inscription : Novembre 2019
    Messages : 228
    Par défaut
    Certainement.
    ah super Al1_24, dans ce cas c'est très surement dû à cela, car j'ai conservé toutes les infos de déboguage depuis le début (même sur les parties qui sont désormais au point), et il y en a un sacré paquet...

    Essaye de placer les chaines dans la mémoire flash comme cela :
    Serial.println(F("textes divers et variables diverses"))
    je ne connaissais pas cette astuce; j'imagine que tu veux me faire faire ça parce que tu as vu que je n'utilisais que 9% de l'espace de stockage des programmes (contre 79% pour la mémoire dynamique), c'est ça ?

    ça pourrait avoir quoi comme "effets secondaires" de les mettre en Flash ?

    Et avec une RAM occupée à 79%, y a-t-il vraiment un risque que le programme plante comme le dit le compilateur ?

    Mille mercis pour votre expertise ! Ce Forum devrait être déclaré d'utilité publique et être remboursé par la Sécu ...

  4. #4
    Membre confirmé
    Homme Profil pro
    Coach
    Inscrit en
    Novembre 2019
    Messages
    228
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Coach

    Informations forums :
    Inscription : Novembre 2019
    Messages : 228
    Par défaut
    L'efficacité de ta solution est impressionnante !

    je suis passé de 79% d'occupation de la mémoire dynamique à 15% !!

    Le croquis utilise 25124 octets (9%) de l'espace de stockage de programmes. Le maximum est de 253952 octets.
    Les variables globales utilisent 1274 octets (15%) de mémoire dynamique, ce qui laisse 6918 octets pour les variables locales. Le maximum est de 8192 octets.



    donc plus aucun problème, et encore je ne l'ai appliquée qu'à des Serial.println ("texte"), et pas à celles où il u a une variable car je ne sais pas si c'est possible ??

    La taille occupée par le croquis reste à 9% alors que je m'attendais à ce qu'elle augmente, mais je dois me mélanger les pinceaux entre les différents types de mémoire, non ?

    Je passe en résolu et Merci

  5. #5
    Expert confirmé

    Homme Profil pro
    mad scientist :)
    Inscrit en
    Septembre 2019
    Messages
    2 899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : Septembre 2019
    Messages : 2 899
    Par défaut
    La taille occupée par le croquis reste à 9% alors que je m'attendais à ce qu'elle augmente
    Dans votre code d'origine la chaîne est stockée en Flash puis emmenée en SRAM pour être traitée. Donc vous payez deux fois le prix. Avec la macro F("....") vous ne ramenez pas le contenu en SRAM, vous obtenez un pointeur vers la mémoire FLASH. Bien sûr il faut alors que la fonction appelée sache traiter cela. print() sait le faire, donc c'est bien pratique.

    et pas à celles où il u a une variable car je ne sais pas si c'est possible
    Vous trouverez plus d'info dans la doc sur PROGMEM

  6. #6
    Membre confirmé
    Homme Profil pro
    Coach
    Inscrit en
    Novembre 2019
    Messages
    228
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Coach

    Informations forums :
    Inscription : Novembre 2019
    Messages : 228
    Par défaut
    Merci JayM !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 5
    Dernier message: 02/10/2006, 13h35
  2. Utilisation mémoire élevée
    Par Shinjuku dans le forum MFC
    Réponses: 1
    Dernier message: 22/05/2006, 07h37
  3. Réponses: 11
    Dernier message: 13/01/2006, 15h30
  4. Occupation mémoire
    Par Débéa dans le forum Oracle
    Réponses: 6
    Dernier message: 24/08/2005, 15h24
  5. différence entre varchar et text pour l'occupation mémoire
    Par champion dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 16/12/2004, 18h02

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo