matriz de dados

Software e Hardware para uC PIC

Moderadores: andre_luis, 51, guest2003, Renie

matriz de dados

Mensagempor dcardoso » 19 Ago 2008 14:08

Srs. necessito de uma variável com as seguintes características.

int8 tx_buffer[8];

Gostaria de saber como enviar dados diretamente para essa variável
dcardoso
Bit
 
Mensagens: 21
Registrado em: 28 Jul 2008 15:08

Mensagempor xultz » 19 Ago 2008 14:10

tx_buffer[0] = 1;
tx_buffer[1] = 2;

e assim por diante.

Se quiser enfiar uma string dentro desta matriz, precisa pegar byte por byte e colocar nas posições, conforme acima. Ou usa um comando, que no fim das contas vai fazer exatamente isto.
98% das vezes estou certo, e não estou nem aí pros outros 3%.
Avatar do usuário
xultz
Dword
 
Mensagens: 3001
Registrado em: 13 Out 2006 18:41
Localização: Curitiba

Mensagempor dcardoso » 19 Ago 2008 15:47

bom, isto eu verifiquei e funciona, mas tem como eu fazer a passagem de parametros por ponteiro? Td de uma vez.

Por exemplo, posso fazer isso: int8 tx_buffer[8]={0,1,...};
bom depois que declaro o buffer tem como enviar dados de uma só vez sem ficar indexando byte por byte usando ponteiro
dcardoso
Bit
 
Mensagens: 21
Registrado em: 28 Jul 2008 15:08

Mensagempor joao » 20 Ago 2008 08:15

tudo depende de onde vc está pegando esses valores.
Por exemplo

Código: Selecionar todos
void main()
{
   int8 temp[8] = {0,1,2,3,4,5,6,7};
   int8 temp2[8];

   temp2 = temp; //aqui todos os valores de temp2 serão iguais a temp;

   temp2[4] = 0;  //agora ficou assim: {0,1,2,0,5,6,7} tanto em temp como temp2.
   temp[7] = 9; //agora ficou assim: {0,1,2,0,5,6,9} tanto em temp como temp2.

}


[]'s
Avatar do usuário
joao
Byte
 
Mensagens: 463
Registrado em: 17 Out 2006 08:21

Mensagempor Jorge_Francisco » 20 Ago 2008 08:54

joao escreveu:tudo depende de onde vc está pegando esses valores.
Por exemplo

Código: Selecionar todos
void main()
{
   int8 temp[8] = {0,1,2,3,4,5,6,7};
   int8 temp2[8];

   temp2 = temp; //aqui todos os valores de temp2 serão iguais a temp;

   temp2[4] = 0;  //agora ficou assim: {0,1,2,0,5,6,7} tanto em temp como temp2.
   temp[7] = 9; //agora ficou assim: {0,1,2,0,5,6,9} tanto em temp como temp2.

}


[]'s


Hã??
Avatar do usuário
Jorge_Francisco
Dword
 
Mensagens: 1009
Registrado em: 12 Out 2006 09:53
Localização: Rio de Janeiro

Mensagempor dcardoso » 20 Ago 2008 09:03

vem k, não é necessário a passagem por ponteiros para fazer isso.

simplesmente fazer temp2=temp, não gera erro.

detalhe, verifiquei na faculdade e não tem como eu fazer atribuição de parametros diretamente para dentro das posições do vetor sem indexar a posição o que eu queria fazer é algo tipo assim, DETALHE, mas não pode.

int8 buffer[8];

buffer={1,2,3,...} ok.
ou seja, atribuir direto .

[]ços
dcardoso
Bit
 
Mensagens: 21
Registrado em: 28 Jul 2008 15:08

Mensagempor xultz » 20 Ago 2008 09:03

Tem sim cardoso:

Código: Selecionar todos
void envia_frase(unsigned char * frase, int quantidade)
{
  for( ; quantidade !=0; quantidade--)
  {
    transmite_byte(*frase);
    frase++;
  }
}

void main(void)
{
  unsigned char teste1[7] = { 'A', 'B', 'C', 'D', 'E', 'F', 'G' };

  envia_frase(teste1, 7);

  envia_frase("Agora eh o fim do mundo!", 24);
}


Espero ter ajudado!
98% das vezes estou certo, e não estou nem aí pros outros 3%.
Avatar do usuário
xultz
Dword
 
Mensagens: 3001
Registrado em: 13 Out 2006 18:41
Localização: Curitiba

Mensagempor andre_luis » 20 Ago 2008 09:16

Na verdade, existe sim uma maneira de transferir, sem ter qua passar cada elemento. Já fiz isso quando tive que trabalhar com uma grande massa de dados. Se nao me engano, é algo tipo :

Código: Selecionar todos
char Dado1 = { 0, 1, 2, ..., 99 } ;
char * Dado2[100]       ;

( *Dado2[0] ) = &Dado1 ;


Só que nesse caso, voce não poderá mais trabalhar acessando a variável como antes, mas apenas por ponteiro. Para acessar cada posição da variável, terá de fazer algo tipo :

Código: Selecionar todos
Valor = ( *Dado2[0] + Offset ) ;


+++
"Por maior que seja o buraco em que você se encontra, relaxe, porque ainda não há terra em cima."
Avatar do usuário
andre_luis
Dword
 
Mensagens: 5447
Registrado em: 11 Out 2006 18:27
Localização: Brasil - RJ

Mensagempor Jorge_Francisco » 20 Ago 2008 09:24

Agora sim, com ponteiros.
Avatar do usuário
Jorge_Francisco
Dword
 
Mensagens: 1009
Registrado em: 12 Out 2006 09:53
Localização: Rio de Janeiro

Mensagempor fabim » 20 Ago 2008 09:25

cara em pascal é possivel fazer um Record.
Tipo um minha_var : Trecord, onde podesse dizer que minha_var é uma string ou array de bytes de 0 a n, e posso enumerar de 0...10 para char, 11..14 para uma integer ..............

Sei que o C tem algo parecido, de uma olhada no manuél do MikroC.

Eu por exemplo quando crio um array de 10 bytes por exemplo, eu não fico preenchendo ele com os dados.

Dou uma olhada no Code explore, pego o endereço dele e com algumas linhas de ASM ja fou encaixando os dados nos bytes que eu preciso.

Fabim
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 andre_luis » 20 Ago 2008 09:51

Fábio,

Essa maneira de programar com hibrido assembly/C, não é muito recomendável, pois assim voce perde a portabilidade do programa, que é uma das principais características do 'C'.

Trabalhando-se com ponteiros e endereço de variáveis, acaba-se realizando essa mesma tarefa, mas agora esse gerenciamento do endereço real é feito pelo compilador de modo transparente ao programador.

+++
"Por maior que seja o buraco em que você se encontra, relaxe, porque ainda não há terra em cima."
Avatar do usuário
andre_luis
Dword
 
Mensagens: 5447
Registrado em: 11 Out 2006 18:27
Localização: Brasil - RJ

Mensagempor dcardoso » 20 Ago 2008 10:00

andre, pelo que vi dado2 recebe o endereços de memória do dado1, correto?
E valor recebe os dados de dado2, o que seria o "... + offset", e se caso eu necessitar colocar um valor dentro de dado1, como ficaria o código.
[]ços







andre_teprom escreveu:Na verdade, existe sim uma maneira de transferir, sem ter qua passar cada elemento. Já fiz isso quando tive que trabalhar com uma grande massa de dados. Se nao me engano, é algo tipo :

Código: Selecionar todos
char Dado1 = { 0, 1, 2, ..., 99 } ;
char * Dado2[100]       ;

( *Dado2[0] ) = &Dado1 ;


Só que nesse caso, voce não poderá mais trabalhar acessando a variável como antes, mas apenas por ponteiro. Para acessar cada posição da variável, terá de fazer algo tipo :

Código: Selecionar todos
Valor = ( *Dado2[0] + Offset ) ;


+++
dcardoso
Bit
 
Mensagens: 21
Registrado em: 28 Jul 2008 15:08

Mensagempor Maurício » 20 Ago 2008 10:05

Salve, raça!

Não há nenhuma possibilidade de igualar, ou atribuir valores pra um vetor em C, a não ser, na inicialização; ou, elemento por elemento; ou, através de funções embutidas do compilador; ou, se vc usar STRUCTs.

[]'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 dcardoso » 21 Ago 2008 10:18

Galera, não entendo teoricamente isso deveria enviar a string lista para serial, mas não recebo nada.
Algum help


void main(void)
{
char *lista;

lista = "i25632";
printf("%s", lista);
}
dcardoso
Bit
 
Mensagens: 21
Registrado em: 28 Jul 2008 15:08

Mensagempor andre_luis » 21 Ago 2008 10:40

Maurício,

Como disse antes, quando se trabalha com ponteiros, voce pode não mudar o valor do vetor, mas o "endereço" desse vetor. E dessa maneira, isso torna possível essa transferencia de dados sim.

Fazendo uma analogia, isso é o que acontece no Windows quando voce MOVE ou COPIA um diretório de 500MB. Se voce COPIA, leva alguns minutos para isso. Se voce MOVE, leva apenas alguns segundos.


dcardoso,

Voce pode criar outro vetor para isso.

+++
"Por maior que seja o buraco em que você se encontra, relaxe, porque ainda não há terra em cima."
Avatar do usuário
andre_luis
Dword
 
Mensagens: 5447
Registrado em: 11 Out 2006 18:27
Localização: Brasil - RJ

Próximo

Voltar para PIC

Quem está online

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

x