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

C Discussion :

Fiabilité malloc applications embarquées


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif

    Femme Profil pro
    Collégien
    Inscrit en
    Juillet 2010
    Messages
    592
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Afghanistan

    Informations professionnelles :
    Activité : Collégien

    Informations forums :
    Inscription : Juillet 2010
    Messages : 592
    Par défaut Fiabilité malloc applications embarquées
    Bonjour,

    Je développe actuellement en C une application embarquée sans OS. Celle-ci n'est pas "life critic" mais "$ critic" donc hors de question que ça plante.

    Mon choix d’implémentation utilise les méthodes standard de la libC malloc et free. En discutant avec des gens qui ont autrefois codé de l'embarqué, ils m'ont annoncé que dans leur cas, l'utilisation de ces méthodes était proscrite pour des raisons de fiabilité. J'aimerais avoir votre avis là-dessus.

    J'ajoute que pour le moment l'utilisation de malloc et free dans mon application de pose pas de problème. Les seules problèmes rencontrés étaient dues à une
    une mauvaise utilisation de ces méthodes, donc au développeur, donc moi...

    Merci.

  2. #2
    Membre Expert Avatar de fregolo52
    Homme Profil pro
    Développeur C
    Inscrit en
    Août 2004
    Messages
    2 366
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur C

    Informations forums :
    Inscription : Août 2004
    Messages : 2 366
    Par défaut
    Citation Envoyé par mith06 Voir le message
    Mon choix d’implémentation utilise les méthodes standard de la libC malloc et free. En discutant avec des gens qui ont autrefois codé de l'embarqué, ils m'ont annoncé que dans leur cas, l'utilisation de ces méthodes était proscrite pour des raisons de fiabilité. J'aimerais avoir votre avis là-dessus.
    Je n'ai jamais fait d'embarqué pur, mais c'est ce que tout le monde dit : faire des allocations statiques et surtout pas dynamiques.
    Fiabilité, je pense que ça veut dire aussi : éviter les fuites mémoire

  3. #3
    Membre émérite
    Avatar de bpy1401
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2003
    Messages
    511
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2003
    Messages : 511
    Par défaut
    Bonjour à tous

    En effet, l'allocation dynamique de mémoire est prohibée dans le logiciel embarqué.
    Le Misra (jeu de règles d'écriture à respecter dans l'embarqué) donne la règle suivante:

    Rule 20.4 (mandatory) Dynamic heap memory allocation shall not be used
    voici leur justification:
    There is a whole range of unspecified, undefined and implementation-defined behaviour associated with
    dynamic memory allocation, as well as a number of other potential pitfalls. Dynamic heap memory
    allocation may lead to memory leaks, data inconsistency, memory exhaustion, non-deterministic
    behaviour.
    Il est possible que cela fonctionne bien pour le moment sur ton application, mais rien ne prouve qu'elle fonctionnera toujours bien.

    Cette règle a été adopté pour les raisons suivantes:
    • La taille de la RAM embarquée est limitées, son utilisation doit donc être parfaitement maitrisée. L'allocation dynamique n'est pas déterministe sur la taille de la RAM utilisée, donc dangereux
    • L'allocation dynamique nécessite de la ram pour mémoriser les tables d'allocation, donc couteux en embarqué.
    • les fuites mémoires sont aussi une cause de bug, car c'est la consommation RAM perdues jusqu'a plantage


    Comme tu es dans une application critique, je pense que tu doit avoir des règles de codages à respecté. je serais surpris qu'il n'y en ai pas une qui t'interdise l'utilisation de l'allocation dynamique de mémoire.

    En espérant avoir pu répondre à ta question.
    Page sur Developpez : http://pbriand.developpez.com

  4. #4
    Membre très actif

    Femme Profil pro
    Collégien
    Inscrit en
    Juillet 2010
    Messages
    592
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Afghanistan

    Informations professionnelles :
    Activité : Collégien

    Informations forums :
    Inscription : Juillet 2010
    Messages : 592
    Par défaut
    Merci pour ta réponse.

    J'utilise l'allocation dynamique uniquement dans un mecanisme de type FIFO pour faire du monitoring de données (sauvegarde des N dernières données en mémoire).

    Ce mecanisme est actuellement très pratique pour le dev/debug de mon application donc je ne vais pas le supprimer. Par contre je pense le désactiver une fois l'application livrable, et laisser la possibilité de le réactiver pour raison de maintenance sur le terrain.

    Est-ce que tu as un lien vers le document Misra que tu cites STP.

    Merci.

  5. #5
    Membre émérite
    Avatar de bpy1401
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2003
    Messages
    511
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2003
    Messages : 511
    Par défaut
    Bonjour mith06

    voici le lien
    MISRA C 2004

    Mais c'est payant
    Page sur Developpez : http://pbriand.developpez.com

  6. #6
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Par défaut
    En général, ce qui se faisait avec du code embarqué, c'est:
    • Au lancement/initialisation du programme, tu alloues des pools de blocs mémoire de différentes taille (suivant les besoins prévisibles)
    • Quand tu as besoin d'un bloc, tu le demandes
    • quand il n'y en a plus de disponible, soit tu peux t'en passer, soit l'application reboot, c'est que tu as mal dimensionné tes pools.

    C'est un peu "barbare" mais c'est comme cela que fonctionnait "vrtx32"
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

Discussions similaires

  1. Application embarquée .Net
    Par hisy dans le forum Débuter
    Réponses: 5
    Dernier message: 05/08/2011, 17h22
  2. Programmation C# application embarqué tactile
    Par ryann72 dans le forum C#
    Réponses: 4
    Dernier message: 29/03/2011, 10h46
  3. Application embarquée avec access
    Par vg-matrix dans le forum Bases de données
    Réponses: 7
    Dernier message: 01/11/2008, 16h41
  4. Java et les applications embarquées temps reel
    Par KarimOuldamar dans le forum Développement Mobile en Java
    Réponses: 2
    Dernier message: 26/12/2005, 10h19

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