Est-il possible de m'aider? (allocation de mémoire dans les systèmes embarqués.)
Avoir des références, Articls, livres....
Est-il possible de m'aider? (allocation de mémoire dans les systèmes embarqués.)
Avoir des références, Articls, livres....
Salut, je suis débutant dans le domaine du micro mais voila des ref qui m'ont aidé !
https://embarque.developpez.com/cour...ontroleur/#LII
http://genelaix.free.fr/IMG/pdf/opti...C_embarque.pdf
Et voici un post que j'avais fait pour créer un bootloader, Vincent Petit (coucou) un modo du forum, m'a beaucoup aidé et on aborde la manière dont est conçu la mémoire d'un microchip (je ne sais pas si c'est applicable a tout les micro).
https://www.developpez.net/forums/d1...l-atsamd20j17/
Évite le malloc (a tout prix ?), utilise des types de variable qui consomme le moins possible (bool, char, int8_t, etc), et fais le plus de static, const, etc possible.
Euh quoi ?
A la limite sur un micro de quelque octet je veux bien croire que un malloc est bien inutile , mais sur quelque ko avec du C le malloc reste indispensable ,sauf bidouiller la mémoire manuellement mais c'est assez "dangereux" (risque de toucher la pile entre autre).
Sinon pour répondre a la question , je vois pas en quoi allocation dynamique pose probleme ? Je vois mal un livre dédié au sujet.... (le malloc se comporte toujours de la même façon en externe ).
Comme je l'ai précisé je suis débutant,
On m'a dit que lorsque l'on fait un malloc sur un micro celui-ci est enregistrer dans la ROM (sauf si tu le déclare avec un EXTERN, ou VOLATILE etc ... mais je ne suis pas encore a l'aise avec ça), donc le temps d’exécution du programme s'en trouve ralenti !A la limite sur un micro de quelque octet je veux bien croire que un malloc est bien inutile , mais sur quelque ko avec du C le malloc reste indispensable ,sauf bidouiller la mémoire manuellement mais c'est assez "dangereux" (risque de toucher la pile entre autre).
Kannagi, je me trompe ?
Oui tu te trompe deja parce que c'est paradoxale :
Une ROM ce n'est que en Lecture ! Donc il risque pas d'enregistrer grand chose dedanslorsque l'on fait un malloc sur un micro celui-ci est enregistrer dans la ROM
Sinon je ne vois pas ce que fout EXTERN, ou VOLATILE etc dans l'histoire ^^'
Petit rappel :
-Extern : ça permet juste au compilo , d'utiliser une variable global d'un autre fichier.
-Volatile : le compilateur évitera certain optimisation , en gros il lira/écrira la variable que en mémoire (sans passer par des registres , ou le strict minimun) , c'est plus utile pour les I/O en général.
-Malloc : est une fonction qui renvoie un pointeur ,il renvoie l’adresse mémoire ou on pourra lire/écrire.
Sur la ROM il y'a le code de ton programme (et éventuellement le code du malloc) , mais voila rien de plus , rien de moins. (c'est peut être ce que tu voulais dire au début ? )
Ensuite le malloc "ralenti le programme" euh non ,sauf son appel qui lui peut être plus ou moins rapide (tout dépend de ce qu'on appelle long et ça dépend de comment on l'implémente aussi ).
Après me parler de lenteur cela me gène, les plus petit micro sont surpuissant ( si si je t'assure ) , un Atmega c'est 20 MHZ pour 20 MIPS et c'est énorme pour un programme seul.
Je me répète comme un vieux mais si tu veux le comparer avec une vielle machine :
-Super Nintendo fait environ 1 MIPS (soit 20 fois moins puissant qu'un Atmega )
-Neo Geo (console la plus puissante de l'ere 16 bits et borne d'acade bref un vrai monstre de puissance pour l'époque) fait environ 2,4 MIPS (soit 8 fois moins puissant qu'un Atmega )
-Atari ST (un vielle ordinateur , ou en faisait même de la 3D en software ! ) fait environ 1,4 MIPS (soit 14 fois moins puissant qu'un Atmega )
-La Playstation1 fait 30 MIPS (soit 50% plus puissante qu'un Atmega ).
Bon au moins ce topic ça me permet de mettre ces chiffres , mais voila me parler de ralentissement sur un programme pour l’appelle d'un malloc je trouve cela un peu abérant ^^' (après comme tout ça dépend en général de l'implémentation de ce qu'on fait ).
NT: on peut refaire aussi les mêmes calcul avec un 16MHZ/16MIPS , mais le résultat reste le même AVR Atmel reste toujours plus puissant en général.
D'accord !
Je tenais cette information d'un site qui donnais des conseils de développement pour microcontrôleur, mais impossible de le retrouver !
Dans tout les cas, ne pas faire de malloc peut éviter pas mal de bug de débutant.
Concernant les EXTERN, VOLATILE, etc je n'avais pas réellement prêter attention a leurs signification, merci pour ces précisions
Bonjour
En embarqué, il est surtout important de lire les informations fournies par le fabricant de la puce (le datasheet) et le compilateur.
Par exemple au sujet du compilateur GCC AVR, les informations sur l'allocation mémoire sont fournies ici: Memory Areas and Using malloc()
Quand au VOLATILE il sert aussi pour l'échange de variable entre le code principal et les interruptions.
Bonne journée
Delias
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager