Página 1 de 1

Falta memória!!!

MensagemEnviado: 02 Out 2009 11:43
por renanwalenczuk
Bom pessoal estou com um certo probleminha de memória.
Estou usando o Pic16F870, mas o programa que estou desenvolvendo é um pouco grande até certo ponto.

Quando eu mando imprimir este valor:
printf("%01.2fV\r\n",tensao);
//x.xxV

A memória utilizada aumenta 20%, ou seja, meu programa está consumindo 78% mas depois dessa linha a memória passa pra 98%.
O que devo fazer. :?:

MensagemEnviado: 02 Out 2009 11:47
por fabim
não use printf ou sprint ou sei lá o que ntf.
Isso chupa uma memo lascada.

Faz na unha,

o que exatamente você precisa fazer ?

Fabim

MensagemEnviado: 02 Out 2009 11:50
por renanwalenczuk
Eu só preciso enviar esse valor de tensão para o PC.
O valor tem que ter duas casas decimais:

1.24V por exemplo

Sendo este valor um float.

Valew

MensagemEnviado: 02 Out 2009 13:24
por ze
Só pra transf pela serial é fácil:
...//configurar o hw, lógico!
char dado;
TXREG= dado; while(!TRMT); //transmite 1 byte
Pra separar um float em 4 char pode fazer uma struct dentro de uma union com char´s e float. Mas agora tô com pregui de pensar. Afinal sabe que dia é hoje??

bfds........ não! com chuva de novo não!!!

MensagemEnviado: 03 Out 2009 10:56
por andre_luis
Renan,

Eu desaconselho usar o printf(). Já tive problemas também com o processamento porque o printf() segura o programa num laço fechado enquanto não terminar de enviar o ultimo caractere da string.

Use o putc().


+++

MensagemEnviado: 03 Out 2009 14:33
por polesapart
Não testei muito, mas deve ser um começo:

Código: Selecionar todos
#include <stdio.h>
#include <math.h>

void imprime_int(unsigned int data)
{
  unsigned char buffer[6], *p = &buffer[sizeof(buffer)];
  *--p = 0;
  do
  {
     *--p = (data % 10) + '0';
     data /= 10;
  } while (data && p != buffer);
  while (*p)
    putchar(*p++);
}

void imprime_float(float data)
{
  float ipart;
  unsigned int frac = (unsigned int)(modff(data, &ipart) * 100.0);
  imprime_int((unsigned int)ipart);
  putchar('.');
  imprime_int(frac );
  putchar('\n');
}



Boa sorte compilando isto pra pic hehe. A precisão é de dois digitos, data pelo multiplicador 100.0 na funcao imprime_float, e pode ser aumentada (1000.0 = 3 digitos, 10000.0 = 4, etc, mas float não representa muito bem os números, quanto maior o multiplicador, mais imperfeições vão ocorrer nas frações).

MensagemEnviado: 03 Out 2009 14:44
por polesapart
P.S..: Eu não previ suporte a números negativos :P

MensagemEnviado: 03 Out 2009 15:25
por Djalma Toledo Rodrigues
polesapart escreveu: A precisão é de dois digitos, data pelo multiplicador 100.0 na funcao imprime_float, e pode ser aumentada (1000.0 = 3 digitos, 10000.0 = 4, etc, mas float não representa muito bem os números, quanto maior o multiplicador, mais imperfeições vão ocorrer nas frações).

Nunca confunda Precisão com Resolução

Para que haja Precisão se faz necessária Resolução
mas, a recíproca pode não ser verdadeira.
.

MensagemEnviado: 03 Out 2009 15:37
por polesapart
Djalma Toledo Rodrigues escreveu:
polesapart escreveu: A precisão é de dois digitos, data pelo multiplicador 100.0 na funcao imprime_float, e pode ser aumentada (1000.0 = 3 digitos, 10000.0 = 4, etc, mas float não representa muito bem os números, quanto maior o multiplicador, mais imperfeições vão ocorrer nas frações).

Nunca confunda Precisão com Resolução

Para que haja Precisão se faz necessária Resolução
mas, a recíproca pode não ser verdadeira.
.


Corretíssimo; Eu tenho problema com termos :D

Abraços!

MensagemEnviado: 05 Out 2009 16:11
por buiz
Olá Renan,

Por acaso vc vai fazer a prova das Olimpiadas do Senai?

Somente por curiosidade.

Um abraço.

MensagemEnviado: 05 Out 2009 19:40
por renanwalenczuk
Vou competir por eletrônica industrial.
Em Caxias do Sul.

MensagemEnviado: 06 Out 2009 09:01
por buiz
Você esta tentando fazer uma mensagem rolante da esquerda para a direita "Olimpiada do Conhecimento 2009" na 1º linha, relógio com dois pontos piscantes e voltimetro na 2º linha, ajuste do relógio por 3 botões e envio para o HyperTerminal. Correto?

Um abraço e Boa Sorte para você!!

MensagemEnviado: 06 Out 2009 22:49
por renanwalenczuk
É isso mesmo.
Você te algun "vínculo" com o senai ou conhece alguém de lá?