Página 1 de 2
matriz de dados

Enviado:
19 Ago 2008 14:08
por dcardoso
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

Enviado:
19 Ago 2008 14:10
por xultz
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.

Enviado:
19 Ago 2008 15:47
por dcardoso
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

Enviado:
20 Ago 2008 08:15
por joao
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

Enviado:
20 Ago 2008 08:54
por Jorge_Francisco
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ã??

Enviado:
20 Ago 2008 09:03
por dcardoso
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

Enviado:
20 Ago 2008 09:03
por xultz
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!

Enviado:
20 Ago 2008 09:16
por andre_luis
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 ) ;
+++

Enviado:
20 Ago 2008 09:24
por Jorge_Francisco
Agora sim, com ponteiros.

Enviado:
20 Ago 2008 09:25
por fabim
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

Enviado:
20 Ago 2008 09:51
por andre_luis
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.
+++

Enviado:
20 Ago 2008 10:00
por dcardoso
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 ) ;
+++

Enviado:
20 Ago 2008 10:05
por Maurício
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

Enviado:
21 Ago 2008 10:18
por dcardoso
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);
}

Enviado:
21 Ago 2008 10:40
por andre_luis
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.
+++