Defines explication
Fermé
Tibo06
Messages postés
5
Date d'inscription
mercredi 4 juillet 2007
Statut
Membre
Dernière intervention
21 mars 2008
-
20 mars 2008 à 09:49
Tibo06 Messages postés 5 Date d'inscription mercredi 4 juillet 2007 Statut Membre Dernière intervention 21 mars 2008 - 21 mars 2008 à 16:51
Tibo06 Messages postés 5 Date d'inscription mercredi 4 juillet 2007 Statut Membre Dernière intervention 21 mars 2008 - 21 mars 2008 à 16:51
3 réponses
Tibo06
Messages postés
5
Date d'inscription
mercredi 4 juillet 2007
Statut
Membre
Dernière intervention
21 mars 2008
20 mars 2008 à 09:52
20 mars 2008 à 09:52
Juste un truc, je sais quand meme que 0x... c'est de l'hexa mais je ne voit pas ce que ca fait apres les parentheses ou *
En gros un define tout simple ca va mais quand ce deviens tortueux je galere un peu voir meme beaucoup.
En gros un define tout simple ca va mais quand ce deviens tortueux je galere un peu voir meme beaucoup.
Bonjour
BASE_PIO_LED->PIO_OER = (LED_A | LED_B);
Cette ligne met à un 2 bits d'un port du microcontroleur, ce qui a pour effet d'allumer ou d'éteindre (ça dépend du hard) les deux leds correspondantes. Au passage, ça met à 0 tous les autres bits du port, tant pis pour eux.
Le sens du AT91_CAST change suivant que __ASSEMBLY__ est défini ou non. Je suppose que __ASSEMBLY__ est défini dans les passages en assembleur, et pas dans les passages en C. Pour en être sûr, il faudrait lire le manuel du compilateur.
Nous allons nous en tenir au cas du 'pur C'
la définition #define PIO_OER (AT91_CAST(AT91_REG *) 0x00000010) ne s'applique pas puisqu'elle est dans la branche #else du #ifndef __ASSEMBLY__
C'est la définition de la structure AT91S_PIO qui s'applique et PIO_OER est un champ de cette structure, (ce qui explique qu'il aparaît à droite d'un -> )
#define AT91C_BASE_PIOA (AT91_CAST(AT91PS_PIO) 0xFFFFF400) maintenant - toujours dans le cas du C
regarde la définition de AT91_CAST, tu vois que c'est équivallent à
#define AT91C_BASE_PIOA ((AT91PS_PIO) 0xFFFFF400)
ce qui définit un pointeur sur la structure AT91S_PIO, pointeur dont la valeur est constante et vaut 0xFF..FF400.
Sans cette syntaxe, comment ferais tu en C pour écrire dans le registre d'adresse 0xFFFFF410 ? (bien sûr que oui, il y a d'autres manières, mais pas plus 'légères', je crois)
BASE_PIO_LED->PIO_OER = (LED_A | LED_B);
Cette ligne met à un 2 bits d'un port du microcontroleur, ce qui a pour effet d'allumer ou d'éteindre (ça dépend du hard) les deux leds correspondantes. Au passage, ça met à 0 tous les autres bits du port, tant pis pour eux.
Le sens du AT91_CAST change suivant que __ASSEMBLY__ est défini ou non. Je suppose que __ASSEMBLY__ est défini dans les passages en assembleur, et pas dans les passages en C. Pour en être sûr, il faudrait lire le manuel du compilateur.
Nous allons nous en tenir au cas du 'pur C'
la définition #define PIO_OER (AT91_CAST(AT91_REG *) 0x00000010) ne s'applique pas puisqu'elle est dans la branche #else du #ifndef __ASSEMBLY__
C'est la définition de la structure AT91S_PIO qui s'applique et PIO_OER est un champ de cette structure, (ce qui explique qu'il aparaît à droite d'un -> )
#define AT91C_BASE_PIOA (AT91_CAST(AT91PS_PIO) 0xFFFFF400) maintenant - toujours dans le cas du C
regarde la définition de AT91_CAST, tu vois que c'est équivallent à
#define AT91C_BASE_PIOA ((AT91PS_PIO) 0xFFFFF400)
ce qui définit un pointeur sur la structure AT91S_PIO, pointeur dont la valeur est constante et vaut 0xFF..FF400.
Sans cette syntaxe, comment ferais tu en C pour écrire dans le registre d'adresse 0xFFFFF410 ? (bien sûr que oui, il y a d'autres manières, mais pas plus 'légères', je crois)
Tibo06
Messages postés
5
Date d'inscription
mercredi 4 juillet 2007
Statut
Membre
Dernière intervention
21 mars 2008
21 mars 2008 à 16:37
21 mars 2008 à 16:37
Bonjour, merci pour cette reponse. J'ai compris à peu pres l'explication mais ce n'est pas encore bien clair, en fait je me doutais bien que c'etait des definitions d'adresse de registre mais si je devais ecrire des lignes comme celles ci par moi meme je ne pense en etre capable.
J'imagine qu'il me faudrai une bonne revision des structures define et pointeurs. Connaitrais tu un tuto bien fait sur le sujet?
Merci encore
Tibo
J'imagine qu'il me faudrai une bonne revision des structures define et pointeurs. Connaitrais tu un tuto bien fait sur le sujet?
Merci encore
Tibo
Bonjour
Désolé pour le tuto, je n'en ai pas.
Désolé pour le tuto, je n'en ai pas.
Tibo06
Messages postés
5
Date d'inscription
mercredi 4 juillet 2007
Statut
Membre
Dernière intervention
21 mars 2008
21 mars 2008 à 16:51
21 mars 2008 à 16:51
Ce n'est pas grave, c'est deja tres gentil d'avoir passé du temps pour m'expliquer tout ca.
Bonne journée et joyeuse paque
Tibo
Bonne journée et joyeuse paque
Tibo