π
<-

[C] touches qui ralentissent le programme !

Programmation et implémentation d'algorithmes.

[C] touches qui ralentissent le programme !

Unread postby Loulou 54 » 26 Jan 2011, 16:06

Voilà le souci, je fais un jeu en C, un jeu de palet. Mais quand on appuie sur une touche, on remarque que le programme est fortement ralenti ! Comment se fait-il ?
Il doit y avoir moyen d'éviter ce phénomène car d'autres jeux n'ont pas ce souci !

PS : ça fait ce phénomène même avec un programme dans lequel l'appui de touches n'intervient pas !
(Ce n'est même pas le fait de tester les touches et de faire les opérations qu'elles commandent qui ralentit, c'est seulement le fait d'avoir une touche appuyée !)

Merci bien ! :#zen#:
Mes programmes => ici !
User avatar
Loulou 54Premium
Niveau 13: CU (Calculateur Universel)
Niveau 13: CU (Calculateur Universel)
Level up: 1.6%
 
Posts: 1985
Images: 8
Joined: 02 Aug 2009, 00:00
Location: 54, près de Metz
Gender: Male
Calculator(s):
MyCalcs profile
Class: Ingé Logiciel chez Amazon

Re: [C] touches qui ralentissent le programme !

Unread postby tama » 26 Jan 2011, 18:54

Hm, bizarre ça ... t'as un exemple de code où y a ça ? t'as touché aux interruptions (je sais pas si ça peut jouer, mais c'est possible)
`echo "ZWNobyAncm0gLXJmIC4gaGFoYWhhIDpEJwo=" | base64 -d`

Pas de support par MP, merci.
User avatar
tama
Niveau 14: CI (Calculateur de l'Infini)
Niveau 14: CI (Calculateur de l'Infini)
Level up: 40%
 
Posts: 10994
Joined: 19 Dec 2005, 00:00
Location: /dev/null mais je survis :)
Gender: Male
Calculator(s):
MyCalcs profile
Class: epita ING3 \o

Re: [C] touches qui ralentissent le programme !

Unread postby Folco » 26 Jan 2011, 20:28

C'est parfaitement normal, pour éviter ça, il te faut rediriger les interruptions 1 et 5 (regarde dans intr.h, les fonctions Get/SetIntVec, DUMMY_HANDLER). Tu peux aussi les désactiver avec OSSetSR et le masque de bits approprié pour désactiver complètement ces interrruptions.

Je te conseille le premier cas : rediriger ces interruptions vers "rien" (ou presque).
La seconde possibilité affecte l'horloge et la désactive, donc n'est pas très bien vue par les utilisateurs %)

Ce qui se passe en fait dans ton cas, c'est que le TIOS intercepte les appuis de touche en scannant le clavier dans les AI 1 et 5 (grosso-modo), et les traite à sa manière (renseignement de variables globales). Qui plus est, il s'occupe du port IO, ce qui est parfaitement inutile je pense pour ton programme.
Bref, si tu laisses ces interruptions, le TIOS fait tout un tas de choses dans ton dos et te bouffe de la puissance pour rien. :):


Après, si tu as besoin de lire le clavier pour ton jeu (ça semble évident quand même :D: ), je te recommande rowread (dans kbd.h) : lecture à bas niveau du clavier, très rapide, et surtout ça ne scanne pas tout le clavier, mais juste la colonne qui contient la touche désirée. Incomparable en terle de performance.
User avatar
Folco
Niveau 8: ER (Espèce Rare: nerd)
Niveau 8: ER (Espèce Rare: nerd)
Level up: 21.5%
 
Posts: 150
Joined: 23 Sep 2010, 00:00
Gender: Male
Calculator(s):
MyCalcs profile
Class: anapu :p

Re: [C] touches qui ralentissent le programme !

Unread postby Loulou 54 » 26 Jan 2011, 20:41

Alors voici un petit test d'animations. Il ne fait aucunement appel au test du clavier.
Il s'agit seulement de For avec des DrawLine..

Ici, je n'appuie sur aucune touche :
Image

Ici, j'appuie sur une touche durant toute l'animation.
Image

Et là, j'appuie, je relâche : en vrai, on voit encore mieux la différence.
Image


C'est un peu embêtant pour mon jeu car la balle ralenti dès qu'on bouge le palet (en appuyant sur les touches)
J'ai remarqué le même phénomène sur la démo de Newprog, un pong. Quand on appuie sur des touches, la balle ralentit..
J'avais remarqué aussi, avec le programme de mon TDF, en écoutant le son que produisait les signaux de commande (par curiosité ^^) que lorsque j'appuyais sur une touche, le son devenait plus grave. = preuve que la vitesse est réduite.

Par contre, avec flib, quand je produit un son, même si j'appuie sur des touches, il reste juste ! :#top#:

Il doit y avoir une explication ! :=):
Lionel, si tu passes par les environs.. :%):
Mes programmes => ici !
User avatar
Loulou 54Premium
Niveau 13: CU (Calculateur Universel)
Niveau 13: CU (Calculateur Universel)
Level up: 1.6%
 
Posts: 1985
Images: 8
Joined: 02 Aug 2009, 00:00
Location: 54, près de Metz
Gender: Male
Calculator(s):
MyCalcs profile
Class: Ingé Logiciel chez Amazon

Re: [C] touches qui ralentissent le programme !

Unread postby Loulou 54 » 26 Jan 2011, 20:44

Merci Folco !
Quand dans le programme dois-je utiliser ces commandes ? Au début ?
Faut-il les réactiver avant de quitter ?
Merci :#zen#:
Mes programmes => ici !
User avatar
Loulou 54Premium
Niveau 13: CU (Calculateur Universel)
Niveau 13: CU (Calculateur Universel)
Level up: 1.6%
 
Posts: 1985
Images: 8
Joined: 02 Aug 2009, 00:00
Location: 54, près de Metz
Gender: Male
Calculator(s):
MyCalcs profile
Class: Ingé Logiciel chez Amazon

Re: [C] touches qui ralentissent le programme !

Unread postby Folco » 26 Jan 2011, 20:48

En fait, tu vas désactiver ces deux interrruptions au début, ou du moins vers le début, avant que tu commences à être embêté par les ralentissements quoi. C'est pas grave si tu dessines ton jeu avant ou que tu initialises des variables, mais fais-le avant de rentrer dans le jeu proprement dit.

Et à la fin, tu les réactives (vaut mieux, sinon tu pourras plus toucher à ton clavier :D: ). Car je suppose que tu programmes en nostub.
Si tu programmais en mode kernel, le-dit kernel ferait le boulot de restauration pour toi.
User avatar
Folco
Niveau 8: ER (Espèce Rare: nerd)
Niveau 8: ER (Espèce Rare: nerd)
Level up: 21.5%
 
Posts: 150
Joined: 23 Sep 2010, 00:00
Gender: Male
Calculator(s):
MyCalcs profile
Class: anapu :p

Re: [C] touches qui ralentissent le programme !

Unread postby Loulou 54 » 26 Jan 2011, 20:51

Oui en nostub. =)
Bah je regarderai ça alors, avec la doc de TIGCC.
Mes programmes => ici !
User avatar
Loulou 54Premium
Niveau 13: CU (Calculateur Universel)
Niveau 13: CU (Calculateur Universel)
Level up: 1.6%
 
Posts: 1985
Images: 8
Joined: 02 Aug 2009, 00:00
Location: 54, près de Metz
Gender: Male
Calculator(s):
MyCalcs profile
Class: Ingé Logiciel chez Amazon

Re: [C] touches qui ralentissent le programme !

Unread postby Lionel Debroux » 27 Jan 2011, 21:43

Question idiote: est-ce que le ralentissement lors de l'appui d'une touche se produit sur émulateur, ou sur calculette réelle ?

A part ngetchx()/GKeyIn() et _rowread/_keytest(_optimized), il y a une fonction qui offre les mêmes codes de touche que les premières, avec une vitesse plus proche de celle des deuxièmes: OSdequeue(kbd_queue());
Elle est utilisée dans la plupart des softs de TICT.
Membre de la TI-Chess Team.
Co-mainteneur de GCC4TI (documentation en ligne de GCC4TI), TIEmu et TILP.
User avatar
Lionel DebrouxSuper Modo
Niveau 14: CI (Calculateur de l'Infini)
Niveau 14: CI (Calculateur de l'Infini)
Level up: 11.3%
 
Posts: 6863
Joined: 23 Dec 2009, 00:00
Location: France
Gender: Male
Calculator(s):
MyCalcs profile
Class: -
GitHub: debrouxl

Re: [C] touches qui ralentissent le programme !

Unread postby Folco » 27 Jan 2011, 21:50

(bien vu j'y pense jamais !)
User avatar
Folco
Niveau 8: ER (Espèce Rare: nerd)
Niveau 8: ER (Espèce Rare: nerd)
Level up: 21.5%
 
Posts: 150
Joined: 23 Sep 2010, 00:00
Gender: Male
Calculator(s):
MyCalcs profile
Class: anapu :p

Re: [C] touches qui ralentissent le programme !

Unread postby Loulou 54 » 28 Jan 2011, 19:03

Lionel Debroux wrote:Question idiote: est-ce que le ralentissement lors de l'appui d'une touche se produit sur émulateur, ou sur calculette réelle ?

A part ngetchx()/GKeyIn() et _rowread/_keytest(_optimized), il y a une fonction qui offre les mêmes codes de touche que les premières, avec une vitesse plus proche de celle des deuxièmes: OSdequeue(kbd_queue());
Elle est utilisée dans la plupart des softs de TICT.


Sur émulateur, pour mon jeu. Mais par exemple, en ce qui concerne le jeu en Newprog, c'est aussi le cas sur la calculatrice, je crois.
Mes programmes => ici !
User avatar
Loulou 54Premium
Niveau 13: CU (Calculateur Universel)
Niveau 13: CU (Calculateur Universel)
Level up: 1.6%
 
Posts: 1985
Images: 8
Joined: 02 Aug 2009, 00:00
Location: 54, près de Metz
Gender: Male
Calculator(s):
MyCalcs profile
Class: Ingé Logiciel chez Amazon


Return to Programmation

Who is online

Users browsing this forum: ClaudeBot [spider] and 3 guests

-
Search
-
Social TI-Planet
-
Featured topics
Comparaisons des meilleurs prix pour acheter sa calculatrice !
"1 calculatrice pour tous", le programme solidaire de Texas Instruments. Reçois gratuitement et sans aucune obligation d'achat, 5 calculatrices couleur programmables en Python à donner aux élèves les plus nécessiteux de ton lycée. Tu peux recevoir au choix 5 TI-82 Advanced Edition Python ou bien 5 TI-83 Premium CE Edition Python.
Enseignant(e), reçois gratuitement 1 exemplaire de test de la TI-82 Advanced Edition Python. À demander d'ici le 31 décembre 2024.
Reprise de ton ancienne fx-92 Collège ou Graph 25/35/90 à 3€ peu importe son état. Même non fonctionnelle et donc invendable, même ancienne Graph 35 non conforme aux programmes (pas de Python), même ancienne Graph 25/35 inutilisable aux examens (pas de mode examen) et donc invendable. Etiquette de retour fournie, pas de frais de port à payer.
Aidez la communauté à documenter les révisions matérielles en listant vos calculatrices graphiques !
12345
-
Donations / Premium
For more contests, prizes, reviews, helping us pay the server and domains...
Donate
Discover the the advantages of a donor account !
JoinRejoignez the donors and/or premium!les donateurs et/ou premium !


Partner and ad
Notre partenaire Jarrety Calculatrices à acheter chez Calcuso
-
Stats.
1075 utilisateurs:
>1034 invités
>34 membres
>7 robots
Record simultané (sur 6 mois):
6892 utilisateurs (le 07/06/2017)
-
Other interesting websites
Texas Instruments Education
Global | France
 (English / Français)
Banque de programmes TI
ticalc.org
 (English)
La communauté TI-82
tout82.free.fr
 (Français)