FIFO - CCS

Software e Hardware para uC PIC

Moderadores: andre_luis, 51, guest2003, Renie

FIFO - CCS

Mensagempor kaoalex » 09 Jun 2008 16:41

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);
   }
}
Avatar do usuário
kaoalex
Byte
 
Mensagens: 237
Registrado em: 12 Out 2006 01:52

Mensagempor helton » 10 Jun 2008 08:07

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 ?
Helton Marques
"Priorize as Prioridades"
helton
Byte
 
Mensagens: 146
Registrado em: 16 Out 2006 09:18
Localização: São José-SC

Mensagempor rafaelntg » 10 Jun 2008 08:47

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!
Rafael Noronha
rafaelntg
Bit
 
Mensagens: 10
Registrado em: 12 Mar 2007 10:46
Localização: Santa Rita do Sapucaí/Brazópolis - MG

Mensagempor kaoalex » 10 Jun 2008 22:02

rafaelntg,
antes de mais nada obrigado pela ajuda.


continua dando erro na estrutura.
unknow type

no *prox;
Avatar do usuário
kaoalex
Byte
 
Mensagens: 237
Registrado em: 12 Out 2006 01:52

Mensagempor helton » 11 Jun 2008 07:55

tira o typedef...

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


[/code]
Helton Marques
"Priorize as Prioridades"
helton
Byte
 
Mensagens: 146
Registrado em: 16 Out 2006 09:18
Localização: São José-SC

Mensagempor Maurício » 11 Jun 2008 13:24

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
"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 kaoalex » 14 Jun 2008 15:29

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);
   }
}
Avatar do usuário
kaoalex
Byte
 
Mensagens: 237
Registrado em: 12 Out 2006 01:52

Mensagempor helton » 15 Jun 2008 11:50

só fico com uma dúvida em relação ao "new" ou "malloc" ...o quanto de memória ele aloca...
Helton Marques
"Priorize as Prioridades"
helton
Byte
 
Mensagens: 146
Registrado em: 16 Out 2006 09:18
Localização: São José-SC

Mensagempor kaoalex » 15 Jun 2008 14:11

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.
Avatar do usuário
kaoalex
Byte
 
Mensagens: 237
Registrado em: 12 Out 2006 01:52

Mensagempor Maurício » 15 Jun 2008 21:13

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
"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


Voltar para PIC

Quem está online

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

cron

x