24.06.2013 Views

Programmation proche du hardware avec le kit de développement ...

Programmation proche du hardware avec le kit de développement ...

Programmation proche du hardware avec le kit de développement ...

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

Hardwarenahe Programmierung in C<br />

4.3 Mise à un et mise à zéro <strong>de</strong>s bits dans <strong>le</strong>s registres<br />

Les mises à un et <strong>le</strong>s mises à zéro ciblées <strong>de</strong>s bits dans un registre peut être réalisées <strong>avec</strong> <strong>le</strong>s<br />

opérateurs logiques standards (et ‘&’, ou ‘|’, ou exclusif binaire ‘^’ et inverser ‘~’). Ces opérateurs<br />

permettent d'effectuer <strong>de</strong>s opérations au niveau <strong>de</strong>s bits.<br />

Dans l’exemp<strong>le</strong> suivant, <strong>le</strong> bit 4 <strong>du</strong> registre <strong>de</strong> configuration PRT0MX est d’abord mis à un et ensuite<br />

remis à zéro.<br />

/***********************************************/<br />

/* Configure pin 0.4 for the timer 0 */<br />

/* Set the bit 4 of PRT0MX */<br />

/***********************************************/<br />

PRT0MX = PRT0MX | 0x40;<br />

/***********************************************/<br />

/* Configure pin 0.4 as standard IO */<br />

/* C<strong>le</strong>ar the bit 4 of PRT0MX */<br />

/***********************************************/<br />

PRT0MX = PRT0MX & ~0x40;<br />

4.4 Désactivation <strong>de</strong>s optimisations <strong>du</strong> compilateur<br />

Tous <strong>le</strong>s compilateurs essayent <strong>de</strong> générer un co<strong>de</strong>, qui est <strong>le</strong> plus optimal possib<strong>le</strong>. Cette optimisation<br />

comprend entre autre l’élimination <strong>de</strong> co<strong>de</strong> superflu ou redondant. ANSII C met à disposition <strong>le</strong> mot<br />

clé volati<strong>le</strong> afin <strong>de</strong> désactiver ces optimisations. volati<strong>le</strong> est par conséquent très uti<strong>le</strong> pour<br />

l’accès direct <strong>hardware</strong> ou pour <strong>le</strong>s interruptions.<br />

4.4.1 Exemp<strong>le</strong><br />

Le co<strong>de</strong> suivant :<br />

whi<strong>le</strong> (Paral<strong>le</strong>lport == 0) {<br />

i++; /* wait until the paral<strong>le</strong>l port is ready */<br />

}<br />

peut être optimisé par <strong>le</strong> compilateur <strong>de</strong> la manière suivante :<br />

if (Paral<strong>le</strong>lport == 0) { /* test if paral<strong>le</strong>l port is read*/<br />

whi<strong>le</strong> (1) {<br />

i++; /* if yes, then never ending loop */<br />

}<br />

}<br />

Le compilateur optimise <strong>le</strong> co<strong>de</strong> <strong>de</strong> ci-<strong>de</strong>ssus afin <strong>de</strong> ré<strong>du</strong>ire <strong>de</strong> nombre d'accès à la variab<strong>le</strong><br />

Paral<strong>le</strong>lport. Ce qui permet d’améliorer considérab<strong>le</strong>ment la vitesse d’exécution <strong>du</strong> co<strong>de</strong>. Cela<br />

est tout à fait correct, car <strong>du</strong> point <strong>de</strong> vue <strong>du</strong> compilateur, la variab<strong>le</strong> Paral<strong>le</strong>lport reste constante.<br />

Les <strong>de</strong>ux co<strong>de</strong>s sont d’ail<strong>le</strong>urs équiva<strong>le</strong>nts, tant que Paral<strong>le</strong>lport ne change pas.<br />

32 / 41

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!