Bonjour, cliquez-ici pour vous inscrire et participer au forum.
  • Login:



+ Répondre à la discussion
Affichage des résultats 1 à 8 sur 8

Pointeur et tableau de structure avec XC8

  1. Johnplayer

    Date d'inscription
    décembre 2013
    Messages
    83

    Pointeur et tableau de structure avec XC8

    Bonjour,
    Je rencontre un problème sur une fonction.
    Code:
    // La structure pour une couleur
    typedef struct
    {
            unsigned char G;
            unsigned char R;
            unsigned char B;
    } WS2812B_COLOR;
    
    // La variable dans laquelle doit écrire la fonction (un tableau de 2 couleurs donc)
    WS2812B_COLOR Couleur[2];
    
    // La fonction en question
    void setColor(WS2812B_COLOR (*color)[], unsigned char r, unsigned char g, unsigned char b)
    {
        // couleur basse luminosité
        (*color)[0].R = r>>4;
        (*color)[0].G = g>>4;
        (*color)[0].B = b>>4;
        // couleur haute luminosité
        (*color)[1].R = r;
        (*color)[1].G = g;
        (*color)[1].B = b;
    }
    MPLAB me sort en warning pour chacune des affectations dans ma fonction :

    ComUART.c:144: warning: (1498) pointer (setColor@color) in expression may have no targets
    ComUART.c:144: warning: (759) expression generates no code

    Je n'arrive pas à comprendre d'où peut venir mon erreur donc si quelqu'un peut m'éclairer...

    Cordialement.

    -----

     


    • Publicité



  2. Vincent PETIT

    Date d'inscription
    juin 2010
    Localisation
    Pas de Calais
    Âge
    36
    Messages
    270

    Re : Pointeur et tableau de structure avec XC8

    Salut,
    Il me semble que tu ne peux pas déréférencer un pointeur de tableau de structure dans les paramètres d'une fonction.

    Pour moi, il faut que tu déclares que color est un pointeur de pointeur (sous entendu un pointeur sur un tableau, de structure WS2812B_COLOR en l'occurrence).

    Code:
    void setColor(WS2812B_COLOR **color, unsigned char r, unsigned char g, unsigned char b)
    {
        // couleur basse luminosité
        (*color)[0].R = r>>4;
        (*color)[0].G = g>>4;
        (*color)[0].B = b>>4;
        // couleur haute luminosité
        (*color)[1].R = r;
        (*color)[1].G = g;
        (*color)[1].B = b;
    }
     

  3. Johnplayer

    Date d'inscription
    décembre 2013
    Messages
    83

    Re : Pointeur et tableau de structure avec XC8

    J'ai la même erreur avec un pointeur de pointeur mais le pointeur est inconnu ce coup-ci (1498 pointer (unknown) in expression may have no targets).
    Apparemment, les pointeurs dans les paramètres de fonction ne sont pas du tout appréciés. J'ai même essayé de pointer sur une structure au lieu d'un tableau, il m'envoie toujours bouler avec la même erreur.
     

  4. Vincent PETIT

    Date d'inscription
    juin 2010
    Localisation
    Pas de Calais
    Âge
    36
    Messages
    270

    Re : Pointeur et tableau de structure avec XC8

    Il y a un problème, je n'avais pas fait attention jusqu'à ce que j'essaye de faire un programme bidon avec ton code.
    C'est en appelant ta fonction SetColor que je me suis aperçu qu'elle appelle l'adresse d'un tableau de structure donc "color" doit simplement être un pointeur de structure.

    Code:
    #include <msp430g2553.h>
    
    // La structure pour une couleur
    typedef struct
    {
            unsigned char G;
            unsigned char R;
            unsigned char B;
    } WS2812B_COLOR;
    
    // La variable dans laquelle doit écrire la fonction (un tableau de 2 couleurs donc)
    WS2812B_COLOR Couleur[2];
    
    // La fonction en question
    void setColor(WS2812B_COLOR *color, unsigned char r, unsigned char g, unsigned char b)
    {
        // couleur basse luminosité
        color[0].R = r>>4;
        color[0].G = g>>4;
        color[0].B = b>>4;
        // couleur haute luminosité
        color[1].R = r;
        color[1].G = g;
        color[1].B = b;
    }
    
    int main (void)
    {
    
    	setColor(Couleur, 0x00, 0x01, 0x02);
    
    
    	while (i)
    	{
    		;
    	}
    
    	return 0;
    }
    Là ça compile sans erreur avec MSP430-GCC
     

  5. Johnplayer

    Date d'inscription
    décembre 2013
    Messages
    83

    Re : Pointeur et tableau de structure avec XC8

    J'avais aussi essayé cet syntaxe mais XC8 me renvoie encore le même avertissement. Après ce n'est qu'un avertissement, ça n'empêche pas de compiler et après test, au final ça fonctionne parfaitement. Mais faut que j'arrive à désactiver l'avertissement, ça pollue ma console lors de la compilation.

    J'aurai dû tester ma fonction dès le début au lieu de m'obstiner à faire disparaitre l'avertissement.

    Merci beaucoup de ton aide.
     


    • Publicité



  6. RISC

    Date d'inscription
    novembre 2006
    Messages
    3 701

    Re : Pointeur et tableau de structure avec XC8

    Salut,

    J'ai compilé avec XC8 le même programme que Vincent et je n'ai aucun warning, ni aucune erreur.
    J'utilise la version v1.41 de XC8. Quelle version utilises-tu ?

    a+
    Ma marotte ? les microcontrôleurs ;=)
     

  7. Johnplayer

    Date d'inscription
    décembre 2013
    Messages
    83

    Re : Pointeur et tableau de structure avec XC8

    Salut.

    Le warning a disparu après avoir fermer et ré-ouvert MPLAB (j'ai la 1.41 aussi). La persistance du warning est certainement dûe à un petit bug...
    Ah au fait, le warning réapparait si l'on compile sans faire appel à la fonction. Lorsque j'ai supprimé l'appel qui me permettait de tester ma fonction, il m'a ré-afficher le warning.
     

  8. RISC

    Date d'inscription
    novembre 2006
    Messages
    3 701

    Re : Pointeur et tableau de structure avec XC8

    Salut,

    Je ne trouve pas anormal qu'il affiche un warning si tu n'appelles pas la fonction.
    En effet, en C, comme dans beaucoup d'autres langages, les déclarations sont faites pour que le compilateur puisse vérifier statiquement si les paramètres d'appels de la fonction matchent ceux de "réception" la fonction.
    Ne pouvant pas faire cette vérification quand tu enlèves l'appel de la fonction, il emet un warning

    a+
    Ma marotte ? les microcontrôleurs ;=)
     


    • Publicité







Sur le même thème :





 

Discussions similaires

  1. [C] tableau de pointeur dans un structure.
    Par Cech dans le forum Programmation et langages, Algorithmique
    Réponses: 23
    Dernier message: 11/04/2016, 15h25
  2. problème syntaxe structure tableau pointeur en c
    Par kaky951357 dans le forum Programmation et langages, Algorithmique
    Réponses: 4
    Dernier message: 10/03/2016, 08h45
  3. Difference entre structure, pointeur, tableau (langage C).
    Par deyni dans le forum Programmation et langages, Algorithmique
    Réponses: 7
    Dernier message: 12/10/2012, 15h23
  4. problème avec un tableau de structure !!!
    Par kkny dans le forum Programmation et langages, Algorithmique
    Réponses: 4
    Dernier message: 14/12/2010, 08h06
  5. Problème Langage C Structure, Pointeur, ...
    Par L'Etudiant dans le forum Logiciel - Software - Open Source
    Réponses: 17
    Dernier message: 01/04/2006, 20h14