Aide en C

Fermé
nito - 1 juin 2005 à 13:52
rer_louz Messages postés 276 Date d'inscription mercredi 26 novembre 2003 Statut Membre Dernière intervention 29 décembre 2008 - 1 juin 2005 à 18:16
Salut à tous;

Je travaille sur un microcontroleur ROVIN qui possède son propre logiciel de programmation, il s'agit de langage C mais les fonctions sont assez limités, bref, en fait je récupère des données qui proviennent de la liaison RS232 que je place dans un buffer, ce buffer est ensuite mémorisé dans une RAM mais je n'arrive pas à récupérer ce que je veux.
En fait mon buffer fait 74 octets et est de type unsigned char buf[74], il contient lorsque je l'affiche en mode debug:
cfdl 0 pt1 10.20 pt2 05.41 ..... tp1 1200 tp2 2589 .....
je souhaite récupérer les valeurs 10.20, 05.41, 1200.. pour les placer dans des varaible de type float et int mais je n'y arrive pas, je suis pas très doué en programmation.
Merci de votre aide!!!

2 réponses

TuXor Messages postés 97 Date d'inscription lundi 23 mai 2005 Statut Membre Dernière intervention 28 avril 2006 25
1 juin 2005 à 14:30
Salut nito,

pour résoudre ton problème il faudrait que tu puisse utiliser les fonctions de la bibliothèque "string", qui permet de manipuler les chaines de caractère en C.

Parmi ces fonction il en existe qui te permettent de chercher une chaîne à l'intérieur d'une autre, de concaténer des chaînes etc...
bref tout un arcenal qui pourrait te rendre service.

reste à savoir si cette bibliothèque est disponible sur ton environement...

pour ce qui est de passer tes chaîes vers des entiers, il existe également des fonctions que je n'ai plus en tête
du style : atoi() ASCII to Integer, atof() etc...

j'epère que ça peut t'aider, @+
0
Je te remercie mais je n'ai pas la bibliothéque string.h que je connais, c'est donc bien la galère mais je crois que j'ai quelques fonction comme tu m'a dis atof.. je vais vérifier
Merci quand meme pour ton aide
0
rer_louz Messages postés 276 Date d'inscription mercredi 26 novembre 2003 Statut Membre Dernière intervention 29 décembre 2008 71
1 juin 2005 à 18:16
Bijour,

Si tu cherches a récupérer tous les nombres que tu as dans ta chaine et que chaque donnée est séparée par un espace, tu peux essayer ceci
int res[nb_nombre];

readBuffer(char * buffer, int lengthBuffer)
{
int i = 0;
float tabRes[maxFloat];
float res;
int nbFloatReaded = 0;

while ( i < lengthBuffer)
{
if ( (buffer[i] >= '0' ) && (buffer[i] <= '9') )
{
if(readFloat ( buffer[i] , lengthBuffer - i ,&res,
&lengthReaded))
{
tabRes[nbFloatReaded] = res ;
nbFloatReaded++;
}
i+=lengthReaded;
}

while ( buffer[i] != ' ') && ( i < lengthBuffer)) i++;
}
}

bool readFloat ( char * buffer, int maxRead, float & res, int &lengthFloat)
{
char strRes[72];
int i = 0;
while ( (i< maxRead) &&
( ((buffer[i] >= '0' ) && (buffer[i] <= '0'))
|| ( buffer[i] == '.')
)
)
{
strRes[i] = buffer[i++];
}
if (i) //ici tu peux ajouter des tests pour verifier que ton nombre est valide,
//par exemple que tu es bien sur un espace
{
*res = atof( strRes);
return true;
}
else
return false;
}

C'est pas sur que ca marche, j'ai pas testé, mais ca doit fonctionner.

A++
0