problème structure union
Répondre à la discussion
Affichage des résultats 1 à 25 sur 25

problème structure union



  1. #1
    kimsama

    problème structure union


    ------

    Bonjour,

    J'ai un problème avec des erreurs de compilation on m'affiche les erreurs suivantes (cap3)

    est-ce que vous avez une idée sur comment on peut résoudre ce type de problème .

    -----
    Images attachées Images attachées

  2. #2
    invite03481543

    Re : problème structure union

    Bonsoir,

    visiblement un problème de déclaration dans la structure appelée.
    Le mieux est de poster l'ensemble du code, ce que tu postes ne sert strictement à rien pour résoudre le problème...

  3. #3
    kimsama

    Re : problème structure union

    voici le fichier.h qui contient les déclarations des structures

    Code:
    #ifndef VAR_GLOBAL_H
    #define VAR_GLOBAL_H
    
    //------------------------------------------------------------------------------
    //Includes
    //------------------------------------------------------------------------------
    #include "data_types.h"
    
    // Pour gerer le prototypage et la declaration
    #undef PUBLIC
    #ifdef VAR_GLOBAL_M
    #define PUBLIC
    #else
    #define PUBLIC extern
    #endif
    
    //------------------------------------------------------------------------------
    // Defines & Types exportes
    //------------------------------------------------------------------------------
    
    #define mesure_index_max 26
    #define param_index_max 56
    
    #define MAX_PARAM_GENERAL_INDEX  10
    #define MAX_INOUT_PARAM_INDEX    7
    #define MAX_PROTECTION_FAMILY_INDEX 7
    #define MAX_PROTECTION_RESTART_INDEX 4
    #define MAX_PROTECTION_PTC_INDEX   2
    #define MAX_PROTECTION_CALAGE_INDEX  2
    #define MAX_STATUS_INDEX      7
    #define MAX_PROTECTION_PARAM_INDEX	6
    
    
    typedef enum {
      RAS = 0,
      ALARME = 1,
      DEFAUT = 2
    } t_etat_defaut;
    
    typedef enum {
      NO_EVENT = 0,
      NEXT = 1,
      PREVIOUS = 2,
      OK = 3,
      ESC = 4,
      MODE_CHANGED = 5,
      NEW_DEFAUT = 6,
      NEW_ALARM = 7,
      EXTERNAL = 8
    } t_event;
    
    typedef enum {
       ETAT_AVANT_DEMARRAGE = 0,
       ETAT_DEMARRAGE = 1,
       ETAT_REGIME_PERMANANT = 2,
       ETAT_ARRET = 3,
       ETAT_DEFAUT = 4,
       ETAT_INITIALISATION = 5,
       ETAT_JE_VEUX_DEMARRER = 6
    } t_etat_systeme;
    
    typedef union{
    	struct{
    		t_u16 general_parameter[MAX_PARAM_GENERAL_INDEX];
    		t_u16 inout_parameter[MAX_INOUT_PARAM_INDEX];
    		struct{
    			t_u16 prot1[MAX_PROTECTION_PARAM_INDEX];
    			t_u16 prot2[MAX_PROTECTION_PARAM_INDEX];
    			t_u16 prot3[MAX_PROTECTION_PARAM_INDEX];
    			t_u16 prot4[MAX_PROTECTION_PARAM_INDEX];
    			t_u16 prot5[2];
    			t_u16 redemarrage[MAX_PROTECTION_RESTART_INDEX ];
    			t_u16 calage[MAX_PROTECTION_CALAGE_INDEX ];
    			t_u16 ptc[MAX_PROTECTION_PTC_INDEX ];
    			t_u16 phase_inversion;
    		}protection;
    		t_u16 autorisation_dem;
    		t_u16 autorisation_redem;
    		t_u32 CRC_value;
    	}parameter;
    	t_u16 raw_value[param_index_max];
    	t_u32 _forcrc_purpose[param_index_max / 2];
    }t_parametre;
    
    typedef union{
    	struct{
    		t_u16 system_mesur[MAX_STATUS_INDEX];
    		t_u16 protection[MAX_PROTECTION_FAMILY_INDEX];
    		t_u32 other[6];
    	}_mesure_types;
    	t_u16 _raw_value[mesure_index_max];
    	t_u32 _forcrc_purpose[mesure_index_max / 2];
    }t_mesure;
    
    
    
    typedef union{
    	t_u16 receive[mesure_index_max];
    	t_u32 crcpurpose[mesure_index_max / 2];
    }t_mesure_recieve;
    
    /*typedef struct{
    	t_u8 HOUR;
    	t_u8 MIN;
    	t_u8 SEC;
    }t_time_;*/
    
    /*typedef struct{
    	RTC_DateStruct->RTC_Date;
    	t_u16 MONTH;
    	t_u16 YEAR;
    }t_date_;*/
    
    //------------------------------------------------------------------------------
    // Variables exportees
    //------------------------------------------------------------------------------
    
    PUBLIC t_etat_systeme   		g_etat_systeme        					;
    
    PUBLIC t_event					g_event				  					;
    
    PUBLIC t_mesure					g_mesure			  					;
    
    PUBLIC t_u8						g_mesure_index		  					;
    
    PUBLIC t_parametre				g_parameter			  					;
    
    PUBLIC t_bool					g_backlight_on		  					;
    
    PUBLIC t_bool					g_is_last_frame_success					;
    
    PUBLIC t_mesure_recieve			g_received_mesure						;
    
    //PUBLIC t_time_					g_time									;
    
    //PUBLIC t_date_					g_date									;
    
    PUBLIC t_bool					g_is_defaut								;
    
    //PUBLIC t_bool					g_is_alarm								;
    
    PUBLIC t_u8*				   g_defaut_list[MAX_DEFAULT_LIST]			;
    
    PUBLIC t_u8*				   g_alarme_list[MAX_ALARME_LIST]			;
    
    PUBLIC t_u8*                   code_defaut_list[MAX_DEFAULT_LIST]       ;
    
    //------------------------------------------------------------------------------
    // Fonctions exportees
    //------------------------------------------------------------------------------
    
    
    
    #endif // VAR_GLOBAL_H
    
    //------------------------------------------------------------------------------
    // End of $RCSfile$
    //------------------------------------------------------------------------------
    //
    // Historique : $Log$
    Dernière modification par Antoane ; 30/05/2016 à 12h50. Motif: Ajout balises [code]

  4. #4
    invite03481543

    Re : problème structure union

    La variable "protection" de ta structure ne semble pas comprise par ton compilateur.
    Comme c'est une structure il faut la déclarer avec son nom (étiquette).

    Code:
    struct mastructure{
                t_u16 prot1[MAX_PROTECTION_PARAM_INDEX];
                t_u16 prot2[MAX_PROTECTION_PARAM_INDEX];
                t_u16 prot3[MAX_PROTECTION_PARAM_INDEX];
                t_u16 prot4[MAX_PROTECTION_PARAM_INDEX];
                t_u16 prot5[2];
                t_u16 redemarrage[MAX_PROTECTION_RESTART_INDEX ];
                t_u16 calage[MAX_PROTECTION_CALAGE_INDEX ];
                t_u16 ptc[MAX_PROTECTION_PTC_INDEX ];
                t_u16 phase_inversion;
            }protection;
    idem avec la structure de structure dans laquelle elle est intégrée.
    Dernière modification par HULK28 ; 30/05/2016 à 17h55.

  5. A voir en vidéo sur Futura
  6. #5
    Antoane
    Responsable technique

    Re : problème structure union

    Bonjour,

    cette discussion ne serait-elle pas plus à sa place ici : http://forums.futura-sciences.com/pr...algorithmique/ ?
    Deux pattes c'est une diode, trois pattes c'est un transistor, quatre pattes c'est une vache.

  7. #6
    invite03481543

    Re : problème structure union

    Oui sans aucun doute et avec plus de visibilité/disponibilité en tout cas.

  8. #7
    kimsama

    Re : problème structure union

    Bonjour, merci Hulk28 pour ta réponse je l'ai essayé pourtant ça ne marche toujours pas.

  9. #8
    Jack
    Modérateur

    Re : problème structure union

    Tu as essayé g_parameter.prot1[0] = NIVEAU_A_SUR_CHARGE; ? (c'est à dire sans donner le nom des unions et structures)

  10. #9
    kimsama

    Re : problème structure union

    Bonjour Jack je viens de l'essayer pour prot1, voilà ce qu'on m'affiche comme erreur :
    Images attachées Images attachées  

  11. #10
    Jack
    Modérateur

    Re : problème structure union

    Plutôt que des copies d'écran, colle directement le texte (avec les balises code ou quote)

    Je veux bien faire un test, mais je n'ai pas le fichier data_types.h.

  12. #11
    polo974

    Re : problème structure union

    j'ai mis
    Code:
     typedef unsigned int t_bool;
    typedef unsigned short t_u16;
    typedef unsigned int t_u32;
    typedef unsigned char t_u8;
    
    #define MAX_DEFAULT_LIST 21
    #define MAX_ALARME_LIST 23
    au début et

    Code:
     t_parametre   g_parameter;
    
    #define NIVEAU_A_SUR_CHARGE 5
    int main()
    {
    g_parameter.parameter.protection.prot1[0] = NIVEAU_A_SUR_CHARGE; 
    return 0;
    }
    à la fin, et ça compile (avec gcc)
    Jusqu'ici tout va bien...

  13. #12
    kimsama

    Re : problème structure union

    Est-ce que tu as travaillé sur le même fichier ?

    moi je travaille sur 2 fichiers différents différents, l'appel de la structure protection : g_parameter.parameter.protecti on.prot1[0] = NIVEAU_A_SUR_CHARGE; se fait dans le 2ème fichier , et bien sûr le 1er fichier où la structure est définie est inclue dans le 2ème, pourtant la structure n'est pas reconnue.

  14. #13
    Jack
    Modérateur

    Re : problème structure union

    J'ai repris les modifs de polo974, mis le main dans un fichier et le reste dans un fichier d'entête séparé et ça compile avec msvc2013 (compilateur microsoft)

  15. #14
    polo974

    Re : problème structure union

    Citation Envoyé par kimsama Voir le message
    Est-ce que tu as travaillé sur le même fichier ?

    moi je travaille sur 2 fichiers différents différents, l'appel de la structure protection : g_parameter.parameter.protecti on.prot1[0] = NIVEAU_A_SUR_CHARGE; se fait dans le 2ème fichier , et bien sûr le 1er fichier où la structure est définie est inclue dans le 2ème, pourtant la structure n'est pas reconnue.
    mais est-ce que tu déclares quelque part g_parameter pour de vrai ? ? ?
    car dans le .h les :
    Code:
    PUBLIC truc bidule;
    ne font que dire qu'ils doivent normalement exister quelque part (et donc qu'ils doivent être déclarés quelque part)...

    d'où le :
    Code:
    t_parametre   g_parameter;
    que j'ai ajouté à la fin avant le main (cf mon post précédent)
    Jusqu'ici tout va bien...

  16. #15
    polo974

    Re : problème structure union

    copié de l'autre fil...
    Citation Envoyé par kimsama Voir le message
    D'accord, mais tu parles de quelles variables exactement ?
    dans ton .h, tu as plein de "Variables exportees"
    Code:
    // Pour gerer le prototypage et la declaration
    #undef PUBLIC
    #ifdef VAR_GLOBAL_M
    #define PUBLIC
    #else
    #define PUBLIC extern
    #endif
    donc dans un et un seul de tes .c, avant le include du .h, tu dois avoir un:
    Code:
    #define VAR_GLOBAL_M
    dans ce .c, les variables seront déclarées "pour de vrai",
    et dans les autres, elles seront déclarées externes (donc on dit juste au compilo qu'elles doivent normalement exister ailleurs, et qu'on les trouvera au moment du link).
    Jusqu'ici tout va bien...

  17. #16
    kimsama

    Re : problème structure union

    Merci polo974, je viens de le faire mais ça n'as pas marché y a toujours les même erreurs.

  18. #17
    kimsama

    Re : problème structure union

    Merci polo974, j'ai ajouté le :
    Code:
    #define VAR_GLOBAL_M
    mais y a toujours les même erreurs

  19. #18
    polo974

    Re : problème structure union

    Citation Envoyé par kimsama Voir le message
    Merci polo974, j'ai ajouté le :
    Code:
    #define VAR_GLOBAL_M
    mais y a toujours les même erreurs
    quelles erreurs sur quel code source ? ? ?

    moi et Jack, on a essayé avec :
    Code:
    g_parameter.parameter.protection.prot1[0] = NIVEAU_A_SUR_CHARGE;
    et ça marche...
    Jusqu'ici tout va bien...

  20. #19
    kimsama

    Re : problème structure union

    Oui les mêmes erreurs que j'avais mentionnée dans mon premier post (captures) et le code source faisant appel aux différents membres de la structure protection.
    La chose étrange est que le problème concerne juste les 5 premiers membres de la structure protection (prot1 à prot2):
    Code:
    struct mystruct1{
    			t_u16 prot1[MAX_PROTECTION_PARAM_INDEX];
    			t_u16 prot2[MAX_PROTECTION_PARAM_INDEX];
    			t_u16 prot3[MAX_PROTECTION_PARAM_INDEX];
    			t_u16 prot4[MAX_PROTECTION_PARAM_INDEX];
    			t_u16 prot5[2];
    			t_u16 redemarrage[MAX_PROTECTION_RESTART_INDEX ];
    			t_u16 calage[MAX_PROTECTION_CALAGE_INDEX ];
    			t_u16 ptc[MAX_PROTECTION_PTC_INDEX ];
    			t_u16 phase_inversion;
    		}protection;
    et il n'y a aucune erreur pour le reste

  21. #20
    polo974

    Re : problème structure union

    ton truc est bizarre vu d'ici...

    donc on découpe en petits morceaux (pas d'imbrication, de truc pas nommé, etc...):
    un typedef,
    une structure ou union,
    et on passe au suivant...

    j'ai mis des u, s et t devant les noms pour les union, struct typedef
    (c'est plus lisible, mais on n'est pas obligé...)

    Code:
    typedef struct sprotection tprotection;
    struct sprotection {
                t_u16 prot1[MAX_PROTECTION_PARAM_INDEX];
                t_u16 prot2[MAX_PROTECTION_PARAM_INDEX];
                t_u16 prot3[MAX_PROTECTION_PARAM_INDEX];
                t_u16 prot4[MAX_PROTECTION_PARAM_INDEX];
                t_u16 prot5[2];
                t_u16 redemarrage[MAX_PROTECTION_RESTART_INDEX ];
                t_u16 calage[MAX_PROTECTION_CALAGE_INDEX ];
                t_u16 ptc[MAX_PROTECTION_PTC_INDEX ];
                t_u16 phase_inversion;
    };
    
    typedef    struct sparameter tparameter;
    struct sparameter{
        t_u16 general_parameter[MAX_PARAM_GENERAL_INDEX];
        t_u16 inout_parameter[MAX_INOUT_PARAM_INDEX];
        tprotection protection;
        t_u16 autorisation_dem;
        t_u16 autorisation_redem;
        t_u32 CRC_value;
    };
    
    typedef union u_parametre t_parametre;
    union u_parametre{
        tparameter parameter;
        t_u16 raw_value[param_index_max];
        t_u32 _forcrc_purpose[param_index_max / 2];
    };
    et quand je demande sources et erreurs, c'est en version texte du truc actuel pour être sûr qu'on parle de la même chose.
    si c'est trop long, tu mets en spoiler (passer en édition avancée):
     Cliquez pour afficher

    au fait, c'est quoi ton compilo ? ? ?
    Jusqu'ici tout va bien...

  22. #21
    kimsama

    Re : problème structure union

    Bonjour,
    J'ai fait le découpage mais ça ne marche toujours pas voici les erreurs dont je parle :

    Code:
    41: error: 'struct <anonymous>' has no member named 'prot1'
    41: error: 'struct <anonymous>' has no member named 'prot1'
    41: error: 'struct <anonymous>' has no member named 'prot1'
    41: error: 'struct <anonymous>' has no member named 'prot1'
    41: error: 'struct <anonymous>' has no member named 'prot1'
    41: error: 'struct <anonymous>' has no member named 'prot1'
    41: error: 'struct <anonymous>' has no member named 'prot2'
    41: error: 'struct <anonymous>' has no member named 'prot2'
    41: error: 'struct <anonymous>' has no member named 'prot2'
    41: error: 'struct <anonymous>' has no member named 'prot2'
    41: error: 'struct <anonymous>' has no member named 'prot2'
    41: error: 'struct <anonymous>' has no member named 'prot2'
    41: error: 'struct <anonymous>' has no member named 'prot3'
    41: error: 'struct <anonymous>' has no member named 'prot3'
    41: error: 'struct <anonymous>' has no member named 'prot3'
    41: error: 'struct <anonymous>' has no member named 'prot3'
    41: error: 'struct <anonymous>' has no member named 'prot3'
    41: error: 'struct <anonymous>' has no member named 'prot3'
    41: error: 'struct <anonymous>' has no member named 'prot4'
    41: error: 'struct <anonymous>' has no member named 'prot4'
    41: error: 'struct <anonymous>' has no member named 'prot4'
    41: error: 'struct <anonymous>' has no member named 'prot4'
    41: error: 'struct <anonymous>' has no member named 'prot4'
    41: error: 'struct <anonymous>' has no member named 'prot4'
    41: error: 'struct <anonymous>' has no member named 'prot4'
    41: error: 'struct <anonymous>' has no member named 'prot5'
    41: error: 'struct <anonymous>' has no member named 'prot5'
    Voilà , pour le compilateur il s'agit de gcc (ide coocox)

    Merci encore une fois polo974

  23. #22
    polo974

    Re : problème structure union

    Tu colles le header et le source.



    Es-tu sûr(e) que ton source include bien le bon header que tu édites ? (ça parait con, mais ça m'est arrivé (et on ne rigole pas...))

    Car si tu as découpé tes structures comme indiqué, il n'y a plus de 'struct <anonymous>'...

    Es-tu sûr(e) que ton source est bien recompilé, genre on modifie le .h, mais pas le .c et la config du Makefile le .h n’apparaît pas dans les dépendances du .c ? ? ? ça c'est aussi possible, classique et pernicieux...

    Pour vérifier, il suffit d'écrire un GROS BUG dans le .h et de tenter une compilation.
    genre ajouter au début du fichier:
    ARGGGGHHHH ;

    Si ça ne pète pas dessus, c'est qu'il y a un pb ailleurs ...

    sinon, fait un petit main (corrige le gag.h avec le bon nom de ton header) et vérifie que ça marche.
    Code:
    // pas en embarqué... #include <stdio.h>
    
    #define VAR_GLOBAL_M
    
    #include "gag.h"
    
    #define NIVEAU_A_SUR_CHARGE 5
    int main()
    {
        g_event = MODE_CHANGED;
        g_parameter.parameter.protection.prot1[0] = NIVEAU_A_SUR_CHARGE; 
    
        // pas en embarqué... printf("g_parameter.parameter.protection.prot1[0] %d\n" , (int) g_parameter.parameter.protection.prot1[0]);
    return 0;
    }
    Jusqu'ici tout va bien...

  24. #23
    kimsama

    Re : problème structure union

    J'ai vérifié tout ce que tu as dit et il n'y a aucun problème. Le header est bien inclu dans la source et et le.c est recompilé.
    Sauf que quand j'ai rajouté le petit code dans le main il n'y a aucune erreur dans le main, pourtant dans le fichier source y a tjrs les mêmes erreurs.
    Je n'arrive pas à comprendre cette contradiction .

  25. #24
    polo974

    Re : problème structure union

    Et au point où on en est, je ne peux rien faire de plus sans tes fichiers...

    Donc, soit tu les mets ici, soit tu me les pose en mp et je ne regarde ni divulgue ce qui ne nous intéresse pas, soit on s'arrête là...


    je ne comprends pas de quoi tu parles là:
    Sauf que quand j'ai rajouté le petit code dans le main il n'y a aucune erreur dans le main, pourtant dans le fichier source y a tjrs les mêmes erreurs.
    Jusqu'ici tout va bien...

  26. #25
    kimsama

    Re : problème structure union

    Re,
    Bon j'ai dû recommencer un nouveau projet et y recopier mes fichiers .c et .h et ça a marché ouff.
    Merci beaucoup polo974

Discussions similaires

  1. Union de R et R^2
    Par zaskzask dans le forum Mathématiques du supérieur
    Réponses: 54
    Dernier message: 23/01/2015, 11h36
  2. Problème eau de structure.
    Par Merylou.B dans le forum Chimie
    Réponses: 0
    Dernier message: 11/03/2013, 14h34
  3. union
    Par 369 dans le forum Mathématiques du supérieur
    Réponses: 1
    Dernier message: 29/01/2013, 19h20
  4. structure et union sous c18
    Par guillaume83 dans le forum Électronique
    Réponses: 0
    Dernier message: 24/04/2009, 19h33
  5. F(AUB) = F(A) union F(B)
    Par invite56460777 dans le forum Mathématiques du supérieur
    Réponses: 12
    Dernier message: 11/11/2004, 08h41