Página 1 de 3

SPRINTF & KEIL

MensagemEnviado: 29 Nov 2010 11:41
por fabim
Alguém aqui esta tendo problemas com o uso de sprintf no keil ?
Tipo, não esta obedecendo a formatação!!!!

Ta dureza.

MensagemEnviado: 29 Nov 2010 11:59
por proex
Essa função esta bixada faz tempo e o pessoal da keil nao dá bola.

Tá cheia de bugs.

Use esta: http://www.coocox.com/repo/c37f2731-96e ... printf.zip

.

MensagemEnviado: 29 Nov 2010 12:08
por Nightcrawler
Bah, e eu achando que o problema era comigo. Notei que as vezes a formatação sai correta, outras vezes imprime varias casas a mais... :shock:

printf source code

MensagemEnviado: 30 Nov 2010 08:19
por tcpipchip
Opa
Veja isto
Talvez ajude
http://www.menie.org/georges/embedded/
TCPIPCHIP

MensagemEnviado: 30 Nov 2010 09:41
por styg
da pra especificar que tipo de problema?

uso ela faz tempo e nunca notei nada de errado..

MensagemEnviado: 30 Nov 2010 09:56
por fabim
char text[15];
float temp;

temp = 26.31;

sprintf(text,"TEMP: %00.00f", temp);
ou
sprintf(text,"TEMP: %2.2f",temp);
ou
sprint(text,"TEMP: %.2f", temp);

somente a primeira formatação funciona, lembrando que ele não esta inserindo o ".".. As outras formas o sprintf trava, e não faz absolutamente nadegas.

Cabrito ?

MensagemEnviado: 30 Nov 2010 10:05
por Rodrigo_P_A
fabim escreveu:char text[15];
float temp;

temp = 26.31;

sprintf(text,"TEMP: %00.00f", temp);
ou
sprintf(text,"TEMP: %2.2f",temp);
ou
sprint(text,"TEMP: %.2f", temp);

somente a primeira formatação funciona, lembrando que ele não esta inserindo o ".".. As outras formas o sprintf trava, e não faz absolutamente nadegas.

Cabrito ?


qual o tamanho que vc colocou na Heap Size?

as rotinas printf, sprintf usam alocação dinâmica de memória para alocar as variáveis necessárias para conversão do valor e depois liberam a memória automaticamente.

Eu tenho 99% de certeza que a sua HEAP SIZE ou está com 0 ou está muito pequena, e por isso não funciona.

Eu não acho que tem um bug tão grande assim , ainda mais no Keil.

Só mais um detalhe, se você quer usar sprintf, printf sem usar alocação dinâmica, marque a opção MICROLIB, a MICROLIB não usa alocação dinâmica, mas tem algumas limitações, para saber quais, dá uma olhada no help do keil, ele é bem completo!

at+

MensagemEnviado: 30 Nov 2010 10:23
por fabim
o heap ta com 8K!!!!
Eu ja tinha mexido nisso pois você explicou isso a muito tempo aqui!!! LEmbra ?Você ja havia explicado mais umas 2 vezes.
É bug mesmo, nos Uvision <4 ta beleza, de 4 pra cima, num funciona direito!!!

MensagemEnviado: 30 Nov 2010 10:24
por Rodrigo_P_A
fabim escreveu:o heap ta com 8K!!!!
Eu ja tinha mexido nisso pois você explicou isso a muito tempo aqui!!! LEmbra ?Você ja havia explicado mais umas 2 vezes.
É bug mesmo, nos Uvision <4 ta beleza, de 4 pra cima, num funciona direito!!!


vixe, então... usa a que o pessoal indicou.

mas pelo que eu vi a que foi indicada não imprime float


fabim, verifica mais uma coisa, não adianta você colocar a heap size grande e não aumentar o stack tbm, pois ambos são usados para alocar as variáveis.

Tem mais, não adianta colocar um heap size grande, se no seu programa vc usar muitas variáveis, pois a heap size cresce para baixo do topo da RAM, e parece que o Keil não verifica bem isso, nem estouros da pilha.

MensagemEnviado: 30 Nov 2010 14:41
por styg
cara, estranho hein, eu to usando o keil 4.10, e nao acontece isso aí.

MensagemEnviado: 30 Nov 2010 15:09
por fabim
styg escreveu:cara, estranho hein, eu to usando o keil 4.10, e nao acontece isso aí.


c ta comendo bronha!!!
Isso acontece com o meu, diego, junior "proex", e mais um monte""""""

MensagemEnviado: 30 Nov 2010 15:49
por styg
capaz, é justamente dessas 2 formas que eu mais uso, é uma coisa que não tem como passar batido

sprintf(text,"TEMP: %2.2f",temp);
ou
sprint(text,"TEMP: %.2f", temp);

vou até testar aqui...

MensagemEnviado: 30 Nov 2010 15:59
por styg
testado,

Imagem

Imagem

Imagem

Uploaded with ImageShack.us

MensagemEnviado: 30 Nov 2010 17:54
por fabim
é, intão faz favor. Abre a string no wath ali embaixo, e deixa eu ver se a formatação ficou certa... ou se ele fez a formatação

MensagemEnviado: 30 Nov 2010 17:55
por fabim
á sim, o 00.00 converte para 4 digitos decimais, mais não insere o "."...