Estoy usando un Atmega32 a leer varios sensores usando su ADC.
El uso de la lógica digital y un par de multiplexores, he multiplexado la totalidad de PORTA, el uso de PA0:6 para la dirección y PA7 como la de entrada. Por lo tanto, puede tener un máximo de 128 entradas de un solo PUERTO.
Ahora, desde el usuario será el funcionamiento del sistema a través de un ordenador (mediante RS232), será posible añadir o eliminar los sensores, por lo que el sistema debe hacer un seguimiento de que las direcciones son libres de añadir sensores y que se dirige a la lectura.
Yo estaba pensando en usar una de 128 bits arreglo booleano como bandera para indicar si hay un sensor en una dirección determinada.
Mientras que C no tiene soporte nativo para los bits variables, es posible el uso de campos de bits para empaquetar juntos hasta 8 "bool variables" en un solo unsigned char.
Por lo tanto, he creado la siguiente estructura:
typedef struct bool_s{
uint8_t bit1:1;
}bool_t;
A continuación, he creado un array de tipo bool_t con un tamaño de 128, con la esperanza de que todo iba a estar bien juntos, pero sizeof()
me dice que el tamaño de la matriz es de 128 bytes en lugar de los 16 bytes que yo estaba esperando.
Técnicamente, podría crear una sola estructura con 128 bit 1 variables:
typedef struct Flag_s{
uint8_t F1:1;
uint8_t F2:1;
uint8_t F3:1;
[...]
uint8_t F128:1;
}Flag_t;
El problema con este enfoque es que mientras lo hace reducir el uso de memoria, no es muy práctico de usar y ocupa demasiado de bienes raíces en el código.
¿Hay alguna forma fácil de crear una gran cantidad de banderas o estoy pidiendo demasiado? Quiero decir, no es como el ahorro de 112 bytes va a hacer una gran diferencia cuando usted tiene 2K disponibles, pero lo que si necesitaba aún más banderas?