🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

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

Re: Delai en 100 eme de ms universel

#15571
From: Antoine Leca
Date: Mon, 19 Sep 2005 13:25
60 lines
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-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!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