XC8 et malloc
Répondre à la discussion
Affichage des résultats 1 à 5 sur 5

XC8 et malloc



  1. #1
    invite4e24a71d

    XC8 et malloc


    ------

    Bonjour,

    XC8 "bug" sur mes lignes de codes qui utilise malloc, j'ai bien inclus la librairie, et malloc est bien dedans, mais XC8 me renvoi le message d'erreur suivant:
    Code:
    (908) exit status = 1
    :0: error: undefined symbol:
    make[2]: *** [dist/PIC18F4680/production/OLEC.X.production.hex] Error 1
            _malloc(dist/PIC18F4680/production\OLEC.X.production.obj) 
    make[2]: Leaving directory `C:/Users/Fabien/Desktop/Document/Electronique/Software/librairie/OLEC.X'
    make[1]: *** [.build-conf] Error 2
    make[1]: Leaving directory `C:/Users/Fabien/Desktop/Document/Electronique/Software/librairie/OLEC.X'
    make: *** [.build-impl] Error 2
    
    BUILD FAILED (exit value 2, total time: 5s)
    Il suffit que je comment les lignes qui utilise malloc, et la compilation est ok. J'utilise 3 fois malloc de la manière suivante:

    Code:
    o->indata = (unsigned char*)malloc(_sizeindata * sizeof(unsigned char));
    indata est un pointeur sur un unsigned char (unsigned char *indata, c'est un bug du compilateur de ne pas accepter ce malloc ?

    Merci

    -----

  2. #2
    RISC

    Re : XC8 et malloc

    Salut,

    As-tu aussi ajouté à ton projet un fichier header ?
    Je pense qu'il faut ajouter #include <stdio.h> au début de ton main() (à vérifier)

    a+

  3. #3
    invite4e24a71d

    Re : XC8 et malloc

    Bonsoir,

    XC8 et les architectures 8 bits de Microchip, ne supportent pas l'allocation de mémoire dynamique, c'est dans la notice du XC8... Je vais faire autrement

    Autre question toute bête, j'ai un phénomène étrange dans mon programme:

    Code:
    #include <xc.h>
    #include "olec.h"
    #include "o_sequenceur.h"
    
    struct o_tor        led_run, led, led2;
    struct o_cligno     cligno;
    struct o_bp   bp, bp2;
    struct o_sequenceur sequenceur;
    struct o_i2cslave   slave;
    struct o_diviseur   h1s;
    
    unsigned int seq[3] = {1,3,0};
    
    void main(){
        
        unsigned char in_slave[3] = {0,0,0};
        unsigned char out_slave[3] = {0,0,0};
    
        cpu_init();
        clock_init(10000000,1000);
        i2c_init('M',0x00, 10000000, 100000);
        o_i2cslave_init(&slave, 0x50, 3, in_slave, 3, out_slave);
    
        o_tor_init(&led_run,'E',0);
        o_tor_init(&led,'E',1);
        o_tor_init(&led2, 'E', 2);
        o_cligno_init(&cligno,1000);
        o_bp_init(&bp, 'C', 0, 20);
        o_bp_init(&bp2, 'C', 1, 20);
        o_sequenceur_init(&sequenceur, 0);
        o_diviseur_init(&h1s, 1000);
    
        while(1){
            cpu_run();
            clock_run();
            i2c_run();
            o_i2cslave_run(&slave, bp.up, bp2.up);
            
            o_tor_run(&led_run,cligno.s);
            o_tor_run(&led,sequenceur.s);
            o_tor_run(&led2, bp.s);
            o_cligno_run(&cligno, clock.ev);
            o_bp_run(&bp, clock.ev);
            o_bp_run(&bp2, clock.ev);
            o_sequenceur_run(&sequenceur, h1s.ev, 0, seq);
            o_diviseur_run(&h1s, clock.ev);
        }
    }
    Si je place les tableau in_data et out_data, au dessus du main (comme le tableau seq), le µC ne fonctionne pas normalement, mais le fait que "seq" soit placer en dehors du main ne gène absolument pas le µC.. Je ne comprend pas le vrai du faux la dedans...

  4. #4
    invite07d645db

    Re : XC8 et malloc

    J'ai déja eu le problème, il me semble que ce qui est déclaré en global n'est pas initialisé, il faut faire l'initialisation manuellement au début du main. (tu peux vérifier facilement si l'initialisation est faite en regardant le code assembleur généré par le compilo, pour ça, dans MPLAB X, windows => output => assembly

  5. A voir en vidéo sur Futura
  6. #5
    Jack
    Modérateur

    Re : XC8 et malloc

    il me semble que ce qui est déclaré en global n'est pas initialisé
    C'est l'inverse en principe.

    A+

Discussions similaires

  1. Interruption avec XC8
    Par invite4e24a71d dans le forum Électronique
    Réponses: 2
    Dernier message: 09/06/2013, 16h32
  2. PIC16F1509 et XC8
    Par invite1f39ae77 dans le forum Électronique
    Réponses: 3
    Dernier message: 09/04/2013, 23h54
  3. Malloc et free
    Par invite57a0da87 dans le forum Programmation et langages, Algorithmique
    Réponses: 7
    Dernier message: 10/01/2013, 16h23
  4. Fonction malloc(langage C)
    Par invitebf26947a dans le forum Programmation et langages, Algorithmique
    Réponses: 28
    Dernier message: 20/10/2012, 16h57
  5. problème avec malloc en C
    Par invite5d5dfac0 dans le forum Logiciel - Software - Open Source
    Réponses: 5
    Dernier message: 06/03/2009, 19h33
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...