🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

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

Re: Delai en 100 eme de ms universel

#15478
From: Arnaud
Date: Thu, 22 Sep 2005 15:38
250 lines
11621 bytes
C'est un message de format MIME en plusieurs parties.

------=_NextPart_000_0035_01C5BF9C.606D33E0
Content-Type: text/plain;
	charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable

Merci =E0 tous et en particulier =E0 Charlie Gordon pour cette =
excellente id=E9e qui consiste =E0 mesurer une grosse boucle en seconde =
pour pouvoir d=E9terminer ensuite par simple r=E8gle de 3 la dur=E9e de =
boucles plus courtes ... Simple et sans doute efficace  :o)=20

Certes , si on inclue dans le calcule des interruptions courantes et " =
impromptues " , =E7a change sans doute la donne ... ( A voir dans quelle =
mesure )=20

Mon projet consiste =E0 envoyer sur une simple sortie du port parralele =
avec au bout une simple LED Infra Rouge par exemple une impulsion =
pr=E9cise au milli=E8me de seconde pr=EAt pour envoyer du code RC5 ( =
entre autre ) , code ultile pour piloter des TV magn=E9toscope , HIFI =
ect . apr=E8s les infos du web , la longueur des cr=E9neaux binaire RC5 =
sont hyper pr=E9cis ...   Une trame binaire RC5 est bien sure tr=E8s =
courte et op=E9ration sera tr=E8s ponctuelle et tr=E8s courte ...  =20

Le tout dois =EAtre portable en fr=E9quence de trame RC5 automatiquement =
d'un PC sur l'autre

Le fait que je sois sous DOS simplifie dr=F4lement le jeux car =
effectivement , sous Windows ou LINUX , le Kernel fait ce qu'il veux =
quand il veux sans jamais nous tenir inform=E9 pr=E9cis=E9ment de son =
emploi du temps mais sur une dur=E9e si courte ( l'envoi d'une trame RC5 =
) =E7a doit =EAtre jouable aussi   ;o)=20


Arnaud =20
=20
  "Charlie Gordon" <news@chqrlie.org> a =E9crit dans le message news: =
dgeqfb$jhd$1@reader1.imaginet.fr...
  "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=E9sultat constant quelque soit la puisasnce du PC =
utilis=E9  ?

  > La commande delai(1) permet d'avoir une delai de 1 milliseconde .
  > Impossible de dessendre en dessous via cette commande

  > La boucle for(i=3D1;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=E9 ...

  Il faut effectivement faire une boucle que l'on aura pr=E9alablement =
calibr=E9e en
  mesurant le temps d'une autre mani=E8re :

  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 =E0 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=E9e.

  il faut imp=E9rativement utiliser la meme routine pour la calibration =
et le delai,
  sinon le code gener=E9 peut etre tr=E8s diff=E9rent et les temps ne =
seront pas
  coh=E9rents.

  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=E9 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=E9cise 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 =E0 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.

  --=20
  Chqrlie


------=_NextPart_000_0035_01C5BF9C.606D33E0
Content-Type: text/html;
	charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META http-equiv=3DContent-Type content=3D"text/html; =
charset=3Diso-8859-1">
<META content=3D"MSHTML 6.00.2800.1106" name=3DGENERATOR>
<STYLE></STYLE>
</HEAD>
<BODY bgColor=3D#ffffff>
<DIV><FONT face=3DArial size=3D2>Merci =E0 tous et en particulier =E0 =
Charlie Gordon=20
pour cette excellente id=E9e qui consiste =E0 mesurer une grosse boucle =
en seconde=20
pour pouvoir d=E9terminer&nbsp;ensuite par simple r=E8gle de 3 la =
dur=E9e de boucles=20
plus courtes ... Simple et sans doute efficace&nbsp; :o) </FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT>&nbsp;</DIV>
<DIV><FONT face=3DArial size=3D2>Certes , si on inclue dans le calcule =
des=20
interruptions courantes et " impromptues&nbsp;" , =E7a change sans =
doute&nbsp;la=20
donne ... ( A voir dans quelle mesure ) </FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT>&nbsp;</DIV>
<DIV><FONT face=3DArial size=3D2>Mon projet consiste =E0 envoyer sur une =
simple sortie=20
du port parralele avec au bout une simple LED Infra Rouge par exemple =
une=20
impulsion pr=E9cise au milli=E8me de seconde pr=EAt&nbsp;pour envoyer=20
du&nbsp;code&nbsp;RC5 ( entre autre ) , code ultile pour piloter des TV=20
magn=E9toscope , HIFI ect .&nbsp;apr=E8s les infos du web&nbsp;, la =
longueur des=20
cr=E9neaux binaire RC5 sont hyper pr=E9cis ... &nbsp;</FONT>&nbsp;<FONT =
face=3DArial=20
size=3D2>Une trame binaire RC5 est bien sure tr=E8s courte et =
op=E9ration sera tr=E8s=20
ponctuelle et tr=E8s courte ... &nbsp;&nbsp;</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT>&nbsp;</DIV>
<DIV><FONT face=3DArial size=3D2>Le tout dois =EAtre portable en =
fr=E9quence&nbsp;de=20
trame RC5 automatiquement d'un PC sur l'autre</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT>&nbsp;</DIV>
<DIV><FONT face=3DArial size=3D2>Le fait que je sois =
sous&nbsp;DOS&nbsp;simplifie=20
dr=F4lement le jeux car effectivement , sous Windows ou LINUX , le =
Kernel fait ce=20
qu'il veux quand il veux sans jamais nous tenir inform=E9 =
pr=E9cis=E9ment de son=20
emploi du temps&nbsp;mais sur une dur=E9e si courte ( l'envoi d'une =
trame=20
RC5&nbsp;) =E7a doit =EAtre jouable aussi &nbsp; ;o) </FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT>&nbsp;</DIV>
<DIV><FONT face=3DArial size=3D2></FONT>&nbsp;</DIV>
<DIV><FONT face=3DArial size=3D2>Arnaud </FONT>&nbsp;</DIV>
<DIV>&nbsp;</DIV>
<BLOCKQUOTE=20
style=3D"PADDING-RIGHT: 0px; PADDING-LEFT: 5px; MARGIN-LEFT: 5px; =
BORDER-LEFT: #000000 2px solid; MARGIN-RIGHT: 0px">
  <DIV>"Charlie Gordon" &lt;<A=20
  href=3D"mailto:news@chqrlie.org">news@chqrlie.org</A>&gt; a =E9crit =
dans le=20
  message news: <A=20
  =
href=3D"mailto:dgeqfb$jhd$1@reader1.imaginet.fr">dgeqfb$jhd$1@reader1.ima=
ginet.fr</A>...</DIV>"Arnaud"=20
  &lt;<A=20
  =
href=3D"mailto:clerget_a@club-internet.fr">clerget_a@club-internet.fr</A>=
&gt;=20
  wrote in message<BR><A=20
  =
href=3D"news:432ad506$0$307$7a628cd7@news.club-internet.fr">news:432ad506=
$0$307$7a628cd7@news.club-internet.fr</A>...<BR><BR>&gt;=20
  Comment obtenir des poses de l'ordre du 100 eme de milli seconde ( =
0.01 ms=20
  )<BR>en Turbo C sous Dos<BR>&gt; avec un r=E9sultat constant quelque =
soit la=20
  puisasnce du PC utilis=E9&nbsp; ?<BR><BR>&gt; La commande delai(1) =
permet=20
  d'avoir une delai de 1 milliseconde .<BR>&gt; Impossible de dessendre =
en=20
  dessous via cette commande<BR><BR>&gt; La boucle =
for(i=3D1;i&lt;10000;i++)=20
  permet une pause plus courte et tres fine<BR>&gt; mais offre un =
resultat=20
  totalement variable et depedant de la puissance du PC<BR>utilis=E9 =
...<BR><BR>Il=20
  faut effectivement faire une boucle que l'on aura pr=E9alablement =
calibr=E9e=20
  en<BR>mesurant le temps d'une autre mani=E8re :<BR><BR>Tu fais une =
boucle de 1=20
  million de tours, et tu mesures le temps qu'elle prend<BR>avec une =
lecture du=20
  compteur de tick (un long =E0 l'adresse 0040:006C). le tick<BR>dure =
environ 55ms=20
  (65536 ticks par heure).&nbsp; Il faut eventuellement augmenter =
le<BR>nombre=20
  de tours pour avoir une mesure pertinente.&nbsp; l'idee est de mesurer =

  a<BR>quelle frequence tu peux boucler sur la machine ou ton programme=20
  s'execute.&nbsp; Tu<BR>en deduis alors combien de tours il faut faire =
pour=20
  n'importe quelle dur=E9e.<BR><BR>il faut imp=E9rativement utiliser la =
meme routine=20
  pour la calibration et le delai,<BR>sinon le code gener=E9 peut etre =
tr=E8s=20
  diff=E9rent et les temps ne seront pas<BR>coh=E9rents.<BR><BR>il faut =
garder a=20
  l'esprit que cette methode te donne un delai *minimal*.&nbsp; Si=20
  une<BR>interruption survient pendant la boucle voire un changement de =
process=20
  sous<BR>windows, le delai sera allong=E9 hors du controle du=20
  programme.<BR><BR>des durees de 10 micro secondes ne sont pas faciles =
a=20
  calibrer, l'impact du<BR>cache sera non negligeable, donc la methode =
reste=20
  approximative.<BR><BR>sur des machines modernes (Pentium et suivants) =
il=20
  existe un registre special<BR>qui contient le nombre de cycles=20
  d'horloge.&nbsp; On peut faire une calibration pour<BR>savoir la =
vitesse=20
  d'horloge, et ensuite on peut faire une routine plus efficace<BR>et =
beaucoup=20
  plus pr=E9cise qui lit le compteur d'horloge, ajoute le delai =
converti<BR>en=20
  nombre de cycles, et ensuite boucle en relisant le compteur d'horloge =
et=20
  le<BR>comparant =E0 l'heure de fin.&nbsp; Tu trouveras sur google tous =
les=20
  renseignements<BR>utiles en cherchant RDTSC (read time stamp counter), =
mais il=20
  faudra faire de<BR>l'assembleur 32 bits (eventuellement inline), mais =
cela=20
  marche aussi sous DOS.<BR><BR>-- =
<BR>Chqrlie<BR><BR></BLOCKQUOTE></BODY></HTML>

------=_NextPart_000_0035_01C5BF9C.606D33E0--
Technical Details
Message-ID: <4332d1b9$0$12994$7a628cd7@news.club-internet.fr>
Path: arc1-ca.pugleaf.net!g2news1.google.com!news3.google.com!border1.nntp.dca.giganews.com!nntp.giganews.com!feed6.newsreader.com!newsreader.com!news-out1.kabelfoon.nl!newsfeed.kabelfoon.nl!xindi.nntp.kabelfoon.nl!194.25.134.62.MISMATCH!newsfeed00.sul.t-online.de!t-online.de!grolier!v.t-online.fr!t-online.fr!not-for-mail
References: <432ad506$0$307$7a628cd7@news.club-internet.fr> <dgeqfb$jhd$1@reader1.imaginet.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!news3.google.com!border1.nntp.dca.giganews.com!nntp.giganews.com!feed6.newsreader.com!newsreader.com!news-out1.kabelfoon.nl!newsfeed.kabelfoon.nl!xindi.nntp.kabelfoon.nl!194.25.134.62.MISMATCH!newsfeed00.sul.t-online.de!t-online.de!grolier!v.t-online.fr!t-online.fr!not-for-mail
Reply-To: "Arnaud" <clerget_a@club-internet.fr>
From: "Arnaud" <clerget_a@club-internet.fr>
Newsgroups: fr.comp.lang.c
References: <432ad506$0$307$7a628cd7@news.club-internet.fr> <dgeqfb$jhd$1@reader1.imaginet.fr>
Subject: Re: Delai en 100 eme de ms universel
Date: Thu, 22 Sep 2005 17:38:00 +0200
Organization: .
MIME-Version: 1.0
Content-Type: multipart/alternative;
 boundary="----=_NextPart_000_0035_01C5BF9C.606D33E0"
X-Priority: 3
X-MSMail-Priority: Normal
X-Newsreader: Microsoft Outlook Express 5.50.4522.1200
X-MimeOLE: Produced By Microsoft MimeOLE V5.50.4522.1200
Lines: 251
Message-ID: <4332d1b9$0$12994$7a628cd7@news.club-internet.fr>
NNTP-Posting-Date: 22 Sep 2005 15:46:02 GMT
NNTP-Posting-Host: 62.35.1.136
X-Trace: 1127403962 news.club-internet.fr 12994 62.35.1.136
X-Complaints-To: abuse@club-internet.fr