Descarga la aplicación para disfrutar aún más
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
Compartir