Précédent   Forum du club des développeurs et IT Pro > Général Développement > Programmation système > Embarqué
Embarqué Forum d'entraide sur la programmation des systèmes embarqués
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 24/08/2012, 10h59   #21
3DArchi
Rédacteur/Modérateur
 
Avatar de 3DArchi
 
Inscription : juin 2008
Messages : 7 631
Détails du profil
Informations forums :
Inscription : juin 2008
Messages : 7 631
Points : 12 159
Points : 12 159
Salut,
Une union permet de regrouper différents champs dans un même ensemble. Un peu comme une structure mais à la différence que seul un des champs est valide à un moment donné.
L'énumération permet de savoir quel est le champs valide.

Au vu de ce que tu décris, j'aurais tendance à définir le type d'erreur comme unsigned long. Ce type est ensuite utilisé par tous les autres modules. Puis d'avoir une fonction de 'normalisation' de l'erreur, dépendante du driver, qui transforme l'erreur du driver dans une erreur dans ton type unsigned long.
__________________
Ressources proposées par 3DArchi.
Les fonctions virtuelles en C++.
3DArchi est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/08/2012, 11h09   #22
JuanLuis
Invité de passage
 
Homme JeanLouis
Ingénieur développement matériel électronique
Inscription : juillet 2012
Messages : 26
Détails du profil
Informations personnelles :
Nom : Homme JeanLouis
Âge : 25
Localisation : France, Ille et Vilaine (Bretagne)

Informations professionnelles :
Activité : Ingénieur développement matériel électronique
Secteur : High Tech - Électronique et micro-électronique

Informations forums :
Inscription : juillet 2012
Messages : 26
Points : 3
Points : 3
ouai je viens de lire un petit cours sur les unions et les enums. Je comprend leurs principe, c'est vachement pratique!

Citation:
Envoyé par 3DArchi
L'énumération permet de savoir quel est le champs valide.
Je ne comprend pas comment l'enum peut me dire quel est le champ de l'union est valide ??

Mais du coup je peux déjà avoir une variable qui prendra le type que je lui dirai, sans en avoir 36 des variables! Et si c'est moi qui lui dit quel type prendre, je peux envoyer cette variable à une gestion qui n'aura qu'à regarder dans un champ "type" de la structure par exemple (que j'aurai instancié préalablement).
La le traitement pourra se faire en fonction du type!
C'est bien ça
JuanLuis est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/08/2012, 11h16   #23
3DArchi
Rédacteur/Modérateur
 
Avatar de 3DArchi
 
Inscription : juin 2008
Messages : 7 631
Détails du profil
Informations forums :
Inscription : juin 2008
Messages : 7 631
Points : 12 159
Points : 12 159
Il faut renseigner les 2 champs en même temps :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
error_t make_error_u8(uint8_t err)
{
error_t err;
err.type = E_u8;
err.error.u8 = err;
}

error_t make_error_s32(int32_t err)
{
error_t err;
err.type = E_s32;
err.error.i32 = err;
}
etc...
__________________
Ressources proposées par 3DArchi.
Les fonctions virtuelles en C++.
3DArchi est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/08/2012, 11h34   #24
JuanLuis
Invité de passage
 
Homme JeanLouis
Ingénieur développement matériel électronique
Inscription : juillet 2012
Messages : 26
Détails du profil
Informations personnelles :
Nom : Homme JeanLouis
Âge : 25
Localisation : France, Ille et Vilaine (Bretagne)

Informations professionnelles :
Activité : Ingénieur développement matériel électronique
Secteur : High Tech - Électronique et micro-électronique

Informations forums :
Inscription : juillet 2012
Messages : 26
Points : 3
Points : 3
Okay ouai
donc je pense que je pourrai faire ça:

Code C :
1
2
3
4
5
6
7
8
9
10
11
 
 
error_t err;
 
err.type = E_u8;
err.error.u8 = ma_fonction_driver_X(data);
ma_gestion_derreur(error_t);
 
err.type = E_s32;
err.error.i32 = ma_fonction_driver_Y(data);
ma_gestion_derreur(error_t);

Ensuite ma_gestion_derreur peut récupérer l'erreur et sont type pour pouvoir en faire ce qu'elle veut!?
JuanLuis est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/08/2012, 13h19   #25
Bktero
Expert Confirmé Sénior
 
Avatar de Bktero
 
Ingénieur systèmes embarqués
Inscription : juin 2009
Messages : 1 717
Détails du profil
Informations personnelles :
Âge : 25
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Ingénieur systèmes embarqués
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : juin 2009
Messages : 1 717
Points : 4 217
Points : 4 217
L'idée est pas mal, même si ça ne change pas fondamentalement la face du monde. Au lieu de donner en paramètre à la fonction de gestion d'erreur un pointeur et un char pour indiquer le type de donnée à interpréter, tu lui passes seulement la structure. A l'intérieur, tu testes la valeur du champ énuméré pour savoir comment lire le champ du code d'erreur.
__________________
Si Code::Blocks vous dit undefined reference to 'socket@12', cela signifie que vous avez un problème d'édition des liens. Allez dans Projects / Build Options / Linker Settings / Add et renseigner ici les .a qui vont bien. Exemple pour les sockets : C:\Program Files\CodeBlocks\MinGW\lib\libws2_32.a

Pour les adeptes du langage SMS, allez ici et ramenez la traduction française ^^

Pour vos problèmes d'embarqué, utilisez le forum dédié !
Bktero est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/08/2012, 14h49   #26
JuanLuis
Invité de passage
 
Homme JeanLouis
Ingénieur développement matériel électronique
Inscription : juillet 2012
Messages : 26
Détails du profil
Informations personnelles :
Nom : Homme JeanLouis
Âge : 25
Localisation : France, Ille et Vilaine (Bretagne)

Informations professionnelles :
Activité : Ingénieur développement matériel électronique
Secteur : High Tech - Électronique et micro-électronique

Informations forums :
Inscription : juillet 2012
Messages : 26
Points : 3
Points : 3
Citation:
Envoyé par BKtero
L'idée est pas mal, même si ça ne change pas fondamentalement la face du monde. Au lieu de donner en paramètre à la fonction de gestion d'erreur un pointeur et un char pour indiquer le type de donnée à interpréter, tu lui passes seulement la structure.
Je suis tout à fait d'accord , pour le coup j'ai plusieurs solutions!
Non, ce qui changerai la face du monde (ou pas ), ça serai de pouvoir chopper la valeur de retour des drivers sans se soucier de son type. Mais là... Ca reglera pas mal de problème en cas d'implémentation de nouveaux drivers.
JuanLuis est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 06h34.


 
 
 
 
Partenaires

Hébergement Web