Posté le 01/05/2014 21:07
Planète Casio v4.3 © créé par Neuronix et Muelsaco 2004 - 2024 | Il y a 87 connectés | Nous contacter | Qui sommes-nous ? | Licences et remerciements
Planète Casio est un site communautaire non affilié à Casio. Toute reproduction de Planète Casio, même partielle, est interdite.
Les programmes et autres publications présentes sur Planète Casio restent la propriété de leurs auteurs et peuvent être soumis à des licences ou copyrights.
CASIO est une marque déposée par CASIO Computer Co., Ltd
Citer : Posté le 07/07/2014 18:30 | #
J'ai du mal a faire un fonction qui renvoie un int depuis du BCD...
En fait, je comprend pas comment isoler les 4 bits
Citer : Posté le 07/07/2014 18:33 | #
Tu veux isoler 4 bits sur un int ?
Si je ne me trompe pas, ça te renverra un chiffre. Ensuite, plus qu'à multiplier par 10.
Mais sinon, tu as plus simple.
{
entier += BCD&15;
BCD >> =4;
entier *=10;
}
Citer : Posté le 07/07/2014 18:35 | #
non en fait, le tableau "temps" d'unsigned char qui stocke le temps, ben il le stocke en BCD
Et mon problème c'est pour passer du BCD au int. En gros le proto qu'il faudrait:
Citer : Posté le 07/07/2014 19:02 | #
{
/* 2* plus de chiffres que bytes */
int i, j, n;
for(j=0;j<bytes;j++,temps++) for(i=2;i;i--,n*=10)
n+=*temps&(7<<(i<<2));
return n;
}
Citer : Posté le 07/07/2014 19:27 | #
Ca fonctionne pas...
J'arrive pas trop a comprendre ce que ca fait ...
Citer : Posté le 07/07/2014 19:28 | #
Oups ! J'ai oublié un truc important...
Citer : Posté le 07/07/2014 19:33 | #
Ca marche toujours pas...
{
unsigned long temps, buf_temps;
unsigned char time[8]={0};
unsigned char buffer[40];
RTC_GetDateTime(time);
sprintf(buffer, "%d - %x/%x/%x%x %x:%x:%x",BDC2int(time, 0), time[3], time[2], time[0], time[1], time[4], time[5], time[6]);
PrintMini(1,1,buffer,0);
while(1);
temps = 1;
}
La chaine "time" est nickelle mais la conversion ne marche pas. Par exemple la il revoit 32160 pour time[0]=0x20;
Citer : Posté le 07/07/2014 19:34 | #
Le pire c'est que je trouve des erreurs quand je cherche... j'espère que t'es patient.
{
/* 2* plus de chiffres que bytes */
int i, j, n=0;
for(j=0;j<bytes;j++,temps++) for(i=1;i+1;i--,n*=10)
n+=*temps&(7<<(i<<2));
return n;
}
Citer : Posté le 07/07/2014 19:37 | #
il manque le n=0 non ?
T'es deja patient avec moi
Citer : Posté le 07/07/2014 19:39 | #
Repris le mauvais code. x)
Maintenant que je l'ai édité, fonctionne-t-il ?
Citer : Posté le 07/07/2014 19:44 | #
Non Non toujours le même problème, enfin c'est bizarre. Ça me renvoie 0 mais j'ai plutôt l'impression que c'est aléatoire.
Citer : Posté le 07/07/2014 19:46 | #
Quel idiot, c'est pas 7 c'est 15.
{
/* 2* plus de chiffres que bytes */
int i, j, n=0;
for(j=0;j<bytes;j++,temps++) for(i=1;i+1;i--,n*=10)
n+=*temps&(15<<(i<<2));
return n;
}
Citer : Posté le 07/07/2014 19:59 | #
ça me renvoit 0
La machine serait-elle plus forte que Lephenixnoir ?
Citer : Posté le 07/07/2014 21:13 | #
Pas pour longtemps.
Ajouté le 07/07/2014 à 21:30 :
{
int i,n;
for(i=0,n=0;i<b;i++)
{
n+=*(BCD+(i>>1)) & (i&1?15:240);
if(i ! = b-1) n*=10;
}
return n;
}
b est maintenant le nombre de chiffres.
Citer : Posté le 07/07/2014 21:36 | #
On est d'accord que BCD est un tableau et que le deuxième argument est la case de ce tableau ?
Les cases du tableau contiennent deux chiffres ?
Je vais quand même poser l'utilité finale de cette fonction . Le but c'est de tout convertir en minutes pour comparer l'heure actuelle et l'heure enregistrée dans un fichier. Le problème c'est que en BCD, je peux pas faire de calculs...
Sinon,
(7) : C2500 (E) Illegal token "!"
(7) : C2500 (E) Illegal token "="
Citer : Posté le 07/07/2014 21:44 | #
Ben oui, tu peux pas séparer le '!' et le '=', mais si je les réunis ça fait '!='.
Sinon, je suis en train de tester et ça fonctionne, à un rien près... j'ai juste un chiffre de trop. Désolé, je t'avais dit qu'il te faudrait être un peu patient.
Ajouté le 07/07/2014 à 21:53 :
Bon, c'est terminé. Fini la fonction rebelle.
{
int i,n;
for(i=0,n=0;i<bytes;i++)
{
n += (*(BCD+i)&240)>>4;
n *= 10;
n += *(BCD+i) & 15;
if(i != bytes-1) n*=10;
}
return n;
}
Elle s'appelle comme suit :
BDC2int(ch,2);
Citer : Posté le 07/07/2014 21:58 | #
ok merci,
J'avais pas compris le "! =" je me suis dit, rhoo encore un nouvel operateur
et sans vouloir te souler ca serait possible de le faire juste pour une case du tableau, genre:
BDC2int(0x23);
Citer : Posté le 07/07/2014 22:00 | #
Tu es obligé de mettre le nombre d'octets, mais sinon ça roule tout seul.
Citer : Posté le 07/07/2014 22:02 | #
ok oui question stupide
merci :kiss:
Citer : Posté le 10/07/2014 12:17 | #
Moi j'aimerais savoir pourquoi ce programme ne marche pas >< sur une Graph35+ SH4 tweakée 75...
J'ai un écran d'accueil et impossible de faire quoi que ce soit :/
Citer : Posté le 10/07/2014 12:18 | #
moi sur la mienne ca marche impec