🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: fr.comp.lang.c
Article #15588

Re: Delai en 100 eme de ms universel

#15588
From: Charlie Gordon
Date: Fri, 16 Sep 2005 16:24
46 lines
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-mail
References: <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