Página 1 de 1

FIFO - CCS

MensagemEnviado: 09 Jun 2008 16:41
por kaoalex
Tudo bem pessoal!

Eu estou querendo impllementar um código FIFO que eu tenho em C para rodar no CCS. Só que ele da erro na estrutura.

Ficaria muito grato se alguém puder me ajudar a rodar o código.

um abraço
Alexandre Pacheco



Código: Selecionar todos
struct no
{
   int adc;
   int no *prox;
};

no *inicio = NULL;
no *Fim = NULL;

int insere(int adc)
{
   no *p;

   p = new no;

   if(p==NULL)
    return(-1); //memoria insuficiente
   else
   {
      p->adc = adc;
      p->prox = NULL;

      if(inicio == NULL)
      {
         inicio = Fim = p;
      }
      else
      {
         Fim->prox = p;
         Fim = p;
      }
   }
return(1);
}

int remove(void)
{
   int adc;
   no *temp;

   if(inicio==NULL)
   {
   return(-1); //se a lista estiver vazia
   }
   else
   {
      adc = inicio->adc;
      temp = inicio;
      inicio = inicio->prox;
      delete temp;

      return(adc);
   }
}

MensagemEnviado: 10 Jun 2008 08:07
por helton
Aproveitando a discussão e o erro, eu nunca utilizei "new", "free", "malloc" em microcontroladores : 8051, ARM, AVR, realmente, nunca usei...mesmo tendo a necessidade...Sei que isso depende muito do compilador utilizado e do "overhead" gerado, porém um malloc também é muito perigoso, pois se não temos memória virtual, um malloc pode ser um desastre no código...

Qual a opnião da rapaziada ?

MensagemEnviado: 10 Jun 2008 08:47
por rafaelntg
Bom dia, kaoalex!

Não analisei a lógica implementada, mas em relação à sintaxe, só faltou declarar a struct como um tipo chamado "no" (typedef struct no) e retirar o "int" da declaração do campo "prox" para compilar.

Código: Selecionar todos
typedef struct no
{
   int adc;
   no *prox;
};


Espero ter ajudado!

Um abraço! DEUS o abençoe!
Até mais!

MensagemEnviado: 10 Jun 2008 22:02
por kaoalex
rafaelntg,
antes de mais nada obrigado pela ajuda.


continua dando erro na estrutura.
unknow type

no *prox;

MensagemEnviado: 11 Jun 2008 07:55
por helton
tira o typedef...

Código: Selecionar todos
struct no
{
   int adc;
   struct no *prox;
};


[/code]

MensagemEnviado: 11 Jun 2008 13:24
por Maurício
Interessante. É a primeira vez que eu vejo alocação dinâmica pra uso com MCUs.

O CCS aceita alocação dinâmica?

Bacana, mesmo.

A estrutura do helton é a que tem a definição correta dos elementos.

[]'s

MensagemEnviado: 14 Jun 2008 15:29
por kaoalex
Obrigado a todos pela ajuda!!!

Segue abaixo o código funcionando.

FIFO.H

Código: Selecionar todos
#include<stdlibm.h>

struct no
{
   int16 adc;
   struct no *prox;
};

struct no *inicio = NULL;
struct no *fim = NULL;

int insere(int16 adc)
{
   struct no *p;

   p = malloc(sizeof (struct no));

   if(p==NULL)
    return(0); //memoria insuficiente
   else
   {
      p->adc = adc;
      p->prox = NULL;

      if(inicio == NULL)
      {
         inicio = fim = p;
      }
      else
      {
         fim->prox = p;
         fim = p;
      }
   }
return(1);
}

int16 remove(void)
{
   int16 adc=0;
   struct no *temp;

   if(inicio==NULL)
   {
   return(0); //se a lista estiver vazia
   }
   else
   {
      adc = inicio->adc;
      temp = inicio;
      inicio = inicio->prox;
      free(temp);

      return(adc);
   }
}

MensagemEnviado: 15 Jun 2008 11:50
por helton
só fico com uma dúvida em relação ao "new" ou "malloc" ...o quanto de memória ele aloca...

MensagemEnviado: 15 Jun 2008 14:11
por kaoalex
helton escreveu:só fico com uma dúvida em relação ao "new" ou "malloc" ...o quanto de memória ele aloca...


Código: Selecionar todos
sizeof (struct no)


No caso acima 16 bytes (int16) pq é o tamanho da estrutura.

Se fosse int seria 4 bytes.

MensagemEnviado: 15 Jun 2008 21:13
por Maurício
Eu não conheço o PIC, mas, quantos bytes ocupa um tipo int16, p. ex.?
Pra mim ocupa 2 bytes, 16 bits. Correto?

Se, essa variável tiver dois bytes, então, o tamanho dessa estrutura vai variar entre 3 e 4 bytes, dependendo de como o compilador endereça a RAM inbterna. Se for em um ponteiro de 8 bits, então, a estrutura vai ter 3 bytes. Se for por um ponteiro de 16 bits, então, a estrutura vai ter 4 bytes.

O programa ficou bem bacana!! :wink: :wink:

[]'s