TODOPIC

Otros Microcontroladores / Dispositivos programables => Microcontroladores ARM => Mensaje iniciado por: Samg en 01 de Diciembre de 2014, 15:35:40

Título: Variable de 64 bits: extracción cada 8 bits.
Publicado por: Samg en 01 de Diciembre de 2014, 15:35:40
Hola a Todos!!!
Yo estoy trabajando con un LPC1769, y quiero guardar una trama de bits que me tira un sensor. Este entrega 40 bits(5 bytes), por lo que creo una variable de 64 bits donde guardarlos:
typedef unsigned long uint64_t;

uint64_t DATO;

Como cada Byte es un dato, lo que hago es extraerlos por separado en una variable de 8 bits,recurriendo al desplazamiento como lo especifico mas abajo:
typedef unsigned char uint8_t;
uint8_t dato_RH;

El problema se presenta que cuando desplazo para sacar el dato del 5to byte de la siguiente forma:

dato_RH=(uint8_t) ((DATO>>32)& 0x00FF);

y me responde con:
warning: right shift count >= width of type [enabled by default]
dato_RH= (uint8_t)( (DATO >> 32) & 0x00FF);
^
Finished building.

Como verán no soy un experto en el tema,alguna opinión?
Título: Re: Variable de 64 bits: extracción cada 8 bits.
Publicado por: migsantiago en 01 de Diciembre de 2014, 15:43:24
Hola, te marca la advertencia porque seguramente un unsigned long sigue pesando 32 bits.

Intenta:

typedef unsigned long long uint64_t;

Saludos.
Título: Re: Variable de 64 bits: extracción cada 8 bits.
Publicado por: elgarbe en 01 de Diciembre de 2014, 16:18:11
5 post mas abajo del que creaste hay algo muy parecido con una solucion mucho más elegante:

http://www.todopic.com.ar/foros/index.php?topic=43562.0

saludos!
Título: Re: Variable de 64 bits: extracción cada 8 bits.
Publicado por: Samg en 01 de Diciembre de 2014, 16:33:21
Hola, te marca la advertencia porque seguramente un unsigned long sigue pesando 32 bits.

Intenta:

typedef unsigned long long uint64_t;

Saludos.

Perfecto!
Muchas Gracias!!