Page 1 of 2

[C] metre en delay ?

Unread postPosted: 18 Sep 2010, 11:07
by lincoln
Bonjour bonjour !

je suis un petit nouveau ^^
aussi bien dans le monde TI que en C ...

comme dit dans le titre , existe t'il une fonction delay sur nspire en c ?
visiblement non ... (ou alors , je suis pas doué...)
je me forme grâce au site du zero ; d’après eux ,il faut installer la bibliothèque sdl ...
seulement voila , j'ai pas tout très bien compris comment je fais pour l'utiliser avec ma calculatrice...

vous allez me demander mais pourquoi veux tu utiliser cette fonction ?
bain (pas trop tiède) je veux pouvoir déplacer une pixel.
Par exemple , j'appuis a gauche , ma pixel va a gauche.
seulement ,si je met pas de delay , je me retrouve avec la moitier de l’écran noir , la boucle s'effectue trop vite...

j'avais un peux tricher avec un for , mais je peux deplacer ma pixel que d'un cran du coup :D: (bon en faite , j'en fait apparaître une a coter de l'autre ...)

 
Show/Hide spoilerAfficher/Masquer le spoiler
Code: Select all
#include os.h
#include common.h
#include "utils.h"

asm(".string "PRG"n");

int main(void)
{
  int x, i;


clearScreen();
setPixel(x, 160, 0x0);
while(!isKeyPressed(KEY_NSPIRE_ESC))
{
x=120;
for(i=0;i1;i++)
{
if isKeyPressed(KEY_NSPIRE_LEFT)
x=x-1;
setPixel(x, 160, 0x0);
}
}



  return 0;
}


bon je rappelle que j'ai apris a programmer hier soir ... :D:

merci d'avance de vos reponse !

EDIT :
bon j'ai quand même essailler avec la sdl...


 
Show/Hide spoilerAfficher/Masquer le spoiler
Code: Select all
#include os.h
#include common.h
#include "utils.h"
#include SDL/SDL.h

asm(".string "PRG"n");

int main(void)
{
  int x, i;


clearScreen();
setPixel(x, 160, 0x0);
x=120;
while(!isKeyPressed(KEY_NSPIRE_ESC))
{
if isKeyPressed(KEY_NSPIRE_LEFT)
x=x-1;
setPixel(x, 160, 0x0);
SDL_Delay(200);
}
}



  return 0;
}


msys me dit :

Image

Uploaded with ImageShack.us

Re: [C] metre en delay ?

Unread postPosted: 18 Sep 2010, 11:40
by schtroumpf
Il me semble qu'il n'existe pas ces bibliotéques pour Nspire ! Enfin AdriWeb en posséde une remanier je crois donc non pas de delay sans la bibliothéque

Re: [C] metre en delay ?

Unread postPosted: 18 Sep 2010, 11:51
by lincoln
raaah...
qu'entant tu par "adriweb en possède une remanier" ?
autrement , n'y a t'il pas un moyen de contourner le problème ? si non , l’émulateur gb n'aurait jamais peu exister !

Re: [C] metre en delay ?

Unread postPosted: 18 Sep 2010, 11:54
by Levak
Il y a un timer avec la RTC de la Nspire, mais.... il compte en secondes !!! (et pas en micro-secondes !). Donc de ce coté, quand il s'agit de faire un délay court, le plus simple est, je pense, de faire une boucle for mais avec une valeur finale immense.

par exemple, une boucle qui me permet de ralentir l'éxécution système, donc de surcharger le processeur serait comme cela :


volatile i;
for(i=0;i50000;i++){}; // Delay entre chaque mouvement.


Pour la RTC : http://hackspire.unsads.com/wiki/index. ... _.28RTC.29

Re: [C] metre en delay ?

Unread postPosted: 18 Sep 2010, 11:56
by lincoln
hum.. je vais essayer ^^
enfin, en ce qui me concerne , une seconde , sa pourrait ne pas être trop gênant ... c pour un paint ^^ (faut bien commencer par quelque chose...)

Re: [C] metre en delay ?

Unread postPosted: 18 Sep 2010, 12:17
by Lionel Debroux
Il n'y a pas encore vraiment de librairie graphique, SDL ou autres, pour la Nspire.

Re: [C] metre en delay ?

Unread postPosted: 18 Sep 2010, 12:25
by lincoln
dommage ... m'enfin ,tout en set pixel ^^
par contre , moi yen a etre pas tres fu fut ... moi yen a rien blairer au RCT ...
comment l'utiliser en c ? (simplement...)

Re: [C] metre en delay ?

Unread postPosted: 18 Sep 2010, 12:30
by Levak
Un autre sujet plus général avait déjà été posté, une (petite) recherche dans les divers salons de la catégorie Nspire t'aurais aidé à trouver ça :

http://tibank.forumactif.com/aide-debut ... -t5983.htm

Re: [C] metre en delay ?

Unread postPosted: 19 Sep 2010, 10:52
by lincoln
finalement , sa marche bien (et je peux régler la vitesse) juste avec une boucle ^^ (bon c'est un truc de barbare , mais sa marche !)

Code: Select all
if isKeyPressed(KEY_NSPIRE_LEFT)
x=x-1;
setPixel(x, 160, 0x0);
volatile i;
for(i=0;i50000;i++){};   // Delay entre chaque mouvement.
for(i=0;i50000;i++){};   // Delay entre chaque mouvement.
for(i=0;i50000;i++){};   // Delay entre chaque mouvement.
for(i=0;i50000;i++){};   // Delay entre chaque mouvement.
for(i=0;i50000;i++){};   // Delay entre chaque mouvement.
for(i=0;i50000;i++){};   // Delay entre chaque mouvement.
for(i=0;i50000;i++){};   // Delay entre chaque mouvement.
for(i=0;i50000;i++){};   // Delay entre chaque mouvement.
for(i=0;i50000;i++){};   // Delay entre chaque mouvement.
for(i=0;i50000;i++){};   // Delay entre chaque mouvement.
for(i=0;i50000;i++){};   // Delay entre chaque mouvement.
for(i=0;i50000;i++){};   // Delay entre chaque mouvement.
x=x+1;
setPixel(x, 160, 0xF);
x=x-1;

Re: [C] metre en delay ?

Unread postPosted: 19 Sep 2010, 11:10
by Levak
Tu peux me dire pourquoi tu copies 10 fois la boucle au lieu de changer la valeur finale ??? (genre rajouter un 0 quoi)



Sinon, je n'ai pas encore testé, mais en analysant le programme de Lego ici, j'ai trouvé une fonction qui "serait" sensé créer un timer en milli-secondes.


static inline void idle(void) {
unsigned int sbz = 0;
asm volatile ("mcr p15, 0, %0, c7, c0, 4" : "=r"(sbz) );
}


int sleep(int ms) {
*(volatile unsigned*) 0x900C0004 = 22;
*(volatile unsigned*) 0x900C0000 = ms;
while (*(volatile unsigned*) 0x900C0000 0) {
idle();
}
}


et son utilisation :

sleep(120);