Citation
iostrym
Le pointeur sur structure AT91_USART0_BASE possède la valeur 0xfffd0000 donc...
... donc déjà ça part très mal car "AT91_USART0_BASE" n'est pas une structure mais une macrodéfinition...
Citation
iostrym
l'adresse des champs internes à la struture sont
automatiquement des offset par rapport à l'adresse
de départ de la structure ?
Soit
adresse cr = 0xfffd0000 + 4
adresse mr = 0xfffd0000 + 8
ou
adresse cr = 0xfffd0000
adresse mr = 0xfffd0000 + 4
Merci de votre aide.
EN THEORIE, si l'adresse de "struct atmel_usart_regs" vaut 0xfffd0000, alors:
&cr=0xfffd0000
&mr=0xfffd0000 + sizeof(cr) donc 0xfffd0000 + 4
etc
DANS LA REALITE, il arrive que parfois (souvent) le compilateur rajoute des octets pour que les champs soient alignés sur des mots machine. Ca optimise l'accès aux champs, ça optimise aussi la taille mémoire quand on a des tableaux de structure, etc. Donc &mr risquera
- de ne pas être 0xfffd0000 + 4
- d'être différent suivant la machine sur laquelle tu compiles
En tout état de cause, ce genre de manipulation mémoire est très dangereux, générateur de bug et absolument pas portable. Il y a sûrement (toujours) moyen de faire autrement...
L'homme qui murmurait à l'oreille des pingouins
[
fr.lang.free.fr]
Poste le Monday 22 May 2006 18:07:23