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
Miles Le 14/02/2002 à 21:06 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...
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
plus la valeur est grande, plus le nombre de boucles ds le vent est grand => plus ça dure longtemps.
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]
Pim89 Le 15/02/2002 à 10:45 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 ! ^^
[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")
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)