Article View: fr.comp.lang.c
Article #15571Re: Delai en 100 eme de ms universel
From: Antoine Leca
Date: Mon, 19 Sep 2005 13:25
Date: Mon, 19 Sep 2005 13:25
60 lines
4366 bytes
4366 bytes
Merci de ne pas poster en HTML dans Usenet : cela oblige certains (comme moi) � reformatter tout le post... Arnaud escribi� en el mensaje 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� ? Rappel th�orique : le � DOS � est bas� sur l'architecture PC (1981). L'horloge de ce bestiau tournait � 4,77 MHz (quand m�me, c'�tait beau poour l'�poque). Il est relativement facile d'utiliser l'interruption horloge syst�me, mais la fr�quence obtenue (18,2 Hz) ne va pas t'int�resser telle quelle. Il est possible d'obtenir une fr�quence plus �lev�e en changeant le diviseur du 8253 (au d�part c'est 65536, la valeur la plus �lev�e), pour obtenir des sous-multiples de cette fr�quence, jusqu'� descendre th�oriquement jusqu'� 1,193 185 MHz (un quart du 4,77 de r�f�rence, et un douzi�me de 14,318 18 MHz, fr�quence du quartz qui pilotait aussi apr�s division par 4 l'horloge vid�o NSTC, 3,58 MHz). Si tu veux obtenir une fr�quence de 100 kHz, il � suffit � donc de reprogrammer le diviseur de l'horloge syst�me avec 12, intercepter l'horloge syst�me, et prendre soin tous les 65536/12 fois d'appeler l'ancienne interruption pour quelle fasse son boulot (attention, il faut g�rer l'arrondi, c'est-�-dire une fois c'est tous les 5462 clicks, et deux fois tous les 5461). Tout ceci est amplement programm� par des bataillons d'afficionados du PC, dans la p�riode 1981-90. Seul souci, c'est souvent de l'assembleur, vu les perfs des b�canes de l'�poque... (et m�me en assembleur, il ne devait pas souvent utiliser 12 comme diviseur.) Si tu veux obtenir une _pause_ de 10 �s, c'est nettement plus coton... Le plus simple, c'est de reprogrammer l'horloge avec un diviseur tr�s petit (1 ou 2), ce qui donne une granularit� de quelques ns. Le code interrompu (assembleur) se contentera de d�cr�menter un compteur et rendre viiiiite la main si rien � faire, le cas le plus courant; sinon, appeler l'ancienne routine si le compteur virtuel a atteint 65536, ou terminer la pause si tu as atteint la fin. Sous Windows, Linux, et en r�gle g�n�rale n'importe quel OS un peu s�rieux, y compris dans une bo�te DOS ou avec dosemu, la possibilit� de reprogrammer l'horloge syst�me te sera refus�e. Seule possibilit�, les �mulateurs (mais leur demander un respect des fr�quences de cet acabit, c'est beaucoup demander, m�me avec les machines actuelles). Tu peux aussi faire la m�me chose en interrogeant la valeur actuelle du d�compte; et c'est d'ailleurs de cette mani�re que les OS actuels impl�mentent les timers (avec les r�sultats d�crits par les autres). Mais je ne suis pas s�r qu'un OS va te laisser interroger le compteur aussi souvent (cela va avoir un impact sur les perfs). De plus, si le noyau consid�re qu'il a mieux � faire que de te laisser regarder le compteur, il va faire l'autre chose et tu passeras derri�re. Antoine
Technical Details
Message-ID:
<dgme7i$fdh$1@shakotay.alphanet.ch>Path:
arc1-ca.pugleaf.net!g2news1.google.com!news1.google.com!fu-berlin.de!news.imp.ch!news.imp.ch!80.83.46.147.MISMATCH!news.alphanet.ch!alphanet.ch!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!news1.google.com!fu-berlin.de!news.imp.ch!news.imp.ch!80.83.46.147.MISMATCH!news.alphanet.ch!alphanet.ch!not-for-mail From: "Antoine Leca" <root@localhost.invalid> Newsgroups: fr.comp.lang.c Subject: Re: Delai en 100 eme de ms universel Date: Mon, 19 Sep 2005 15:25:05 +0200 Organization: Posted through ALPHANET (http://www.alphanet.ch/) Lines: 61 Sender: antoinel@143.red-217-127-250.pooles.rima-tde.net Message-ID: <dgme7i$fdh$1@shakotay.alphanet.ch> References: <432ad506$0$307$7a628cd7@news.club-internet.fr> NNTP-Posting-Host: 143.red-217-127-250.pooles.rima-tde.net Mime-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 8bit X-Trace: shakotay.alphanet.ch 1127136306 15793 217.127.250.143 (19 Sep 2005 13:25:06 GMT) X-Complaints-To: usenet@alphanet.ch NNTP-Posting-Date: Mon, 19 Sep 2005 13:25:06 +0000 (UTC) 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