Hello,
voilà, je suis entrain d'écrire un petit programme en C et j'aimerai bien réaliser des calculs avec le préprocesseur. J'explique par mon cas :
Je suis entrain d'écrire une routine de temporisation qui attend un certain nombre de microsecondes. La durée minimale est 16 us et la résolution est de 6 us. Ma fonction d'attente est une boucle qui attend qu'un compteur ait parcouru un cycle de comptage complet. Son argument actuellement est le nombre d'itération à faire.
prototype actuel de ma fonction :
Code :
- void waitUS(uint32_t numberOfIterations);
|
1 itération prend 16 us. 2 itérations 22 us. 3 itérations 28 us etc... Je l'ai bien mesuré à l'oscilloscope.
Simplement appeler la fonction avec le nombre d'itérations n'a pas beaucoup de sens et il serait plus compréhensible de passer comme argument la durée à attendre en microsecondes.
Ainsi, mon prototype désiré pour ma fonction serait :
Code :
- void waitUS(uint32_t timeInUs);
|
Aussi, est-ce possible de créer une macro WAIT_US(x) et dans mon code j'appelle cette macro qui calcule le nombre d'itération correspondant à la durée x (en us) afin que le compilateur compile un appel de la fonction avec le nombre d'itérations et ainsi le temps sera correctement respecté ?
Le nombre d'itérations est 1 si l'argument est inférieur ou égal à 16 et (l'argument - 16 ) / 6 dans tous les autres cas.
Sauf que si je fais ce calcul dans mon code... ça prend du temps processeur... et donc ça fausse la durée de la temporisation (surtout qu'une division c'est lent).
Alors voilà, comment faire cela ?
Je sais pas si je suis clair... Enfin demandez-moi d'expliquer mieux si vous ne comprenez pas tout...
merci beaucoup pour votre aide.
EDIT: je précise que j'aimerai une fonction qui n'admette que des valeurs immédiates (donc mon prototype doit être faux mais je sais pas comment on précise ça en C)
Message édité par abaddon2002 le 23-03-2010 à 23:19:29