Article View: fr.comp.lang.c
Article #15588Re: Delai en 100 eme de ms universel
From: Charlie Gordon
Date: Fri, 16 Sep 2005 16:24
Date: Fri, 16 Sep 2005 16:24
46 lines
3296 bytes
3296 bytes
"Arnaud" <clerget_a@club-internet.fr> wrote in message news:432ad506$0$307$7a628cd7@news.club-internet.fr... > Comment obtenir des poses de l'ordre du 100 eme de milli seconde ( 0.01 ms ) en Turbo C sous Dos > avec un r�sultat constant quelque soit la puisasnce du PC utilis� ? > La commande delai(1) permet d'avoir une delai de 1 milliseconde . > Impossible de dessendre en dessous via cette commande > La boucle for(i=1;i<10000;i++) permet une pause plus courte et tres fine > mais offre un resultat totalement variable et depedant de la puissance du PC utilis� ... Il faut effectivement faire une boucle que l'on aura pr�alablement calibr�e en mesurant le temps d'une autre mani�re : Tu fais une boucle de 1 million de tours, et tu mesures le temps qu'elle prend avec une lecture du compteur de tick (un long � l'adresse 0040:006C). le tick dure environ 55ms (65536 ticks par heure). Il faut eventuellement augmenter le nombre de tours pour avoir une mesure pertinente. l'idee est de mesurer a quelle frequence tu peux boucler sur la machine ou ton programme s'execute. Tu en deduis alors combien de tours il faut faire pour n'importe quelle dur�e. il faut imp�rativement utiliser la meme routine pour la calibration et le delai, sinon le code gener� peut etre tr�s diff�rent et les temps ne seront pas coh�rents. il faut garder a l'esprit que cette methode te donne un delai *minimal*. Si une interruption survient pendant la boucle voire un changement de process sous windows, le delai sera allong� hors du controle du programme. des durees de 10 micro secondes ne sont pas faciles a calibrer, l'impact du cache sera non negligeable, donc la methode reste approximative. sur des machines modernes (Pentium et suivants) il existe un registre special qui contient le nombre de cycles d'horloge. On peut faire une calibration pour savoir la vitesse d'horloge, et ensuite on peut faire une routine plus efficace et beaucoup plus pr�cise qui lit le compteur d'horloge, ajoute le delai converti en nombre de cycles, et ensuite boucle en relisant le compteur d'horloge et le comparant � l'heure de fin. Tu trouveras sur google tous les renseignements utiles en cherchant RDTSC (read time stamp counter), mais il faudra faire de l'assembleur 32 bits (eventuellement inline), mais cela marche aussi sous DOS. -- Chqrlie
Technical Details
Message-ID:
<dgeqfb$jhd$1@reader1.imaginet.fr>Path:
arc1-ca.pugleaf.net!g2news1.google.com!news2.google.com!proxad.net!teaser.fr!fr.colt.net!writer!not-for-mailReferences:
<432ad506$0$307$7a628cd7@news.club-internet.fr>Show Full Headers
Complete Article Headers
X-Google-Thread: f9822,8d23bb47e02845e2 X-Google-Attributes: gidf9822,public X-Google-Language: FRENCH,ASCII Path: arc1-ca.pugleaf.net!g2news1.google.com!news2.google.com!proxad.net!teaser.fr!fr.colt.net!writer!not-for-mail From: "Charlie Gordon" <news@chqrlie.org> Newsgroups: fr.comp.lang.c Subject: Re: Delai en 100 eme de ms universel Date: Fri, 16 Sep 2005 18:24:01 +0200 Organization: ImagiNET / Colt Internet Lines: 48 Message-ID: <dgeqfb$jhd$1@reader1.imaginet.fr> References: <432ad506$0$307$7a628cd7@news.club-internet.fr> NNTP-Posting-Host: gw.netgem.com X-Trace: reader1.imaginet.fr 1126886699 20013 195.68.2.34 (16 Sep 2005 16:04:59 GMT) X-Complaints-To: abuse@imaginet.fr NNTP-Posting-Date: 16 Sep 2005 16:04:59 GMT X-Priority: 3 X-MSMail-Priority: Normal X-Newsreader: Microsoft Outlook Express 6.00.2800.1506 X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2800.1506