#define et variable

Pour toutes vos questions sur WinAVR, AVR-GCC et la programmation en C en général

Modérateur: Modérateur

#define et variable

Messagede jbe le 29 Avr 2008 21:42

Je voudrais pouvoir tester un bit d'un PORT à 0, en déclarant des variables du genre:

char toto;
toto = ~0x01;

Cela fonctionne quand PIND sera égale à 1111 1110
If (PIND = toto)
{

}


MAIS SI JE DEFINIE
#define toto ~0x01

Mon test en SI, n'est jamais vrai.

Après approfondissement du problème, il semblerait que l'opérateur ~ ne soit pas pris en compte dans le #define.

Connaissez vous une solution à ce problème ?

JBE
jbe
HABITUE
HABITUE
 
Messages: 60
Inscription: 06 Juil 2007 20:03
Localisation: Berry

Messagede Benjamin le 30 Avr 2008 9:22

Salut,

Dans les conditions en C c'est pas un double =???

Benjamin
.: http://www.roboticus.org :. Control your own world !
Benjamin
ACCRO
ACCRO
 
Messages: 304
Inscription: 11 Sep 2005 23:43
Localisation: Belgique

Messagede jbe le 30 Avr 2008 12:34

Merci Benjamin de répondre,

Tu peux me donner un exemple de ta condition (ou définition)

JBE
jbe
HABITUE
HABITUE
 
Messages: 60
Inscription: 06 Juil 2007 20:03
Localisation: Berry

Messagede jbe le 30 Avr 2008 13:06

Oui, l'opérateur de test est bien le double égal.
Mais là n'est pas le problème.

JBE
jbe
HABITUE
HABITUE
 
Messages: 60
Inscription: 06 Juil 2007 20:03
Localisation: Berry

Messagede Benjamin le 30 Avr 2008 20:42

Le problème dans un exemple comme celui là, c'est que l'affection renvoie un niveau vrai ou faux...

Ce que je ne comprend pas dans ton exemple (y'a longtemps que j'ai plus été dans les détails du C aussi) c'est le symbole ~... Je ne me rappel pas l'avoir utiliser un jour en C, il signifie quoi?

Il est probable que ce symbole soit interprété de façon différente au sein du compilateur, s'il s'agit d'affecter une valeur (charactere dans ce cas là) ou s'il s'agit de donner une valeur à une define... Se serait peut-être un bug d'AVR Gcc (et se serait pas le premier (oh la mauvaise langue ;))

Pourquoi ne pas donner tout simplement la valeur ASCII de ton caractere?

Benjamin
.: http://www.roboticus.org :. Control your own world !
Benjamin
ACCRO
ACCRO
 
Messages: 304
Inscription: 11 Sep 2005 23:43
Localisation: Belgique

Messagede jbe le 04 Mai 2008 8:46

Le caractère ~ est l'opérateur complément bit à bit (opérateur NON) , comme l'opérateur & (ET) et | (OU)
Exemple:
toto = 0b00000001;
alors ~toto donne 0b11111110

Pour tester des bits c'est très pratique.
if ( PIND & toto) = toto

ou if (PIND | ~toto =~toto)

On teste si PD0 est à 1 ou à 0.

Effectivement, cela doit être un bug à AVRGCC. Maintenant comment signaler ce bug ?


jbe
jbe
HABITUE
HABITUE
 
Messages: 60
Inscription: 06 Juil 2007 20:03
Localisation: Berry


Retourner vers WinAVR-AVR GCC

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités