PDA

Voir la version complète : [µLibrary][Aide] Utilisation d'un timer, Gestion text


sdevilcry
16/06/2008, 17h50
Timer :

Salut tout le monde, avec mon groupe on se demandait comment créer un timer a la sleep ou usleep, on a beau chercher dans la doc, rien pour nous mettre sur la voie....

Gestion text :

Enfin en second lieu, quelqu'un sait comment les développeurs font pour afficher le texte lettre par lettre ? (timer ?) ou fonction qui fait tout par magie ^^ ?


Merci d'avance :)

Cobain
16/06/2008, 17h55
plusieurs question :
quelle lib?
a quoi vas vous servir le timer? endormir la consol?

sdevilcry
16/06/2008, 17h57
Étant dans la section ulib, on utilise la ulib de brunni :-)

Quand au timer, il nous servira dans un premier temps a la gestion d'allumage de led (minijeu proposer dans notre jeu) afin de la laisser allumer durant un certain temps...
Et si l'on trouve pas de système pour l'écriture de texte, mettre un timer de x ms pour l'affichage de chaque lettre ce qui donnerai l'impression que le texte s'affiche petit a petit :)

Cobain
16/06/2008, 18h30
desoles pour la lib j'ai pas fais ttention a la section ^^ donc sur ça je peux pas t'aidé car je n'utilise pas cette lib

sinon pour la del tu peu travaillé en 60eme de seconde (60 boucle dans une seconde) ce qui est normalement suffisant ;)

sdevilcry
16/06/2008, 18h45
je viens de lire sur un topic libnds, que l'on peut utiliser des timer
7. Timers

Un timer est un registre compteur, qui joue le rôle d'horloge. Il permet par exemple d'attendre un certain temps, ou d'effectuer une action à intervalles réguliers. La DS possède 4 timers, numérotés de 0 à 3, qui sont tous les quatre cadencés à 33.514 MHz. L'utilisation de ces derniers est très simple, et s'effectue grâce à 2 registres.

Le premier, TIMER_CR(x), où x est le numéro du timer, permet de gérer, comme pour les transferts DMA, la configuration et la mise en place du timer. Le tableau qui suit montre les différents paramètres que l'on peut sélectionner. Le registre TIMER_CR(x) est un registre 16 bits, qui se situe à l'adresse :
- 0x04000102 pour le timer 0.
- 0x04000106 pour le timer 1.
- 0x0400010A pour le timer 2.
- 0x0400010E pour le timer 3.

Paramètre Bit Action
TIMER_ENABLE 7 Active le timer.
TIMER_IRQ_REQ 6 Active la génération d'une interruption lors du débordement du timer.
TIMER_CASCADE 2 Active la mise en cascade des timers, c'est-à-dire que le timer ne s'active que lorsque le timer précédent déborde. Ne peut être utilisé sur le timer 0.
TIMER_DIV_1 0-1 Cadence le timer à 33.514 MHz.
TIMER_DIV_64 0-1 Cadence le timer à (33.514 / 64) MHz.
TIMER_DIV_256 0-1 Cadence le timer à (33.514 / 256) MHz.
TIMER_DIV_1024 0-1 Cadence le timer à (33.514 / 1024) MHz.

Le second registre, TIMER_DATA(x) possède un comportement un peu plus compliqué. En effet, il permet en écriture de sélectionner la fréquence du compteur, grâce aux macros présentées dans le tableau suivant, qui sont utilisées suivant la division de la cadence du timer. Mais en lecture, il renvoit la valeur actuelle du compteur.
Ce registre de 16 bits se situe à l'adresse :
- 0x04000100 pour le timer 0.
- 0x04000104 pour le timer 1.
- 0x04000108 pour le timer 2.
- 0x0400010C pour le timer 3.

Paramètre de division du timer Macro pour le choix de la fréquence x
TIMER_DIV_1 TIMER_FREQ(x)
TIMER_DIV_64 TIMER_FREQ_64(x)
TIMER_DIV_256 TIMER_FREQ_256(x)
TIMER_DIV_1024 TIMER_FREQ_1024(x)

La libnds ne fournit aucune fonction de gestion de timers, mais leur utilisation est très simple, et ce fait comme suit :

Code PHP:
/* En utilisant la bonne macro pour calculer la fréquence */
TIMER_CR(numero) = parametres;
TIMER_DATA(numero) = frequence;


Quelqu'un serait-il bien s'en servir? Je vais chercher de mon coter en attendant :)

thoduv
16/06/2008, 19h04
Sur une console de jeu de faible puissance, la tâche principale est d'afficher quelque chose, ce qui fait qu'on utilise quasi-systématiquement la fréquence de rafraichissement de l'écran comme temporisateur.
Sur DS, l'écran se rafraichit à 60 images par secondes. Donc si tu veux attendre une seconde, tu attends 60 frames.

Les timers ne sont à utiliser que pour des timing très précis (genre production de son, gestion du wifi, mesure de performances, ou autre cas particuliers)

sdevilcry
16/06/2008, 19h26
oki donc en gros; j'incrémente une variable dans ma boucle principale et dès que ma variable vaut 60, mon temps écouler sera d'une seconde, c'est bien ca ?

thoduv
16/06/2008, 19h34
Exactement ! :)

sdevilcry
16/06/2008, 19h35
merci de ton aide :) on va pouvoir avancer notre pfa :)