TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: QIQE en 28 de Mayo de 2011, 07:54:33

Título: Usar Printf con floats en HITECH lite
Publicado por: QIQE 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);
}

}

Título: Re: Usar Printf con floats en HITECH lite
Publicado por: AngelGris 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.
Título: Re: Usar Printf con floats en HITECH lite
Publicado por: Suky 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!
Título: Re: Usar Printf con floats en HITECH lite
Publicado por: AngelGris 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.
Título: Re: Usar Printf con floats en HITECH lite
Publicado por: Suky en 28 de Mayo de 2011, 14:18:45
jujuju!  :shock:
Título: Re: Usar Printf con floats en HITECH lite
Publicado por: RICHI777 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 !
Título: Re: Usar Printf con floats en HITECH lite
Publicado por: AngelGris 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. }
Título: Re: Usar Printf con floats en HITECH lite
Publicado por: QIQE 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.