AJUDA ANSI C. POINTER KEIL

Software e Hardware para linha ARM

Moderadores: 51, guest2003, Renie, gpenga

AJUDA ANSI C. POINTER KEIL

Mensagempor fabim » 30 Abr 2010 20:40

Pessoal.

Sempre usei "void *" quando não sabia se iria utilizar const ou variavel de ram, para jogar para a função.
Só que eu estou mexendo com uma bomba, que eu encontrei.

"char **dado"
Isto mesmo, doi "*". Ou seja, ponteiro do ponteiro.

Como se comporta isso ?
Mano, ve só.
Sou responsável pelo que escrevo!!! E não pelo que você entende !!!
fabim
Dword
 
Mensagens: 5001
Registrado em: 16 Out 2006 10:18
Localização: aqui uái!!!?

Re: AJUDA ANSI C. POINTER KEIL

Mensagempor tcpipchip » 30 Abr 2010 22:07

fabim escreveu:Pessoal.

Sempre usei "void *" quando não sabia se iria utilizar const ou variavel de ram, para jogar para a função.
Só que eu estou mexendo com uma bomba, que eu encontrei.

"char **dado"
Isto mesmo, doi "*". Ou seja, ponteiro do ponteiro.

Como se comporta isso ?


Imagine os vetores de INTERRUPÇÃO do x86, toda vez que um dispositivo requisita uma interrupção, manda para o processador do PC o seu código, este codigo multiplicado por 4* forma um endereço e o conteúdo deste endereço é um endereço para uma posição de memória para o tratador da interrupção.
Avatar do usuário
tcpipchip
Dword
 
Mensagens: 6560
Registrado em: 11 Out 2006 22:32
Localização: TCPIPCHIPizinho!

Re: AJUDA ANSI C. POINTER KEIL

Mensagempor msamsoniuk » 30 Abr 2010 22:22

isso ae vc trata como um array de ponteiros...

tipo, onde vc le char **p, vc pode ler tb char *p[], daih jah sacou neh? para todo i, fazendo p[i] vc tem um ponteiro char *... eh um tipo de acesso muito mais veloz q listas encadeadas, pq no lugar de varrer a lista para achar o i-esimo elemento, vc simplesmente faz um lookup direto para p[i].

sei lah, pega um exemplo ae, quer receber 1000 strings e ir guardando meio que dinamicamente, mas nao sabe o tamanho de cada uma:

Código: Selecionar todos
char **p;
char buffer[1000]; // maximo de cada string

p = malloc(1000*sizeof(char *));

for(i=0;i!=1000;i++)
{
  gets(buffer);
  p[i] = malloc(strlen(buffer));
  strcpy(p[i],buffer);
}


a vantagem eh que vc tem na verdade dois arrays de 1000 elementos, um para o buffer e outro para a lista de ponteiros... cada string recebida, porem pode ter comprimento diferente. assim no lugar de armazenar 1000x1000 bytes, na verdade vc tem 2000 bytes + 1000*n, onde n eh o comprimento medio das strings recebidas.

ou entao, pensa num ring buffer com 32 entradas:

Código: Selecionar todos
char *p[32];

// init
for(i=0;i!=32;i++)
{
  p[i]=NULL;
}
...
// procura entrada livre e coloca pacote
for(i=0;i!=32;i++) if(p[i]==NULL)
{
  p[i]=frame;
}
...
// procura entrada e transmite
for(i=0;i!=32;i++)
  if(p[i])
  {
    send(p[i]);
    free(p[i]);
    p[i]=NULL;
  }
}


tem um outro lance sinistro que eh tries... vc usa algo como:

while(p[i]) p = p[i];

e vai varrendo uma arvore de lookups! eh algo como procurar o ponteiro do ponteiro do ponteiro ... do ponteiro.

fabim escreveu:Pessoal.

Sempre usei "void *" quando não sabia se iria utilizar const ou variavel de ram, para jogar para a função.
Só que eu estou mexendo com uma bomba, que eu encontrei.

"char **dado"
Isto mesmo, doi "*". Ou seja, ponteiro do ponteiro.

Como se comporta isso ?
Avatar do usuário
msamsoniuk
Dword
 
Mensagens: 2935
Registrado em: 13 Out 2006 18:04

Mensagempor styg » 30 Abr 2010 22:51

Realmente, ponteiro é uma coisa fascinante... adoro essas aulas do samsoniuk.
Lucas
Avatar do usuário
styg
Word
 
Mensagens: 799
Registrado em: 16 Out 2006 08:24
Localização: Floripa abaixo de zero.

Mensagempor fabim » 30 Abr 2010 23:45

agora eu entendi o porque do (char **).
E agora as 23:41 do dia 30-04-2010.

depois de quase 1 mes, eu consegui fazer o LPC1768 controlar super perfeito o penisdrive!!!!!! yahoooooooooooooooooooooooo...

Fazem 15 dias que to fissurado nessa m****, e agora que eu entendi o jeitão das bagaças!!!!!!!!!

Ai putex, probrema risorvidiu !!!!

Adorei a biblioteca do: http://elm-chan.org/fsw/ff/00index_e.html
Muito muito bom!!!!!!! super legal!!!!!!!

Pena que o penisdrive no LPC, só funciona em 12Mbit e bulk de no maximo 4096 bytes.......
To imaginando porque no PC o negocio é absurdamente mais alto..
Mano, ve só.
Sou responsável pelo que escrevo!!! E não pelo que você entende !!!
fabim
Dword
 
Mensagens: 5001
Registrado em: 16 Out 2006 10:18
Localização: aqui uái!!!?

Mensagempor tcpipchip » 30 Abr 2010 23:52

fabim escreveu:
yahoooooooooooooooooooooooo...



googleeeeeeeeeeeeeeeeeeeeee...
Avatar do usuário
tcpipchip
Dword
 
Mensagens: 6560
Registrado em: 11 Out 2006 22:32
Localização: TCPIPCHIPizinho!


Voltar para ARM

Quem está online

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

cron

x