Enum || mise en place d'une classe protocole

Signaler
Messages postés
15
Date d'inscription
lundi 9 février 2004
Statut
Membre
Dernière intervention
16 juillet 2008
-
Messages postés
6
Date d'inscription
samedi 10 janvier 2004
Statut
Membre
Dernière intervention
4 juillet 2006
-
Bonjour,

je cherche à metre en place un protocole de communication sur RS232 pour une application embarqué.
Soit g deja la connexion, une partie de l'interface... Maintenant je regarde à créé une classe pour les entêtes de la trame que je veux envoyer.
exemeple :

| < 1 > "Data"
| | [ Identifiant Commande ] [ Identifiant donnés ] [ Identifiant élément ]
| | < 0 > "Write OK" < 000 > "reservé" < xxx > (indiférent)
| |
| | < 1 > "Error Transmit" < 000 > "reservé" < xxx > (indiférent)

Donc l'idee était de creer une classe entete qui contient des flags en énum. Style :


[Flags]

public
enum
Entete
{
Data = 128 ,
WriteOK =128,
ERR=192
}

Mais forcément ce bout de code ne va pas car dans type enum, il ne peut y avoir deux falg ayant la même valeure. Or c'est ce que je veux : Quand c'est une ent^te data ca peut etre aussi "WriteOK"....
Et dans le m^me ordre d'idée, comment fair pour qu'un énum puisse prendre plusieur valeure (une plage)?
car comme dans l'exemple : les trois derniers bits peuvent avoir plusieur valeures. Et comme cette classe est valable a la reception et a l'émission, il faut que si on m'envoie une trame avec les trois derniers bist fluctuant , il reconnaisse que c'est bien "Write ok"???

Merci pour les idées et sugestion

4 réponses

Messages postés
497
Date d'inscription
mercredi 7 juillet 2004
Statut
Membre
Dernière intervention
13 juillet 2015
6
| < 01 > "Data"
| |
[ Identifiant Commande ] [ Identifiant donnés
] [ Identifiant élément ]
| |
< 0 > "Write
OK" <
000 >
"reservé"
< xxx > (indiférent)
| |
|
| < 1 > "Error
Transmit" <
000 >
"reservé" <
xxx > (indiférent)

| < 10 > "Commande"
| |
[ Identifiant Commande ] [ Identifiant donnés
] [ Identifiant élément ]
| |
< 0 > "Write
OK" <
000 >
"reservé"
< xxx > (indiférent)
| |
|
| < 1 > "Error
Transmit" <
000 >
"reservé" <
xxx > (indiférent)



Ainsi, tu n'auras pas les mêmes ENTET même si la
suite des bits est identique puisque les 2 bits de poids faible sont
différents.



DATA : de 01 0 000 000 à 01 1 111 111, c'est-à-dire de 128 à 255

COMMANDE : de 10 0 000 000 à 10 1 111 111, c'est-à-dire de 256 à 383



Le problème c'est que cela ne tient plus sur 1 octet, mais sur 9 bits.
Messages postés
497
Date d'inscription
mercredi 7 juillet 2004
Statut
Membre
Dernière intervention
13 juillet 2015
6
Ainsi, tu n'auras
pas les mêmes ENTET même si la suite des bits est identique puisque les
2 bits de poids FORT sont différents.


bien entendu
Messages postés
15
Date d'inscription
lundi 9 février 2004
Statut
Membre
Dernière intervention
16 juillet 2008

yep,

Ce serait en effet la solution la plus facile.
Mais comme tu l'as souligné, elle nécessite l'utilisation de 9 bits. Or sur le micro controleur que j'utilise (PIC 18F2420) cela allourdi la programation lorque l'on cherche a travailler sur 9 bits. En effet, le module de communication du micro controleur est prévu pour travailler sur 8 bits. Il y a bien une possibilité de travailler sur 9 bits en passant par le bit de parité (si mes souvenir sont correctes).
Mais bon, c'est lourd a la mise en place (de plus je suis limité en espace code donc la solution doit venir si possoble du coté PC (interface))

Voila pour la précision. Merci pour tes suggestions...

cordialement. JOOP @ GREENPROPULSION :d
Messages postés
6
Date d'inscription
samedi 10 janvier 2004
Statut
Membre
Dernière intervention
4 juillet 2006

Slt,
je ne sais pas ou tu en es, mais pour ton enumération tu peux faire :

enum Test {Zero 256, Un 255, One = Un, Deux = 254, Two = Deux, Trois = 3}

c'est à dire que tu peux donc bien réutiliser le même nom (litéral d'énumération) dans une énumération...

bon courage
Arnaud