Página 1 de 1

Dúvida em C

MensagemEnviado: 07 Nov 2017 09:38
por ÁgioFelipe
Amigos, uma simples dúvida que me surgiu agora:
Vou usar como exemplo a biblioteca da serial do C18.
Bem, para que eu use a função getsUSART no meu programa, basta que eu inclua no cabeçalho o arquivo usart.h.
Abrindo o usart.h , como ele é um arquivo hearder, vou encontrar apenas a declaração da função, está lá:

void getsUSART ( char *buffer, unsigned char len);

Não existe nele nada sobre como a função é implementada.
Procurando dentro do diretório do compilador C18, encontrei um arquivo chamado ugets que contém a implementação da função getsUSART, segue o arquivo:
Código: Selecionar todos
#include <p18cxxx.h>
#include <usart.h>

/********************************************************************
*    Function Name:  getsUSART                                      *
*    Return Value:   void                                           *
*    Parameters:     buffer: pointer to string                      *
*                    len: length of characters to receive           *
*    Description:    This routine receives a string of characters   *
*                    from the USART of length specified by len.     *
********************************************************************/
#if defined (AUSART_V1) || defined (EAUSART_V3) || defined (EAUSART_V4) || defined (EAUSART_V5)

void getsUSART(char *buffer, unsigned char len)
{
  char i;    // Length counter
  unsigned char data;

  for(i=0;i<len;i++)  // Only retrieve len characters
  {
    while(!DataRdyUSART());// Wait for data to be received

    data = getcUSART();    // Get a character from the USART
                           // and save in the string
    *buffer = data;
    buffer++;              // Increment the string pointer
  }
}

#endif


A pergunta é: Em usart.h não existe ou pelo menos não encontrei nenhuma menção ao arquivo ugets, como a função é então encontrada pelo compilador?

Re: Dúvida em C

MensagemEnviado: 07 Nov 2017 09:55
por vtrx

Re: Dúvida em C

MensagemEnviado: 07 Nov 2017 13:45
por ÁgioFelipe
vtrx escreveu:CLICK AQUI MANUAL C18


Acho que a dúvida é sobre C, não o compilador C18 especificamente.

Re: Dúvida em C

MensagemEnviado: 07 Nov 2017 17:23
por vtrx
A pergunta é: Em usart.h não existe ou pelo menos não encontrei nenhuma menção ao arquivo ugets, como a função é então encontrada pelo compilador?

Acho que a pergunta é como o compilador utiliza a função.

Re: Dúvida em C

MensagemEnviado: 07 Nov 2017 17:37
por pamv
Se eu entendi bem, você quer saber como essa função getUSART é resolvida durante a etapa de link já que não há nenhuma menção ao ugets.c.
Se você olhar as libs do C18, você verá que ela foi compilada e adicionada às bibliotecas (usei o strings pois o nm e ar não funcionam com as libs do c18)

Código: Selecionar todos
tinto$ strings p18f86j93_e.lib| grep -i ugets.[c,o]
ugets.o/                                                                                                                                                                                                                                                        1384450104l
.udata_ugets.o
.idata_ugets.o
.romdata_ugets.o
.code_ugets.o
E:\3.46\pic18-lt\cxx-framework\src\pmc_common\USART\ugets.c