[SOS] Re: Problème de timer...

David Decotigny david.decotigny at free.fr
Mar 27 Sep 17:52:02 CEST 2005


Bonjour,

[ en attachement : le message original ]

Bertrand Goareguer wrote:
> La fonction delay doit donc attendre 500 interruptions
> timer avant de sortir du while. C'est bien ce qu'elle
> fait (j'ai affiché la valeur du compteur avant et après
> l'appel de delay), cependant le temps réel d'attente
> est inférieur à une seconde. J'en conclus que la
> fréquence du timer est fausse, mais je n'arrive pas à
> savoir d'où vient l'erreur.

C'est inquiétant en effet...

> Pour l'instant, j'ai réalisé tous mes tests sous
> l'émulateur Bochs.

Ah, voila, je comprends mieux !

Je n'ai pas regarde dans les details le code que tu nous fournis mais,
de 2 choses l'une :
  - soit le timer est mal programmé
  - soit le temps "reel" est mal reproduit par bochs...

La premiere hypothese est possible bien sûr. Mais en tout les cas, meme
avec un timer correctement programmé, il ne faut pas s'attendre a une
simulation fidele en temps avec bochs. Bochs est un emulateur qui simule
tout, du processeur aux peripheriques en passant par... le temps. C'est
difficile de simuler l'ecoulement du temps quand on est un emulateur qui
tourne au-dessus d'un OS comme Linux ou windows qui n'est pas
temps-reel. Je pense que les gens de bochs n'ont pas voulu s'mbeter avec
ça, qu'ils préfèrent simuler le temps d'une façon assez approximative.
Cela pourrait expliquer le "problème". Probable en particulier que quand
l'OS que bochs execute ne fait rien, les IRQ timer se mettent a defiler
a toute allure (pas vérifié).

Bref, pour avoir une simulation fidèle en temps, a mon avis bochs n'est
pas l'outil rêvé, ni même qemu. M'enfin, pour être tout à fait
subjectif, je pense personnellement moi-même que qemu s'en sort un peu
mieux : une seconde dans qemu m'a l'air assez proche d'une seconde de ma
petite vie (pourvu que le référentiel soit galiléen, s'entend).

Conclusion, pour observer une pause de 5s dans la vraie vie du monde
réel lorsque tu fais delay(5000) :
 - utiliser un timer matériel (genre en faisant tourner l'OS directement
   sur la machine)
 - s'assurer que le timer est bien programmé (ce qui devrait etre le cas
   dans sos mais je préfère ne jurer de rien)

Bonne journee,

-- 
http://david.decotigny.free.fr/
-------------- section suivante --------------
Une pièce jointe a été nettoyée...
De: "Bertrand Goareguer" <bertrand.goareguer at orange.fr>
Objet: =?iso-8859-1?b?UHJvYmzobWUgZGUgdGltZXIuLi4A?=
Date: Tue, 27 Sep 2005 14:02:51 +0200
Taille: 4283
Url: http://the-doors.enix.org/pipermail/sos/attachments/20050927/abca1af0/ISO-8859-1QProblE8me_de_timer2E2E2E.mht


Plus d'informations sur la liste de diffusion Sos