Sleep - Wait

Signaler
Messages postés
23
Date d'inscription
dimanche 22 août 2004
Statut
Membre
Dernière intervention
25 mai 2006
-
Messages postés
141
Date d'inscription
mercredi 19 juillet 2006
Statut
Membre
Dernière intervention
20 avril 2011
-
Bonjour je voudrais savoir comment faire en assembleur( de base sans
windows et tout le tralala :)) une fonction sleep (en ms sa serait bien)

6 réponses

Messages postés
1466
Date d'inscription
vendredi 2 janvier 2004
Statut
Modérateur
Dernière intervention
14 février 2014
1
salut,




sleep est une fonction du system d'exploitation, elle permet d'endormir un thread donc sans os, pas de sleep.

@++
Messages postés
23
Date d'inscription
dimanche 22 août 2004
Statut
Membre
Dernière intervention
25 mai 2006

c'est pour ca que j'ai dit faire.. et non pas utilisé
Messages postés
1466
Date d'inscription
vendredi 2 janvier 2004
Statut
Modérateur
Dernière intervention
14 février 2014
1
salut,




dans ce cas, il faudrait preciser le systeme d'exploitation.

@++
Messages postés
23
Date d'inscription
dimanche 22 août 2004
Statut
Membre
Dernière intervention
25 mai 2006

aucun ... a partir de rien ... en gros recreer un delay a partir de l'assembleur de base
Messages postés
202
Date d'inscription
mardi 17 mai 2005
Statut
Membre
Dernière intervention
29 septembre 2008
2
Bonjour Blackhorn,

Pour occuper le processeur il y a toujours la méthode bestiale : crééer une ou plusieurs boucles imbriquées dont le temps d'exécution dépendra d'une part du nombre de fois que la boucle sera exécutée et du temps d'exécution d'une boucle élémentaire. Pour connaitre ce temps il te faut bien connaitre ton microprocesseur avec fréquence horloge et nombre de cycles horloge pour chacune des instructions.
Dans le principe ce n'est pas bien compliqué mais un peu fastidieux.

Autre désavantage: le code ne sera pas du tout portable. Les délais risquent de varier énormément d'un PC à un autre. Tu pourras toujours corriger en introduisant la fréquence horloge du micro mais selon le microprocesseur la même instruction peut être exécutée avec un nombre de cycles horloge différent.

Si tu ne part plus de rien, tu pourras peut être bénéficier de timers (interruptions dos par exemple).


Bon courage
Messages postés
141
Date d'inscription
mercredi 19 juillet 2006
Statut
Membre
Dernière intervention
20 avril 2011

salut,

Je suis d'accord avec Nasman et Patalo.

Tout d'abord, la solution de faire une boucle précalculée en cycles d'horloge est peu envisageable. Car avec les processeurs modernes (Pentium, Athlon ...), le cache et la parallélisation des instructions dans les pipelines d'exécution, rendent trés difficile l'estimation exacte en terme de cycles d'horloge. Seule une méthode empirique par essais successifs peut permettre de s'en sortir.

Ensuite, cette méthode de boucle ne peut être valide que si on invalide toute interruption, car on a de forte chance d'être préempté par le scheduler de tâches (que ce soit sous windows ou linux) pendant la boucle et donc fausser notre timing. Mais le fait d'invalider les IT pendant notre 'sleep' va geler notre OS.

Puis il y a la solution de l'interruption du timer qui semble plus élégant. Mais sans passer par l'OS, c'est à dire en utilisant le timer hardware, on va interferer avec les interruptions périodiques du timer servant à l'ordonnanceur de tâches (scheduler) de l'OS. On ne peut donc pas vraiment considerer cette solution comme envisageable sauf si on accepte de 'geler' le système pendant notre chrono.

Pour terminer, reste la solution qui consiste à 'endormir notre tâche jusqu'à la prochaine periode de l'ordonnanceur de tâche. Mais on devient alors, trés lié à l'OS puisqu'on utilise la gestion du multitâche pour rescheduler notre process.

Je ne pense pas qu'il y ait de solution vraiment simple .... sauf à réaliser l'opération sur microcontrolleur type PIC16Cxx et sans OS et seul au monde .

Gentoo... que du bonheur ...