Bonjour,
Je viens vous demander un conseil, j'ai vu une carte d’évaluation ARM Cortex qui pourra convenir à notre application mais je me pose la question sur la mémoire.
Dans un premier temps il y a 2 types de mémoires sur cette carte RAM et la Flash. Mais quand on programme est ce qu'on a la possibilité de choisir où on peut stocker les données ou bien c'est le µP qui gère lui même. Par exemple à un moment donné du programme, est ce qu'on peut interroger le µP pour savoir combien il reste de la mémoire pour connaitre les recoures restantes.
Dont du coup je ne suis pas maître de la mémoire du µP, c'est lui qui choisit tout seul pour optimiser le fonctionnement ? Je voulais savoir cette information pour savoir si j'ai assez de mémoire dans mon µP pour gérer le programme.
Vous êtes un peu maître quand même, c'est vous qui codez, mais il n'y a pas un vrai OS avec gestion de mémoire virtuelle et un swap par exemple, donc voyez la Flash comme un disque dur sur lequel les données qui ne changeront pas sont stockées. il est possible sur certains modules d'utiliser la flash pour y mettre des fichiers - cf littleFS ou SPIFFS.
Non, c'est le linker qui place les objets en fonction de leur type :
variables globales : RAM
code, constantes : FLASH
Sur ce genre de processeur, il est également possible de charger la totalité en RAM, mais cela nécessite de modifier le fichier de lien. Et le code se volatilisera à la première coupure d'alimentation.
L'occupation mémoire est affichée en fin de compilation / lien. Si l'une des sections déborde, la compilation échoue.
En général si l'on cherche à connaître la place disponible en RAM, c'est que l'on a utilisé l'allocation mémoire dynamique, technique que je déconseillerais totalement à un débutant.
D'ailleurs, dans l'industrie, il n'est pas rare que l'on s'interdise d'utiliser l'allocation dynamique.
Pour quelle raison ? Si on a un tableau avec 1000 données qu'on utilise pour stocker les datas par exemple et lorsqu'on n'a plus besoin à un moment on peut le vider complètement non ?
Et par ailleurs, j'ai déjà utilisé l'allocation dynamique à vrai dire. C'est pas tellement plus sorcier
Oui, mais il faut avoir une maîtrise absolue sur l'allocation et libération, car si l'on oublie de libérer le bloc après usage, la zone mémoire reste occupée. Si cet oubli est récurrent, on arrive à saturer le tas (plus de mémoire disponible).
ça ne vaut pas le coup ici car on a 64ko de RAM et 256 Flash pourquoi prend le risque de mettre le code dans la RAM ? Pour la rapidité de l'exécution ? Je ne vois pas quel est son intérêt de mettre le code dans la RAM ?
rapidité - on charge un module on l'exécute - sécurité avec effacement si on coupe le courant, ... c'est juste une possibilité. A l'utilisateur de décider s'il veut en profiter
Comme on ne sait pas trop ce que vous voulez faire, ni votre niveau de compétence, difficile de faire des réponses autres que générales
Je vous remercie beaucoup de votre participation et j'ai pu obtenir les informations que je recherche. Vous êtes superbes (rapidité et compétences...). Je vous souhaite une bonne journée et à une prochaine fois.