Qual é a função do printf pra linguagem C?

Software e Hardware para uC PIC

Moderadores: andre_luis, 51, guest2003, Renie

Qual é a função do printf pra linguagem C?

Mensagempor fabio_pic » 08 Ago 2008 19:19

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.
fabio_pic
Nibble
 
Mensagens: 81
Registrado em: 03 Set 2007 09:04
Localização: Rio de Janeiro

Mensagempor msamsoniuk » 09 Ago 2008 00:18

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.
Avatar do usuário
msamsoniuk
Dword
 
Mensagens: 2935
Registrado em: 13 Out 2006 18:04

Mensagempor fabio_pic » 09 Ago 2008 08:25

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.
fabio_pic
Nibble
 
Mensagens: 81
Registrado em: 03 Set 2007 09:04
Localização: Rio de Janeiro

Mensagempor RobL » 09 Ago 2008 16:07

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!!!
RobL
Dword
 
Mensagens: 1546
Registrado em: 20 Fev 2007 17:56

Mensagempor msamsoniuk » 09 Ago 2008 16:56

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.
Avatar do usuário
msamsoniuk
Dword
 
Mensagens: 2935
Registrado em: 13 Out 2006 18:04

Mensagempor fabio_pic » 11 Ago 2008 08:22

Ok Senhores,

Acho que as coisas estão esclarecendo. Vou dar mais uma olhada na documentação observando o exemplo CCS do RobL.

Obrigado.
fabio_pic
Nibble
 
Mensagens: 81
Registrado em: 03 Set 2007 09:04
Localização: Rio de Janeiro

Mensagempor Maurício » 11 Ago 2008 08:46

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
"Não leve a vida tão à sério, afinal, nenhum de nós sairá vivo, dela!"
Avatar do usuário
Maurício
Word
 
Mensagens: 678
Registrado em: 14 Out 2006 17:23
Localização: São Paulo - SP

Mensagempor fabio_pic » 11 Ago 2008 09:26

OK Maurício,

Acho que no próprio comando printf é apontada a função de "fala" com o LCD.

Obrigado pela dica.
Fábio.
fabio_pic
Nibble
 
Mensagens: 81
Registrado em: 03 Set 2007 09:04
Localização: Rio de Janeiro

Mensagempor ze » 11 Ago 2008 10:21

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
Avatar do usuário
ze
Dword
 
Mensagens: 1655
Registrado em: 05 Jun 2007 14:32


Voltar para PIC

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante

x