1

ayant été habitué a programmer en tenant compte de la lenteur du basic,j'ai aujourd'hui un "probleme" qui vas faire sourire.

je dois ralentir une boucle.

au début,j'ai fait un truc style:
[nosmile]
for(duree=0;duree<1000;duree++)
{
for(duree=0;duree<1000;duree++)
{
}
}

mais avec le C,ça avoine tellement qu'il faudrait que je mette une instruction style "nop" en ASM pour calmer le truc
existe t'elle en C ou bien dois je mettre de l'asm in line au milieu de mon code(chose que j'ai pas trop envie de faire.)

j'attends vos idée pour réaliser une tempo facilement paramettrable et pas trop lourde

2

effectivement, ton truc est viré par les optimisations des compilos...

je pense que l'asm in-line est la meilleure soltuion : il ne faut pas qu'il puisse optimiser, et comme ça, ça devrait aller, mais pas sûr...
Site : http://www.phareaway.com/
Membre du groupe Phare Away et webmaster du site

3

je crois que certaines versiond e TIGCC optimisent les boucles du style

for(i=0 ; i<100000 ; i++);
en les supprimant, non ?

pr ralentir fait ça :
unsigned long a;
for(a=0 ; a<100000 wink a++;
(et tu change la valeur max tu peux aller de 0 à 4 milliards et quelques)
avatar
Tutorial C (TI-89/92+/v200) - Articles Développement Web (PHP, Javascript, ...)
« What is the sound of Perl? Is it not the sound of a wall that people have stopped banging their heads against? » - Larry Wall

4

merde pr le smiley sad

je disais donc ;
for(a=0 ; a<10000 ; ) a++;
en sortant le a++ de la boucle, le compilo l'optimise pas je crois
avatar
Tutorial C (TI-89/92+/v200) - Articles Développement Web (PHP, Javascript, ...)
« What is the sound of Perl? Is it not the sound of a wall that people have stopped banging their heads against? » - Larry Wall

5

ah,ok.
je savais pas que le compilo me le virait!
je me disais aussi,plus je mettais une grosse valeurs,et moins ça ramait.
je vais essayer en sartant le a++ des parenthese

6

for (a=10000; a; ) a--;
est un peu plus optimisé.

Je sais pas si c'est mon tigcc qui débloque, mais il me soustrait plus que 1. Peut-être qu'il faut que je reboot. Avant-hier aussi il ma oublié un jsr (a0) dans une source en C, et je comprenais pas ce qui plantait. Et à la compilation d'après il était revenu... confus

7

plus la valeur est grande, plus le nombre de boucles ds le vent est grand => plus ça dure longtemps.
avatar
Tutorial C (TI-89/92+/v200) - Articles Développement Web (PHP, Javascript, ...)
« What is the sound of Perl? Is it not the sound of a wall that people have stopped banging their heads against? » - Larry Wall

8

XlibWait(20);

non je rigole:happy

pour avoir le meilleur truc, tu detournes l'int 5.. et comme ca tu peux attendre autant de ms que tu veux...
sinon
asm("
move.w #2^16-1,%d0
loop:
nop
nop
...
dbf %d0,loop
")

mais c'est vraiment sale comme programmation.. le meilleur truc c'est de detourner l'int 5
XLib v1.00 Powerrrrrrrrrrrrrrrrrrrr!

9

La meilleure solution est d'utiliser WaitForMillis des sources de TI-Chess.

Et TiMad, #2^16-1 ne marchera pas. il faut mettre #65535.
[edit]Edité par Kevin Kofler le 15-02-2002 à 01:06:31[/edit]
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

10

Kevin, c'est quoi cette fonction ??? on la trouve où ?? car moi aussi en C j'ai besoin de ralentir un peu certain truc ...
Non-Webmaster et non-programmeur du site. .Pour tout probleme ou question ,débrouillez vous avec les Webmasters .

«- Pas Moo ! ^^

11

Ben dans les souces de TI-Chess

12

et en utilisant des timers,c'est pas possible?je crois qu'il en existe 6 different,
en en prenant un et en faisant "osfreetimer" à la fin de mon prog,ça ne marcherai pas?

en attendans,je vais jeter un oeil au source de ti-chesswink

13

'vais voir .... wink
Non-Webmaster et non-programmeur du site. .Pour tout probleme ou question ,débrouillez vous avec les Webmasters .

«- Pas Moo ! ^^

14

[nosmile]
en ce qui concerne la fonction "waitformillis()" tirée des sources de ti-chess (merci pour l'info Kévin!)
ça marche tres bien,c'est de l'asm in-line assez compact.
la voila!

void WaitForMillis(unsigned short);

asm("xdef WaitForMillisn"
"WaitForMillis: movem.l %d0-%d3,-(%sp)n"
" move.w (20,%sp),%d2n"
" move.l #31,%d1n"
" move.l #31,%d3n"
"_wl2_: move.w #120,%d0 /* modify this value for exact timing !!! */n"
"_wl1_: rol.l %d3,%d1n"
" dbra %d0,_wl1_n"
" dbra %d2,_wl2_n"
" movem.l (%sp)+,%d0-%d3n"
" rts")

15

Ouhh y a plus simple
en C
OSFreetimer(6); //libère le timer n°6
OSRegistertimer(6, 0.20*20); //lance le décompte pour une pause de 20ms(il y a 20 fois par seconde le décompte du temps)
while(!OSTimerExpired(6))
{ //Attent
}
//suite du prog
G essayé ca cette après midi j'avais le m^me problème que toi et ca marche(c expliqué dns la doc de tigcc)

16

La routine de Ti-Chess fait pratiquement la même taille et est 50 fois plus préçise.
C'est pas parce que c'est de l'asm qu'il faut en avoir peur (ces programmeurs en C roll).
[edit]Edité par ExtendeD le 17-02-2002 à 23:30:49[/edit]

17

lol ExtendeD,c'est sur que toi,t'es plutot à l'aise avec l'asm,ce qui n'est pas mon casmourn

et je prefere aprrendre un seul truc à la fois,j'en suis à mon second programme en C seulement,et je prefere attendre un peu avant de faire du free style avec du GNU asm et de l'A68k ams en plein milieu de mon programme mal foutu.

et puis je n'ai pas besoin d'une grande précision!
et puis je comprends mieux avec les timers qu'avec plein de terme barbare comme des move et des bra.

le jour ou j'aurai besoin d'un truc plus puissant et plus optimisé,je commencerai à m'interresser à l'asm.mais pour l'instant,le C me comble amplement vu que j'étais au basic avant!

18

Hard_disk>
ta routine fonctionne,seulement avec

OSRegistertimer(6,0.2*20);

on obtient une pause de 200ms.

mais bon,le fait d'avoir trouver cette inattention m'as fais comprendrfe le bins'!
donc merci
cool

19

Double Post.

[edit]Edité par basicman le 18-02-2002 à 20:48:31[/edit]