Autor Tema: Usar Printf con floats en HITECH lite  (Leído 3068 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado QIQE

  • PIC18
  • ****
  • Mensajes: 335
Usar Printf con floats en HITECH lite
« en: 28 de Mayo de 2011, 07:54:33 »
Hola esoty empezando con hitec la versión lite, pero al tratar de compilar un programa que tiene un printf con un float no me llega a compilar si lo hago con un int si que funciona sin problemas, alguien sabe lo que puede pasar?? he leido que hay que poner un comando -Lf en el buil options del mplab pero tampoco me funciona así este es el código.

Código: [Seleccionar]
#include <htc.h>
#include <stdio.h>
#include "usart.h"


#define _XTAL_FREQ 8000000
float temp [17];
float algos [17];
float temperatura = 2;
void inicializa_puertos (void)
{
TRISB =0x00; //Todo como salidas
init_comms();
}

void inicializa_ADC (void)
{
TRISB =0x00; //Todo como salidas
init_comms();
}


int puerto = 1;

void main (void)
{
inicializa_puertos();

while (1)
{
PORTB=puerto;
puerto=puerto*2;
if (puerto>128)
{
puerto=1;

}
printf("%f",temperatura);
_delay(1000000);
}

}

Muchas gracias por vuestro tiempo.

Saludos desde valencia!!!

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: Usar Printf con floats en HITECH lite
« Respuesta #1 en: 28 de Mayo de 2011, 11:06:02 »
¿Podrías indicar cual es el mensaje de error que te da el compilador? No recuerdo si es obligatorio, pero sé que al printf cuando se quiere enviar un float se le pueden pasar los parámetros de cuantos dígitos va a tomar el string.
De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Usar Printf con floats en HITECH lite
« Respuesta #2 en: 28 de Mayo de 2011, 12:30:49 »
Implementa float? Porque por ejemplo, C18 y C30 no lo implementan  :x Hay una rutina que se ha subido al foro por si quieres utilizarla.


Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: Usar Printf con floats en HITECH lite
« Respuesta #3 en: 28 de Mayo de 2011, 14:15:26 »
  Quise compilar y me tiraba error que no estaba definido _putch (vamos, que no encontraba la función), así que incluí el archivo usart.c que trae HiTech y compiló sin problemas. De todas maneras con un resultado que no me agrada, ya que ese programita básico compilado para un PIC16F877A ocupa el 61.9% de la memoria de programa.  :5]

  Sin la función printf (........), solo ocupa el 1.7% de memoria de programa.
De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Usar Printf con floats en HITECH lite
« Respuesta #4 en: 28 de Mayo de 2011, 14:18:45 »
jujuju!  :shock:
No contesto mensajes privados, las consultas en el foro

Desconectado RICHI777

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1498
Re: Usar Printf con floats en HITECH lite
« Respuesta #5 en: 28 de Mayo de 2011, 15:32:02 »
Hola, cambia los puntos flotantes por matematica de punto fijo, no es algo dificil, google ayuda mucho. Es más rápido y ocupa menos código.

Saludos !

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: Usar Printf con floats en HITECH lite
« Respuesta #6 en: 28 de Mayo de 2011, 16:07:52 »
  Ésta es la implementación de la función ftoa(), que usa sprintf(), pero no directamente con una variable tipo float sino que la "convierte" en long int y luego la trabaja.

Código: C
  1. #include        <stdlib.h>
  2. #include        <stdio.h>
  3.  
  4. // quick and dirty ftoa for legacy code
  5. char *
  6. ftoa(float f, int * status)
  7. {
  8.         static char             buf[17];
  9.         char *                  cp = buf;
  10.         unsigned long   l, rem;
  11.  
  12.         if(f < 0) {
  13.                 *cp++ = '-';
  14.                 f = -f;
  15.         }
  16.         l = (unsigned long)f;
  17.         f -= (float)l;
  18.         rem = (unsigned long)(f * 1e6);
  19.         sprintf(cp, "%lu.%6.6lu", l, rem);
  20.         return buf;
  21. }
De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas

Desconectado QIQE

  • PIC18
  • ****
  • Mensajes: 335
Re: Usar Printf con floats en HITECH lite
« Respuesta #7 en: 28 de Mayo de 2011, 18:00:43 »
Curioso mensaje me arroja el compilador, No habia reparado hasta ahora

Código: [Seleccionar]
Memory Summary:
    Program space        used  1568h (  5480) of  2000h words   ( 66.9%)
    Data space           used    E7h (   231) of   170h bytes   ( 62.8%)
    EEPROM space         used     0h (     0) of   100h bytes   (  0.0%)
    Configuration bits   used     0h (     0) of     2h words   (  0.0%)
    ID Location space    used     0h (     0) of     4h bytes   (  0.0%)


Running this compiler in PRO mode, with Omniscient Code Generation enabled,
produces code which is typically 40% smaller than in Lite mode.
The HI-TECH C PRO compiler output for this "code could be 2140 words smaller."
See http://microchip.htsoft.com/portal/pic_pro for more information.
Muchas gracias por vuestro tiempo.

Saludos desde valencia!!!