Ir ao conteúdo
  • Cadastre-se

PIC Carregar int32 com bytes CCS


Posts recomendados

Tenho uma variável int32 size,compilador CCS, e tenho 3 variáveis;in[0],in[1] e in[2].

Como faço para a variavel size ser carregada com os bytes in[0],in[1] e in[2],para formar o numero?

adicionado 40 minutos depois

Ja achei a resposta.

Me deram a dica de olhar no help do CCS a função Make32.

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Função mastigada ccs aff... é para os fracos...😆

Use as inatas do c que é são umas das mais sinistras e aterradoras: struct e union. Há vantagem: fica portável pra qualquer mc e qualquer compilador (inclusive os de verdade kk) e até mesmo arduino.

Ah ... você achou a solução e não compartilhou explicitamente portanto permito-me não fazê-lo da minha sugestão. No entanto caso alguém (não você kk) algum dia ache interessante, se o tópico estiver aberto, mente aberta, eu aqui, etc, manifesta-te que vos mostro... 🙂

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Já que pediu carinhosamente, claro amigo...

 

Fiz isso pra teste antes de saber como seria sua estrutura e como exercício mental

http://tpcg.io/q0tQgTlh

(não sei se precisa logar pra ver. Clique no execute pra rodar : o)

A princípio uso os 4 bytes do long apenas. Penso que no seu caso, algo como

unsigned char in_data[64];

union Data {
   unsigned long meu_dado; //num long
   unsigned char in[4]; //cabem 4 char
   };

... de fato há de se fazer uma ginásticazinha básica semi simples algo como
 

union Data data;    

data.in[0]=in_data[4];//construindo...
data.in[1]=in_data[5];//...meu_dado...
data.in[2]=in_data[6];//...byte a...
data.in[3]=0;//...byte
// pronto. seu meu_dado já está montado. Confira com
print("%u\n",data.meu_dado);
//não testei ok?

Esta sinistra entidade union do c incorpora partes de variáveis pequenas na grande.

Tem até uma outra - pasme - ainda mais sinistra forma de fazer com vetores e ponteiros mas permito-me não exemplificar por hora pois tenho que testar e to com preguiça agora...

 

Ah e outra forma ainda mais minimalista (mas vale a que menos recurso ocupar - só compilando pra ver), é algo como:

meu_dado=((unsigned long)in_data[6]<<16)|(unsigned long)in_data[5]<<8)|(unsigned long)in_data[4]<<0)); //<<0 só pra completar o exercício mental

Deve ser isso que a tal make32 faz...

Obs: só funciona pois meu_dado é inteira. Se fosse float, haveria de ser o lance da union

 

Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...