UNIONES
Una unión es un concepto similar al de una estructura salvo que en lugar de utilizar posiciones consecutivas de memoria para los distintos elementos de la estructura, los elementos de la unión ocupan las mismas direcciones de memoria. Así una unión de 4 bytes sólo ocupa un byte. Una unión puede estar formada por un long, un char y un int. En este caso el número de bytes de RAM utilizados por la unión viene determinado por el tamaño del elemento más grande (el long). En el siguiente ejemplo:
union test { char x ; int y ; char a[3] ; long z ; } ;
la unión requiere 4 bytes. La ubicación de cada elemento es:
dirección 0 x byte y byte alto a[0] z byte más alto +1 y byte bajo a[1] z byte +2 a[2] z byte +3 z byte más bajo
Recordemos que el 8051 coloca el byte más significativo de un objeto en la dirección de memoria más baja.
En las aplicaciones con el 8051, las uniones se utilizan frecuentemente para acceder a los diferentes bytes de un int o un long, como en el siguiente ejemplo:
/* Declaración de la unión clock */ union clock {long real_time_count ; // Reservar 4 bytes int real_time_words[2] ; // array de 2 int char real_time_bytes[4] ; // array de 4 char } ; /* Real Time Interrupt */ void timer0_int(void) interrupt 1 using 1 { clock.real_time_count++ ; // Incrementar clock if(clock.real_time_words[1] == 0x8000) { // Comprobar // si el word bajo es 0x8000 /* Hacer algo! */ } if(clock.real_time_bytes[3] == 0x80) { // Comprobar // si el byte bajo es 0x80 /* Hacer algo! */ } } |