Poster un nouveau sujet Poster une réponse Page: 1,      >>
La lenteur de la TI82
Auteur Message
tomboul



Autorisation : Membre
Nb de messages : 10
Inscrit le : Dim 20 Mai 2012, 1:59
Posté le : Jeu 24 Mai 2012, 13:36   Citer 

Pour la lenteur, j'ai constaté un problème en programmant un casse brique.
Au début c'est relativement rapide mais plus on avance dans le jeu plus c'est long.

Je pense qu'il y a un empilement quelque part en mémoire (je soupçonne Entry) qui fait que la vitesse ralenti au fure et à mesure que le programme s'exécute, car quand on arrête le prg et qu'on le relance, la vitesse redevient relativement rapide.

J'ai donc mis un clearEntries (ou efface entrees) dans la boucle principale, mais manque de bol celui ci ne s'exécute que lorsque le programme est arrêté (voir la doc dans le pdf page 18-4 "effacer des entrées").

extrait de la doc :

Code
Remarque : Si vous sélectionnez 3:Efface entrées à partir
d’un programme, l’instruction Efface entrées est insérée dans
l’éditeur de programme et se termine une fois que le
programme a été exécuté.



Faut-il finalement se soumettre à cette fatalité que la TI82 n'est pas faite pour un prg s'exécutant à l'intérieur d'une grande boucle interne ou autrement dit n'est pas faite pour exécuter des programmes dont l'utilisation est plus longue dans le temps...

 Adresse email Haut de page Bas de page 
 
Persalteas



Autorisation : Membre
Nb de messages : 2164
Inscrit le : Sam 23 Jan 2010, 20:09
Posté le : Jeu 24 Mai 2012, 14:51   Citer 

Souvent, par expérience, quand un programme ralentit de plus en plus au fur et a mesure de son utilisation, c'est qu'il y a un Goto quelque part entre un Then et un End.


Code

If condition
Then
...
...
If condition:Goto X
...
End



N'est pas bon du tout, c'est ça qui crée le ralentissement.

Je te conseille ceci en remplacement:



Code

0->Z
If condition
Then
...
...
If condition:1->Z
...
End
If Z=1:Goto X



ça ralentit tout de suite moins, ou, en tout cas, ça a la même vitesse que ce soit au début ou au bout d'une demi heure d'utilisation.

 Adresse email Haut de page Bas de page 
 
linkakro



Autorisation : Membre
Nb de messages : 3767
Inscrit le : Lun 19 Oct 2009, 21:25
Posté le : Jeu 24 Mai 2012, 15:17   Citer 

Regarde mon article à propos des ralentissements si cela peu t'aider.
http://tout82.free.fr/forum/sujet.php?sujet=2757

Ces ralentissements sont un problème récurrent dans les casse-briques, pongs et snakes.

----------------------
ti82statfr: 2008, inscrit: 2009, ti84pocketfr: noël2011, ti30xbmultiview: iut 2012-2014
Perfectionniste, manque tact. Pas le temps de tout publier depuis 2011. Répond toujours aux questions. (rédigé juin 2014)

Pour tout le monde et surtout les débutants, quelques-uns des articles courants :
*Traductions Algorithmie/Ti-Basic.
*Caractères spéciaux sur Tout82
Les défauts du TI-Basic : Goto_versus_algo et DelVar/End/Lbl/guillemet/store
 Adresse email Haut de page Bas de page 
 
tomboul



Autorisation : Membre
Nb de messages : 10
Inscrit le : Dim 20 Mai 2012, 1:59
Posté le : Jeu 24 Mai 2012, 19:13   Citer 

Effectivement

J'en avais beaucoup, pourtant je n'ai pas trop l'habitude des goto ...

en optimisant avec if then else end, puis par vos conseil, il n'y a plus de ralentissement.

Il n'empèche que c'est pas très logique et très bizarre comme comportement ...

Pour trouver que ça vient de là il faut en avoir bouffer du code sur la TI82 !!!
il suffirait que l'action d'un goto provoque chez l'interpréteur un dépilement total des imbrications en cours et le problème serait réglé

ça sent le bug ...

 Adresse email Haut de page Bas de page 
 
sandro



Autorisation : Membre
Nb de messages : 1387
Inscrit le : Ven 25 Mar 2011, 22:58
Posté le : Jeu 24 Mai 2012, 20:18   Citer 

non, ce ne serait franchement pas efficace, imagine imagine un goto dans une boucle ou un If : il la considèrerait comme fermé même si on n'en sort pas, résultat : quand on arrive au End, la TI plante. Ou alors il ne faudrait garder que les goto et les If sans Then, comme en assembleur, et tout faire par sauts. Mais en basic, si le programme est gros, ce serait très lent.

Sandro

----------------------
mort à l'inutile, place à la mémoire libre et aux programmes
 Adresse email Haut de page Bas de page 
 
tomboul



Autorisation : Membre
Nb de messages : 10
Inscrit le : Dim 20 Mai 2012, 1:59
Posté le : Ven 25 Mai 2012, 12:30   Citer 

Oui Sandro, quand j'ai écrit mon message je me suis rendu compte quelques minutes après de ma bourde ...
ma solution n'est pas bonne, mais je persiste à penser que ce ralentissement n'est pas normal et vient bien d'une faiblesse de l'interpréteur.
Il me semble qu'il existe des solutions pour ne pas avoir ce genre de problème.
par exemple :
Avant de lancer le prg il pourrait faire un premier balayage des imbrications avec les lbl, else, if, then, while, for, repeat, end et goto (comme ça il pourrait vérifier leur cohérence) puis ensuite exécuter le PRG et à chaque goto selon le lbl à atteindre il pourrait dépiler correctement. Ca ne me semble pas insurmontable, ni en temps d'exécution, ni en mémoire, ni en programmation, ça lui ferait même gagner ensuite de la rapidité car il ne serait pas obligé de scanner tous le programme dès qu'il y a un saut de for, while, repeat, else, ou goto à faire ...

Au pire il pourrait prévenir l'utilisateur de l'utilisation des goto à l'interieur d'une structure utilisant un end dans la documentation !!!!

 Adresse email Haut de page Bas de page 
 
Persalteas



Autorisation : Membre
Nb de messages : 2164
Inscrit le : Sam 23 Jan 2010, 20:09
Posté le : Ven 25 Mai 2012, 14:40   Citer 

Ben il pourrait compiler le programme, tant que tu y es... ça irait plus vite.

Non, détrompe toi, c'est du langage interprété, c'est le principe même:

Le programme lit ligne par ligne, et va là ou on lui dit. Si on lui dit d'attendre un End, il attend.

En aucun cas il ne scanne tout le programme d'un coup.

 Adresse email Haut de page Bas de page 
 
tomboul



Autorisation : Membre
Nb de messages : 10
Inscrit le : Dim 20 Mai 2012, 1:59
Posté le : Ven 25 Mai 2012, 19:26   Citer 

Si l'interpréteur fait du ligne à ligne pur et dur, quand il tombe sur un goto, il scanne toute les lignes jusqu'à ce qu'il trouve le lbl ? Mais quand l'interpréteur tombe sur un lbl penses tu qu'il ne mémorise pas son emplacement pour qu'il ne soit pas obligé, quand il tombe sur un goto, de rescanner toutes les lignes du programme afin de retrouver le lbl visé par le goto ?

Oui Persalteas, c'est de l'interprété, mais cela ne doit pas l'empécher de prévenir certaines incohérences comme ce goto sauvage en faisant initialement un balayage, et d'augmenter son efficacité, sans forcément faire une compilation.

Un interpréteur dont le rôle essentiel est d'interpréter correctement est toujours perfectible !!!
le php ou le javascript et plein d'autre langage interprétés ont forcément une partie de préparation avant l'exécution. Depuis IE9, le navigateur compile carrément le javascript pour être plus rapide. (http://blogs.msdn.com/b/iefrance/archive/2010/05/05/internet-explorer-9-de-l-innovation-tous-les-tages.aspx), certe pas besoin d'aller si loin pour une calculette !!!

En tous les cas merci pour votre aide à tous, vous êtes très forts !!!

 Adresse email Haut de page Bas de page 
 
Persalteas



Autorisation : Membre
Nb de messages : 2164
Inscrit le : Sam 23 Jan 2010, 20:09
Posté le : Dim 27 Mai 2012, 17:01   Citer 


Citer

Si l'interpréteur fait du ligne à ligne pur et dur, quand il tombe sur un goto, il scanne toute les lignes jusqu'à ce qu'il trouve le lbl ? Mais quand l'interpréteur tombe sur un lbl penses tu qu'il ne mémorise pas son emplacement pour qu'il ne soit pas obligé, quand il tombe sur un goto, de rescanner toutes les lignes du programme afin de retrouver le lbl visé par le goto ?



Exactement.

Il scanne jusqu'à le trouver et ne retient pas sa position.
C'est pour ça que l'usage de Goto/Lbl est déconseillé par rapport aux boucles While ou Repeat.

Si tu veux, "mémoriser une position", en langage de programmation plus avancé, ça veut dire se souvenir de l'endroit ou ce qu'on cherche est enregistré dans la mémoire. (Un pointeur, pour les connaisseurs).

Et la gestion des pointeurs dans un langage permet de faire des programmes rapides, en effet.
(exemples: l'Axe (compilé) ou le Grammer (non compilé), tous les deux biens plus rapides que le Basic.)

 Adresse email Haut de page Bas de page 
 
tomboul



Autorisation : Membre
Nb de messages : 10
Inscrit le : Dim 20 Mai 2012, 1:59
Posté le : Mar 29 Mai 2012, 19:20   Citer 


Citer
Si tu veux, "mémoriser une position", en langage de programmation plus avancé, ça veut dire se souvenir de l'endroit ou ce qu'on cherche est enregistré dans la mémoire. (Un pointeur, pour les connaisseurs).



Cela peut être aussi une position relative ou indexée pour une table de lignes par exemple, en assembleur cela revient systématiquement à un pointeur contenu dans un registre avec éventuellement un déplacement. J'ai déjà beaucoup programmé en assembleur, dans les années 80 sur les "gros" ibm 370, pour le minitel, puis je me suis amusé à faire un petit séquenceur musical sur un ZX81 http://www.myprius.co.za/ZX81.htm de sinclair (pas de mémoire de sauvegarde ou de disque dur ni de disquette, sauvegarde et chargement incontournable avec K7, sinon l'ordi restait totalement vide), puis en 68000 pour l'avionique chez Thalès.

Je viens de découvrir que l'assembleur utilisé pour la TI-82 c'est du Z80 !! je ne pensais pas que ça existait encore !!! ça me rapelle des vieux souvenirs !!!

L'interpréteur a surement été écrit en assembleur. Je pense l'interpréteur n'est pas très élaboré car il s'interdit d'utiliser une mémoire extensible et s'impose une mémoire forcément limitée, donc aucune possibilité de mémoriser quoique ce soit ...
il y a fort à parier qu'il y a un bug si on fait trop d'imbrications de if dans des for de for de if jusqu'à plus de 6 ou 7 niveaux !!

 Adresse email Haut de page Bas de page 
 
linkakro



Autorisation : Membre
Nb de messages : 3767
Inscrit le : Lun 19 Oct 2009, 21:25
Posté le : Mar 29 Mai 2012, 21:16   Citer 

Ta déduction est trop hative.
Je viens d'imbriquer 14 boucles For et 2 Then sans difficulté, et la dernière était bien executée.

Il se peut bien qu'une partie de la RAM soit réservée à des procédures systèmes.
On n'est pas à 8 octets près.

Les Ti80 à ti86 sont toutes baptisées "Z80", justement à cause de leur processeur. winkle.gif
(Il y a tout-de-même des exceptions comme la ti76fr...)

----------------------
ti82statfr: 2008, inscrit: 2009, ti84pocketfr: noël2011, ti30xbmultiview: iut 2012-2014
Perfectionniste, manque tact. Pas le temps de tout publier depuis 2011. Répond toujours aux questions. (rédigé juin 2014)

Pour tout le monde et surtout les débutants, quelques-uns des articles courants :
*Traductions Algorithmie/Ti-Basic.
*Caractères spéciaux sur Tout82
Les défauts du TI-Basic : Goto_versus_algo et DelVar/End/Lbl/guillemet/store
 Adresse email Haut de page Bas de page 
 
Persalteas



Autorisation : Membre
Nb de messages : 2164
Inscrit le : Sam 23 Jan 2010, 20:09
Posté le : Mar 29 Mai 2012, 21:31   Citer 


Citer
Les Ti80 à ti86 sont toutes baptisées "Z80", justement à cause de leur processeur.
(Il y a tout-de-même des exceptions comme la ti76fr..



Faux tongue.gif

La TI 80 a un processeur Toshiba en 980 KHz notgood.gif

Et la TI-76.fr est bien une zilog z80, elle aussi...

 Adresse email Haut de page Bas de page 
 
The K



Autorisation : Membre
Nb de messages : 878
Inscrit le : Sam 15 Oct 2011, 11:07
Posté le : Mar 29 Mai 2012, 21:46   Citer 


Code
dans les années 80



Amusant. Tu dois être l'un des seuls membres ayant vécu cette époque tongue.gif

D'ailleurs ... (question qui va p-e te sembler bête du coup) à quoi ça servait de programmer sur un minitel ? C'était l'équivalent de nos seven ? Parce que de ce que je m'en souviens ... 3615 pour trouver les numéros de phone et voila x') (c'est pas 3615 ? bah tant pis !)

----------------------
La la la ...

Avez-vous pensé à regarder le manuel avant de demander conseil ? Un manuel est fait avant tout pour être consulté : MANUEL
Un problème de programmation ? Allez consulter ce tutoriel crée pour cela : TUTORIEL PROGRAMMATION
Vous avez un problème avec l'ordinateur avec votre calculatrice ? SOLUTION EN VIDEO

Mes programmes sur le site : Produit scalaire KMorpion Puissance 4 Mastermind

Mes nouveaux programmes de calcul formel : FCarré FPrime

Projet base de données : ici mais abandonné. Trop de travail ...
 Adresse email Haut de page Bas de page 
 
Persalteas



Autorisation : Membre
Nb de messages : 2164
Inscrit le : Sam 23 Jan 2010, 20:09
Posté le : Mar 29 Mai 2012, 22:01   Citer 

T'as quelque chose contre les utilisateurs de minitel, The K ??? maxiangry.gif

non, je rigole. godgrace.gif

 Adresse email Haut de page Bas de page 
 
The K



Autorisation : Membre
Nb de messages : 878
Inscrit le : Sam 15 Oct 2011, 11:07
Posté le : Mar 29 Mai 2012, 22:13   Citer 

Je n'ai absolument rien contre les utilisateurs du minitel ! (désolé si ça transparait je n'ai vraiment pas voulu dire ça !) De toute façon comment pourrais-je en avoir après quelque chose que je ne connais pas / très peu ? godgrace.gif

----------------------
La la la ...

Avez-vous pensé à regarder le manuel avant de demander conseil ? Un manuel est fait avant tout pour être consulté : MANUEL
Un problème de programmation ? Allez consulter ce tutoriel crée pour cela : TUTORIEL PROGRAMMATION
Vous avez un problème avec l'ordinateur avec votre calculatrice ? SOLUTION EN VIDEO

Mes programmes sur le site : Produit scalaire KMorpion Puissance 4 Mastermind

Mes nouveaux programmes de calcul formel : FCarré FPrime

Projet base de données : ici mais abandonné. Trop de travail ...
 Adresse email Haut de page Bas de page 
 
tomboul



Autorisation : Membre
Nb de messages : 10
Inscrit le : Dim 20 Mai 2012, 1:59
Posté le : Mer 30 Mai 2012, 3:17   Citer 


Citer
D'ailleurs ... (question qui va p-e te sembler bête du coup) à quoi ça servait de programmer sur un minitel ? C'était l'équivalent de nos seven ? Parce que de ce que je m'en souviens ... 3615 pour trouver les numéros de phone et voila x') (c'est pas 3615 ? bah tant pis !)



Non, 3611 pour l'annuaire, c'était gratuit. Le 3615 étant payant à la durée de connexion, beaucoup se sont ruinés !!!.

On ne programmait pas "sur le minitel" qui n'était qu'un terminal client totalement passif, on programmait sur des serveurs IBM 370 en assembleur.

En 86 "3615 : funitel" (hébergé par Sytem, boite dans laquelle je travaillais) avait fait exploser le réseau Transpac qui n'avait pas prévu autant de connexion simultanées avec le minitel. La DGT qui s'occupait alors du réseau téléphonique en France a dû rapidement faire des adaptations pour que ça fonctionne à plein régime.

Funitel proposait des jeux avec des gains, puis surtout le début du minitel rose.

Ensuite le minitel a été utilisé pour la bourse, les journaux, la météo, les ventes par correspondance, etc ... Il y avait aussi des utilisations privées par des boites pour leur gestion décentralisée.

Il n'y avait pas internet, mais avec le minitel on avait déjà un avant goût très rustique.

Il y a un site qui explique bien tous cela : http://bbf.enssib.fr/consulter/bbf-1986-05-0440-005#note-18

J'avais beaucoup de boulot bien payé à l'époque,

maintenant je suis musicien depuis une bonne dizaine d'années : http://www.lamarmite.fr/fanfaronne)

 Adresse email Haut de page Bas de page 
 
tomboul



Autorisation : Membre
Nb de messages : 10
Inscrit le : Dim 20 Mai 2012, 1:59
Posté le : Mer 30 Mai 2012, 3:36   Citer 


Code
Ta déduction est trop hative.
Je viens d'imbriquer 14 boucles For et 2 Then sans difficulté, et la dernière était bien executée.



Je n'ai pas pris le temps d'essayer. il utilise peut-être le registre de pile SP (stack pointeur ). Je ne me rapelle plus quelle est sa limite d'empilement...
il doit disposer d'un espace mémoire forcément limité, ceux qui ont l'habitude de faire de l'ASM avec la TI doivent le savoir ...

 Adresse email Haut de page Bas de page 
 
Persalteas



Autorisation : Membre
Nb de messages : 2164
Inscrit le : Sam 23 Jan 2010, 20:09
Posté le : Mer 30 Mai 2012, 9:41   Citer 

Je connais des programmeurs Asm, ils ne m'ont jamais parlé de quelque chose comme ça...

Enfin bon, je demanderai à Matrefeytontias ou a contra-sh.

 Adresse email Haut de page Bas de page 
 
tomboul



Autorisation : Membre
Nb de messages : 10
Inscrit le : Dim 20 Mai 2012, 1:59
Posté le : Mer 30 Mai 2012, 20:52   Citer 

J'ai fait un petit prg en basic pour connaitre les limites de la pile, il semblerait qu'il n'accepte pas au delà de 545 empilements de for, if, while ... end


Code

:0->B
:lbl 1
:for(I,0,2)
:b+1->B
:goto 1
:end



il fait une erreur mémoire et quand je regarde le contenu de B il y a 545

 Adresse email Haut de page Bas de page 
 
linkakro



Autorisation : Membre
Nb de messages : 3767
Inscrit le : Lun 19 Oct 2009, 21:25
Posté le : Mer 30 Mai 2012, 21:40   Citer 

Sympatique happy.gif

Et si on est fou comme moi godgrace.gif, on peut écrire "0:prgmBUG" pour lancer un programme "BUG" tel que
Code
Ans+1
prgmBUG

Je trouve 1345 avec 22ko de ram libre sur une 82statfr, 1691 si j'ai fait un reset. (27ko libres)

----------------------
ti82statfr: 2008, inscrit: 2009, ti84pocketfr: noël2011, ti30xbmultiview: iut 2012-2014
Perfectionniste, manque tact. Pas le temps de tout publier depuis 2011. Répond toujours aux questions. (rédigé juin 2014)

Pour tout le monde et surtout les débutants, quelques-uns des articles courants :
*Traductions Algorithmie/Ti-Basic.
*Caractères spéciaux sur Tout82
Les défauts du TI-Basic : Goto_versus_algo et DelVar/End/Lbl/guillemet/store
 Adresse email Haut de page Bas de page 
 
Poster un nouveau sujet Poster une réponse Page: 1,      >>





  Powered by Fire-Soft-Board v1.0.10 © 2004 - 2025 Groupe FSB
Page générée en 9 requêtes
BlackOne par Grimmlink