[Programmation] Pointeur et tableau de structure avec XC8
Répondre à la discussion
Affichage des résultats 1 à 8 sur 8

Pointeur et tableau de structure avec XC8



  1. #1
    inviteb9a90acc

    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.

    -----

  2. #2
    Vincent PETIT
    Animateur Électronique

    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. #3
    inviteb9a90acc

    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. #4
    Vincent PETIT
    Animateur Électronique

    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. A voir en vidéo sur Futura
  6. #5
    inviteb9a90acc

    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.

  7. #6
    RISC

    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+

  8. #7
    inviteb9a90acc

    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.

  9. #8
    RISC

    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+

Discussions similaires

  1. [C] tableau de pointeur dans un structure.
    Par invite38d9e885 dans le forum Programmation et langages, Algorithmique
    Réponses: 23
    Dernier message: 11/04/2016, 16h25
  2. problème syntaxe structure tableau pointeur en c
    Par invite7ade7f5a dans le forum Programmation et langages, Algorithmique
    Réponses: 4
    Dernier message: 10/03/2016, 09h45
  3. Difference entre structure, pointeur, tableau (langage C).
    Par invitebf26947a dans le forum Programmation et langages, Algorithmique
    Réponses: 7
    Dernier message: 12/10/2012, 16h23
  4. problème avec un tableau de structure !!!
    Par inviteb26dc581 dans le forum Programmation et langages, Algorithmique
    Réponses: 4
    Dernier message: 14/12/2010, 09h06
  5. Problème Langage C Structure, Pointeur, ...
    Par invite3e43df7f dans le forum Logiciel - Software - Open Source
    Réponses: 17
    Dernier message: 01/04/2006, 21h14
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...