Página 1 de 1
Qual é a função do printf pra linguagem C?

Enviado:
08 Ago 2008 19:19
por fabio_pic
Boa noite senhores,
Alguém pode esclarecer qual é a diferença em usar o printf para formatar uma string na saída serial e outra função como formatar um texto para o LCD? Nos materiais que encontro a utilização deste comando "amarrado" na comunicação serial. O retorno do printf pode ser colocado numa variável, por exemplo?
Fábio.

Enviado:
09 Ago 2008 00:18
por msamsoniuk
bom, o printf foi inventado (juntamente com a linguagem C) no unix na epoca em que se usavam teletypewitters (uma especie de maquina de escrever eletrica) conectadas pela porta serial nos computadores (na epoca q computadores eram do tamanho de uma mesa).
entao, em essencia, o printf envia caracteres formatados de forma serial para algum dispositivo de saida estilo maquina de escrever. como o programa que usa o printf em principio nada precisa saber sobre o dispositivo de saida, uma boa implementacao de printf deveria permitir mudar com facilitade este dispositivo, de modo que ninguem precise recompilar o programa para o mesmo funcionar em um terminal ligado na porta serial, lcd, socket tcp ou em um console com frame buffer grafico (e no unix as coisas assim funcionam!).
alternativamente, se o printf que vc usa nao eh muito bem implementado e vc nao quer trocar para um compilador que preste, vc pode usar sprintf e imprimir a string formatada em um buffer para ser usado por outro dispositivo.

Enviado:
09 Ago 2008 08:25
por fabio_pic
Bom dia Marcelo,
Obrigado pela explicação do comando. E você passou pelo ponto de meu interesse. Quando uso esse comando eu tenho como resultado algo que posso "endereçar" para onde eu quero. Só que os exemplos pra PIC que eu tenho não são explicativos, entendeu?
A pergunta é: Que parâmetro no printf determina se ele será utilizado para a serial ou para um display LCD?
Abraços,
Fábio.

Enviado:
09 Ago 2008 16:07
por RobL
Então em um micro controlador temos que ter um drive para escrever no lcd, uma função. Em outras palavras, temos que ter pronto ou fazer uma função para onde queremos escrever. A função printf vai escrever lá, com suas conversões etc. Se for escrever em uma memo esta variável tem que estar definida para tal, depende do micro e do compilador.
Por exemplo no CCS :
printf(lcd_escreve , "hora: %u:%u:%u" , hr,min,sec);
lcd_escreve está no arquivo include.
Nota: Não saco nada de CCS!!!

Enviado:
09 Ago 2008 16:56
por msamsoniuk
como o robl mostrou, isso depende do compilador e do ambiente. se o compilador tem funcao printf, deve existir uma forma de vc pegar o putchar de mais baixo nivel e reescrever para um dispositivo especifico.
por exemplo, me parece que no sdcc eh possivel usar uma implementacao de printf no compilador, mas esse printf usa a funcao putchar, que nao eh suprida. cabe ao desenvolvedor escrever uma funcao putchar para o device dele (uart, lcd, etc), daih eh possivel usar o mesmo printf de forma transparente.

Enviado:
11 Ago 2008 08:22
por fabio_pic
Ok Senhores,
Acho que as coisas estão esclarecendo. Vou dar mais uma olhada na documentação observando o exemplo CCS do RobL.
Obrigado.

Enviado:
11 Ago 2008 08:46
por Maurício
Salve, pessoal.
Vou citar como exemplo, o Keil, pro 8051. Não conheço os compiladores de PIC.
No Keil, o que é fornecido, é o código-fonte das funções PUTCHAR e GETKEY, que são as funções de mais baixo nível de entrada/saída da serial. E com o fonte, vc modifica o código para direcionar a saída pro dispositivo que vc quiser.
Já, o CodeVision pros AVRs, não fornece essas funções, uma vez que pra LCD, ele já tem sua biblioteca com suas funçòes próprias.
Procura no diretório LIB ou INC do seu compilador, pra ver se vc acha a função PUTCHAR, como um arquivo de extensão .C
Se não tiver essa função disponível, é porque o seu compilador funciona igual ao CodeVision, ou seja, pra manipular LCD ele usa funções próprias pro LCD.
Consulte o manual do seu compilador.
[]'s

Enviado:
11 Ago 2008 09:26
por fabio_pic
OK Maurício,
Acho que no próprio comando printf é apontada a função de "fala" com o LCD.
Obrigado pela dica.
Fábio.

Enviado:
11 Ago 2008 10:21
por ze
uma utilização pro SPRINTF veja em:
http://asm51.eng.br/phpBB/viewtopic.php ... ht=sprintf
já o printf particularmente odeio pois ele usa muita da escassa rom do pic. Sequer uso(e) o putchar() e getkey() a não ser que seu compilador otimize muito bem mesmo o cód. Tente (se puder/quiser/conseguir) escrever no display com rotinas simplificadas como as minhas sugeridas lá no link do link:
http://asm51.eng.br/phpBB/viewtopic.php ... highlight=
abrçs