Logo Studenta

Ejercicios - Uniones, estructuras de bits y operadores de bits - Documentos de Google

¡Estudia con miles de materiales!

Vista previa del material en texto

Ejercicios 
Uniones, estructuras de bits y operadores de bits 
 
 
1. Un sensor de temperatura y humedad ACME TX 1000 envía sus mediciones a través de una 
trama de 4 bytes tal como se indica en la figura. 
 
 
 
Donde los sufijos ‘h’ y ‘l’ se refieren al byte más significativo (MSB) y menos significativo (LSB) 
respectivamente. Se pide diseñar una función que reciba un vector con los cuatro bytes y 
devuelva una estructura con los datos de temperatura y humedad. 
 
El prototipo de la función será el siguiente: 
 
temp_hum_t obtener_temp_hum (unsigned char *trama) 
 
Donde: 
 
● trama : vector de cuatro unsigned char conteniendo los bytes de la trama 
● temp_hum_t : estructura que contiene los datos de temperatura y humedad definida de 
la siguiente manera: 
typedef struct{ 
 short int temperatura; 
 unsigned short int humedad; 
} temp_hum_t; 
 
Realice dos implementaciones, una utilizando punteros y otra con uniones. 
 
2. El fabricante del sensor ACME TX 1000 decide cambiar el formato de su trama de datos. 
Modifique las funciones realizadas en el punto 1, de acuerdo al cambio reportado. 
 
 
 
Responda las siguiente preguntas y obtenga conclusiones de acuerdo a sus implicancias: 
 
● ¿Es necesario modificar la interfaz (prototipo) de la función? 
● ¿Es necesario modificar la implementación (código) de la función? 
● ¿La función obtener_temp_hum cumple o no la función de abstraer al programa principal 
de los cambios del hardware? 
 
3. Un globo meteorológico guarda cada medición de altura (km), presión (hpa) y temperatura (°C) 
en un registro de 32 bits, organizados de la siguiente manera: 
 
 
 
Se pide diseñar una función que reciba el dato empaquetado, como entero no signado de 32 
bits, y devuelva una estructura con los datos de altura, temperatura y presión. 
 
4. El sensor de presión temperatura BMP 280 
( https://cdn-shop.adafruit.com/datasheets/BST-BMP280-DS001-11.pdf ) utiliza una serie de 
registros de 8 bits para almacenar la información de presión y temperatura como se muestra en 
el fragmento de la hoja de datos a continuación: 
 
Implemente una función que permita la extracción de los campos de presión y temperatura 
(registros 0xFC, 0xFB, 0xFA, 0xF9, 0xF8, 0xF7), tal que dicha rutina reciba los seis bytes crudos 
tal como se leen de la interfaz de comunicaciones y devuelva a su salida una estructura 
conteniendo dos enteros no signados con los valores de ambas mediciones, utilizando: 
a) Unión más estructura con campos de bits 
b) Operadores de bits 
 
5. El sensor mencionado en el ejercicio anterior posee un registro de configuración (0xF5) el cual 
contiene los siguientes campos de bits: 
https://cdn-shop.adafruit.com/datasheets/BST-BMP280-DS001-11.pdf
 
Implemente una función que reciba una estructura conteniendo los tres parámetros indicados, utilizando 
tipos de datos adecuados y devuelva el dato empaquetado de un byte, utilizando: 
a) Unión más estructura con campos de bits 
b) Operadores de bits 
 
6. Un controlador de disco rígido utiliza en el bajo nivel una trama de 32 bits de la siguiente forma: 
 
 
Implemente dos funciones que permitan: 
 
a. Convertir una estructura que contemple todos los campos descriptos en la imagen a un entero 
no signado empaquetado como se muestra en la figura (empaquetar) 
b. Convertir un entero no signado como se muestra en la figura a una estructura que contenga 
todos los campos indicados (desempaquetar). 
 
Para ello, implemente dos alternativas utilizando: 
c) Unión más estructura con campos de bits 
d) Operadores de bits 
 
7. La unidad de medidas inerciales MPU-9250 
( https://cdn.sparkfun.com/assets/learn_tutorials/5/5/0/MPU9250REV1.0.pdf ) contiene un acelerómetro, 
un giróscopo y un magnetómetro de tres ejes los cuales se operan mediante una serie de registros de 8 
bits. Se le solicita diseñar sendas funciones que permitan operar sobre el registro de configuración del 
giróscopo (lectura escritura): 
 
https://cdn.sparkfun.com/assets/learn_tutorials/5/5/0/MPU9250REV1.0.pdf
 
Para ello, las funciones recibirán una estructura con los campos a modificar y devolverán un byte con los 
campos empaquetados como se indica la figura (función empaquetar) y viceversa (función 
desempaquetar). 
 
Implemente dos alternativas utilizando: 
e) Unión más estructura con campos de bits 
f) Operadores de bits

Continuar navegando