Página 1 de 1
Falta memória!!!

Enviado:
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.


Enviado:
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

Enviado:
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

Enviado:
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!!!

Enviado:
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().
+++

Enviado:
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).

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


Enviado:
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.
.

Enviado:
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
Abraços!

Enviado:
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.

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

Enviado:
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ê!!

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