hola:
yo sigo con lo mio angelgris, jeje, pasito a pasito.
he copiado tu ejemplo del ftoa y adapotado a mi programa.
me queda asi:Código: [Seleccionar]void SHOW_LCD(void)
{
char * SHOW_PRESS;
int * seba;
ClearLcd();
GotoxyLcd (1,1);
WriteStrLcd ("P= ");
//itoa(SHOW_PRESS,SENSOR_DATA,10);
SHOW_PRESS = ftoa (SENSOR_DATA, seba);
GotoxyLcd (4,1);
WriteStrLcd(SHOW_PRESS);
GotoxyLcd (1,2);
WriteStrLcd ("MODE: ");
GotoxyLcd (6,2);
WriteStrLcd (SHOW_MODE);
__delay_ms(200);
}
pero me da el siguiente error:
Error [1098] C:\Archivos de programa\HI-TECH Software\PICC\9.80\sources\ftoa.c; 7. conflicting declarations for variable "_ftoa" (C:\pics\18_pruebas\pruebas.C:308)
y en la variables tengo asi:Código: [Seleccionar]float SENSOR_DATA,POT_SER_DATA,POT_SEG_DATA,POT_MAX_DATA;
float SENSITIVITY = 0.009765625f;
char SHOW_PRESS[10];
char SHOW_MODE[10];
aparte que no entiendo muy bien el funcionamiento de ftoa, por el tema de los punteros.... (se agradece explicacion ;-))
saludos y mil gracias
Hola nuevamente;
Mirá esto: así está definida la última parte del archivo "stdlib.h" dentro de la carpeta "include"Código: C
extern char * utoa(char * buf, unsigned val, int base); extern char * ultoa(char * buf, unsigned long val, int base); #ifdef _PSOC_ extern char * ftoa(float f, int * status); #endif // _PSOC_
y este es el archivo "ftoa.c" en la carpeta "sources"Código: C
#include <stdlib.h> #include <stdio.h> // quick and dirty ftoa for legacy code char * ftoa(float f, int * status) { static char buf[17]; char * cp = buf; unsigned long l, rem; if(f < 0) { *cp++ = '-'; f = -f; } l = (unsigned long)f; f -= (float)l; rem = (unsigned long)(f * 1e6); return buf; }
Volviendo al archivo "stdlib.h", no entiendo porque la definición de la función ftoa esta encerrada entre el "#ifdef _PSOC_" :?
Pero si pongo la definición fuera de eso, el programa que haga uso de ftoa compila sin problemas.
#ifdef _PSOC_
extern char * ftoa(float f, int * status);
#endif //_PSOC_
bravo: :-/
funciona sin problemas.
es más, he vuelto a colocar en el archivo stdlib.h como estaba:Código: [Seleccionar]#ifdef _PSOC_
extern char * ftoa(float f, int * status);
#endif //_PSOC_
y simplemente he dejado la linea
#include "ftoa.c"
Tu, angelgris, me has dado la dirección, y yo he probado, pero no se muy bien la razon. Me imagino que en el archivo ftoa.c, de la carpeta sources (que yo he copiado a mi carpeta), tendrá alguna definición.
ahora solo nos da un mensaje de aviso de que la variable seba no se utiliza nunca.
¿la pregunta es que si tenemos que incluir el archivo *.C de cada funcion a usar??.
un saludo y seguiremos probando...
Lo que no encontré es de string a float.
char * texto;
int status;
texto = ftoa(476.005, &status);
WriteStrLcd(texto);
char *
ftoa(float f, int * status)
{
static char buf[17];
char * cp = buf;
unsigned long l, rem;
if(f < 0) {
*cp++ = '-';
f = -f;
}
l = (unsigned long)(f * 1e6);
//f -= (float)l;
//rem = (unsigned long)(f * 1e6);
sprintf(cp, "%lu",l);//.%6.6lu", l, rem);
return buf;
}
char *
long_to_string(unsigned long f, int * status)
{
static char buf[17];
char * cp = buf;
unsigned long l, rem;
l = (f / 1000000);
rem = (f % 1000000);
sprintf(cp, "%lu.%6.6lu", l, rem);
return buf;
}