Je voudrais savoir combien de RAM j'utilise dans mon projet, pour autant que je sache, il n'y a aucun moyen de résoudre cela (à part le parcourir et le calculer moi-même). Je suis arrivé à un stade dans un projet assez important où j'ai déterminé que je manque de RAM.
J'ai déterminé cela parce que je peux ajouter une section, puis tout l'enfer se déchaîne ailleurs dans mon code sans raison apparente. Si je #ifndef
quelque chose d'autre, ça marche à nouveau. Il n'y a rien de mal à programmer avec le nouveau code.
J'ai soupçonné pendant un moment que j'arrivais à la fin de la mémoire RAM disponible. Je ne pense pas que j'utilise trop de pile (bien que ce soit possible), quelle est la meilleure façon de déterminer la quantité de RAM que j'utilise réellement?
En passant par et en essayant de le résoudre, j'ai des problèmes quand j'arrive aux énumérations et aux structures; combien de mémoire coûtent-ils?
première édition: ÉGALEMENT, j'ai tellement édité mon croquis depuis le début, ce ne sont pas les résultats réels que j'ai initialement obtenus, mais c'est ce que j'obtiens maintenant.
text data bss dec hex filename
17554 844 449 18847 499f HA15_20140317w.cpp.elf
16316 694 409 17419 440b HA15_20140317w.cpp.elf
17346 790 426 18562 4882 HA15_20140317w.cpp.elf
La première ligne (avec le texte 17554) ne fonctionnait pas, après beaucoup de modifications, la deuxième ligne (avec le texte 16316) fonctionne comme il se doit.
edit: la troisième ligne a tout fonctionne, lecture en série, mes nouvelles fonctions, etc. J'ai essentiellement supprimé quelques variables globales et du code en double. Je mentionne cela parce que (comme suspect), il ne s'agit pas de ce code par sae, il doit être sur l'utilisation de la RAM. Ce qui me ramène à la question d'origine, "comment la mesurer au mieux". Je vérifie toujours quelques réponses, merci.
Comment puis-je réellement interpréter les informations ci-dessus?
Jusqu'à présent, ma compréhension est:
`TEXT` is program instruction memory
`DATA` is variables (unitialised?) in program memory
`BSS` is variables occupying RAM
puisque BSS est considérablement inférieur à 1024 octets, pourquoi le second fonctionne-t-il, mais pas le premier? Si c'est le cas, les DATA+BSS
deux occupent plus de 1024.
ré-éditer: j'ai édité la question pour inclure le code, mais maintenant je l'ai supprimé car cela n'avait vraiment rien à voir avec le problème (à part peut-être de mauvaises pratiques de codage, des déclarations de variables et autres). Vous pouvez consulter le code en parcourant les modifications si vous voulez vraiment le voir. Je voulais revenir à la question actuelle, qui était plus basée sur: Comment mesurer l'utilisation de la RAM.
String
type dans vos programmes? Ceci est connu pour effectuer des allocations et des libérations de mémoire dynamique fréquentes, ce qui peut fragmenter le tas au point où vous ne pouvez plus conserver de mémoire.
String
s à cause des frais généraux. Je suis heureux de travailler avec des tableaux de caractères, cela dit, je définis presque toujours tous mes tableaux de caractères avec une taille fixe (pour le moment, j'ai un tableau de 1 octet qui n'est pas uniquement parce que je change la longueur du contenu pour différentes recompilations.