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 :

malloc qui fait planter un microcontrôleur


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Novembre 2016
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique

    Informations forums :
    Inscription : Novembre 2016
    Messages : 40
    Par défaut malloc qui fait planter un microcontrôleur
    Bonjour,

    Je suis actuellement de développer un programme en C sur microcontrôleur. Je suis en train d'intégrer du code que l'on m'a fournit et qui fait planter mon micro. Après quelques tests je remarque que:

    - Ce code fonctionne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    typedef struct
    {
           unsigned char Test_U8;
           unsigned short Test_U16;
    }test_str;
     
    test_str Test_STR;
    test_str * PointeurTest_STR = &Test_STR;
     
    PointeurTest_STR->Test_U8 = 0;
    PointeurTest_STR->Test_U16 = 0;
    - Ce code fait planter mon micro:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    typedef struct
    {
         unsigned char Test_U8;
         unsigned short Test_U16;
    }test_str;
     
    test_str* Test_STR = malloc(sizeof(test_str));
     
    Test_STR->Test_U8 = 0;
    Test_STR->Test_U16 = 0;
    A vrai dire je n'utilise jamais d'allocation dynamique de mémoire quand je programme sur microcontrôleur, et comme je programme que la dessus...je ne vois pas ce qui peut faire planter.

    Sam,

  2. #2
    Membre Expert
    Inscrit en
    Mars 2005
    Messages
    1 431
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 1 431
    Par défaut
    Le programme plante-t-il sur l'appel lui-même ou sur l'une des lignes suivantes ? Ton MC permet-il malloc ? Vérifies-tu le résultat de l'allocation avant d'utiliser le bloc ?

    Je ne fais pas d'embarqué, je peux donc taper à côté mais.. est-ce raisonnable de faire de l'allocation dynamique (fine) sur un MC ?

  3. #3
    Membre averti
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Novembre 2016
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique

    Informations forums :
    Inscription : Novembre 2016
    Messages : 40
    Par défaut
    Comme je le disais je ne fais jamais d'allocations dynamiques de mémoire sur microcontrôleur, mais là j’intègre une libraire que j'ai pas codé personnellement.

    Je pense avoir trouvé le soucis, le résultat de l'allocation pointe un emplacement mémoire lié aux interruptions du micro. Je vais voir ça avec le fabricant. Je ne pense pas que ce soit le code en lui même.

    En tout cas merci pour le coup de main.

    EDIT : En fait il me retourne NULL...

  4. #4
    Membre Expert

    Homme Profil pro
    Responsable des études
    Inscrit en
    Mars 2009
    Messages
    553
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2009
    Messages : 553
    Par défaut
    Hello,

    Comme indiqué par Matt_Houston, la fonction 'malloc' n'est pas toujours supportée. Ou alors il faut des options de compilation bien précises pour l'avoir. Il faut que tu vérifies dans la documentation de ta chaine de compilation.

  5. #5
    Membre averti
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Novembre 2016
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique

    Informations forums :
    Inscription : Novembre 2016
    Messages : 40
    Par défaut
    OK je vais regarder ça.

    Merci pour votre aide.

  6. #6
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    4 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Loire Atlantique (Pays de la Loire)

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

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 493
    Billets dans le blog
    1
    Par défaut
    Il est possible que malloc() soit disponible mais que ton tas (heap en anglais) soit de taille 0. Ainsi, toute demande d'allocation échouera. Il faut regarder le link script en général pour modifier la taille du tas.

Discussions similaires

  1. [Access 2003] Macro qui fait planter Access
    Par nuriel2 dans le forum Access
    Réponses: 5
    Dernier message: 10/05/2006, 14h00
  2. Supprimer une crontab qui fait planter le server
    Par osmoze dans le forum Administration système
    Réponses: 5
    Dernier message: 31/03/2006, 15h42
  3. 56k qui fait planter le PC
    Par Spack dans le forum Périphériques
    Réponses: 4
    Dernier message: 03/10/2005, 19h35
  4. probleme de requette qui fait planter powergres
    Par fehmitn dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 15/09/2004, 18h48
  5. Réponses: 12
    Dernier message: 16/03/2004, 14h21

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