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

Embarqué Discussion :

Allocation de mémoire dans les systèmes embarqués


Sujet :

Embarqué

  1. #1
    Futur Membre du Club
    Inscrit en
    Juillet 2008
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 4
    Points : 6
    Points
    6
    Par défaut Allocation de mémoire dans les systèmes embarqués
    Est-il possible de m'aider? (allocation de mémoire dans les systèmes embarqués.)
    Avoir des références, Articls, livres....

  2. #2
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2017
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2017
    Messages : 46
    Points : 11
    Points
    11
    Par défaut
    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.

  3. #3
    Expert éminent sénior
    Avatar de Kannagi
    Homme Profil pro
    cyber-paléontologue
    Inscrit en
    Mai 2010
    Messages
    3 225
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cyber-paléontologue

    Informations forums :
    Inscription : Mai 2010
    Messages : 3 225
    Points : 10 174
    Points
    10 174
    Par défaut
    Citation Envoyé par cracked Voir le message
    É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 ).

  4. #4
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2017
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2017
    Messages : 46
    Points : 11
    Points
    11
    Par défaut
    Comme je l'ai précisé je suis débutant,

    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).
    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 !

    Kannagi, je me trompe ?

  5. #5
    Expert éminent sénior
    Avatar de Kannagi
    Homme Profil pro
    cyber-paléontologue
    Inscrit en
    Mai 2010
    Messages
    3 225
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cyber-paléontologue

    Informations forums :
    Inscription : Mai 2010
    Messages : 3 225
    Points : 10 174
    Points
    10 174
    Par défaut
    Oui tu te trompe deja parce que c'est paradoxale :
    lorsque l'on fait un malloc sur un micro celui-ci est enregistrer dans la ROM
    Une ROM ce n'est que en Lecture ! Donc il risque pas d'enregistrer grand chose dedans
    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.

  6. #6
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2017
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2017
    Messages : 46
    Points : 11
    Points
    11
    Par défaut
    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

  7. #7
    Modérateur

    Homme Profil pro
    Ingénieur électricien
    Inscrit en
    Septembre 2008
    Messages
    1 273
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur électricien

    Informations forums :
    Inscription : Septembre 2008
    Messages : 1 273
    Points : 4 842
    Points
    4 842
    Par défaut
    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

Discussions similaires

  1. Sociétés dans les systèmes embarqués
    Par openlinux dans le forum Embarqué
    Réponses: 2
    Dernier message: 17/12/2012, 10h41
  2. Data mining dans les systèmes embarqués ou les systèmes de production
    Par sitws dans le forum Statistiques, Data Mining et Data Science
    Réponses: 2
    Dernier message: 20/07/2010, 23h56

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