Léa-Linux & amis :   LinuxFR   GCU-Squad   GNU
Petite question en C
Envoyé par: iostrym

Bonjour,

J'ai une petite question simple en C, j'ai beau chercher je ne vois pas la signification des lignes de code suivantes:

Dans un fichier *.c :

HW_AT91_TIMER_INIT(KERNEL_TIMER)
...
v &= ~TCNXCNS(KERNEL_TIMER,3);
v |= TCNXCNS(KERNEL_TIMER,1);

et dans le fichier d'entête *.h, il y a :

#define HW_AT91_TIMER_INIT(timer)
...
#define TCNXCNS(timer,v) ((v) << (timer<<1))

mais pas de #define ~TCNXCNS(timer,v) ?-(

Je n'arrive pas à savoir si le tilde ~ à un signification particulière ici ou s'il est un caractère comme un autre.
De plus, je comprend l'utilisation de #define toto si on affecte pas de valeur à toto pour pouvoir ensuite faire des #ifdef ou #ifndef. Mais dans ce cas précis, je ne vois pas par quoi est remplacé HW_AT91_TIMER_INIT. ?-(

Voilà je voulais savoir si c'était quelque chose d'évident ou pas. Je tiens à préciser que j'ai récupérer ce code des source d'un système d'exploitation uClinux qui fonctionne donc a priori, il n'y a pas de problème de syntaxe...

Si quelqu'un avait une idée ce serait sympa, merci beaucoup ! :-)



Poste le Wednesday 24 May 2006 10:47:34
Répondre     Citer    
Re: Petite question en C
Envoyé par: Senyk

~ est le non bit à bit

Poste le Wednesday 24 May 2006 12:34:22
Répondre     Citer    
Re: Petite question en C
Envoyé par: iosrtym

Merci beaucoup, aurais-tu une idée de la signification de


#define HW_AT91_TIMER_INIT(timer)
...
HW_AT91_TIMER_INIT(KERNEL_TIMER)

?

Merci.

Poste le Wednesday 24 May 2006 13:30:58
Répondre     Citer    
Re: Petite question en C
Envoyé par: Sve@r

Citation
iosrtym
Merci beaucoup, aurais-tu une idée de la
signification de


#define HW_AT91_TIMER_INIT(timer)
...
HW_AT91_TIMER_INIT(KERNEL_TIMER)

?

Merci.

Tu définis une macro avec paramètre. lorsque le préprocesseur remplacera la macro, il replacera le paramètre là où il faut.
Exemple
#define CARRE(x) ((x) * (x))

i=CARRE(5);
j=CARRE(6);

Tu remarqueras les parenthèses autour de "x". Elles permettent d'écrire des trucs de ce style
i=CARRE(2 + 3);

Et les parenthèses globales permettent d'écrire des trucs de ce style
j=CARRE(2) + CARRE(3)
sans se préoccuper de la priorité du "+" par rapport à "*"


L'homme qui murmurait à l'oreille des pingouins
[fr.lang.free.fr]

Poste le Wednesday 24 May 2006 18:22:38
Répondre     Citer    
Re: Petite question en C
Envoyé par: iostrym

je suis d'accord avec toi mais là, il n'y a pas de remplacement pour la macro !!!

par quoi est alors remplacé HW_AT91_TIMER_INIT ??

Merci pour ton aide

Poste le Thursday 25 May 2006 11:40:44
Répondre     Citer    
Re: Petite question en C

Pour savoir par quoi sont remplacé les macros, tu peux utiliser gcc -C -E

Par exemple imaginaire supposons que ta compilation se fasse par la commande suivante (probablement générée par make):
gcc -O -c -I moninclude/ -DMAVARIABLE truc.c

Alors tu peux obtenir le fichier obtenu par le préprocesseur avec la commande
gcc -C -E -O  -I moninclude/ -DMAVARIABLE truc.c > truc.i

Ensuite tu pourrais regarder ce fichier truc.i par exemple avec emacs ou
less truc.i
et tu pourrais peut-être aussi l'indenter avec indent.

Pour ma part, je fais souvent
gcc -C -E -O  -I moninclude/ -DMAVARIABLE truc.c | grep -v '^#' | indent > truc.i

Et il m'arrive même de mettre une règle dans le Makefile pour ça.

le grep -v est là pour enlever la numérotation originelle des lignes sources.

----

Basile STARYNKEVITCH

Membre de l'APRIL « promouvoir et défendre le logiciel libre » - adhérez vous aussi à l'APRIL!

Projet logiciel libre: RefPerSys

Poste le Thursday 25 May 2006 12:00:42
Répondre     Citer    
Re: Petite question en C
Envoyé par: abgech

Citation
iostrym
je suis d'accord avec toi mais là, il n'y a pas de remplacement pour la macro !!!

par quoi est alors remplacé HW_AT91_TIMER_INIT ??

Merci pour ton aide

À priori par rien !

Il semble s'agir de la définition d'un délai d'attente. Peut-être n'est-il pas nécessaire dans certains cas.

Regarde si tu as une compilation conditionnelle du type:

#ifdef une_condition
#      define HW_AT91_TIMER_INIT(timer)
#else 
#      define HW_AT91_TIMER_INIT(timer) une_definition_quelconque
#endif

Dans ce cas, si une_condition est VRAIE, alors HW_AT91_TIMER_INIT(timer) est défini comme rien à la compilation. Si la condition est FAUSSE, alors HW_AT91_TIMER_INIT(timer) est défini comme une_definition_quelconque à la compilation.
Tu peux aussi avoir l'inverse, ou #ifndef à la place de #ifdef. Soit 4 possibilités en tout.

J'espère avoir pu t'aider un peu.

Poste le Thursday 25 May 2006 12:01:13
Répondre     Citer    
Re: Petite question en C
Envoyé par: iostrym

Merci beaucoup pour votre aide, c'est parfait, tout est clair maintenant.

Poste le Friday 26 May 2006 11:02:35
Répondre     Citer    

Veuillez vous authentifier auparavant pour commenter.

 

Ce forum !
Petite question en C
Pour poser vos questions sur les scripts shell, le Perl, le C, etc... Attention : nous ne sommes pas des spécialistes du dev, ce forum est juste pour de petites aides ponctuelles concernant le développement et les outils de développement.

Sauf mention contraire, les documentations publiées sont sous licence Creative-Commons