A ver si me hago entender bien mi inquietud...
En assembler uno tiene el control completo y eficiente del uso de los registros tanto en un byte como en los bits dentro del mismo.
Ej: Cargo un byte y comparo con btfss cada bit.
Cuando uno pasa a C tiene el siguiente inconveniente:
-Si quiere optimizar para comparaciones booleanas usa bits (variable "bit" en Hitech y estructuras unarias en Hitech & Microchip).
Pero si desea por ejemplo transportar 8 bits por una USART los agrupa en un byte con lo que se tiene que procesar dicha informacion. EJ (pepe=(bit7*0x80)|(bit6*0x40)....)
-Caso contrario: si quiere optimizar usando en un registro tipo "char" debe procesar (enmascaramiento) para recuperar cada bit de interes.
Si de antemano utilizaramos el mismo byte donde se definio cada bit, estariamos evitando una tarea que desde el punto de vista del procesador es inutil.
Mi ejemplo:
struct {unsigned char B7:1,B6:1,B5:1,B4:1,B3:1,B2:1,B1:1;B0:1;} pepe;
unsigned char *tongo,resultado;
{pepe.B7=1;pepe.B0=0; //aca cargo lo que quiero en los bits
tongo=(unsigned char *)&pepe;
resultado=*pepe; //aca recupero en un byte todos los bits
}
De esta manera tengo en "resultado" un byte con todos los bits de pepe, pero....
No se si depende del compilador el ordenamiento de dichos bits en la estructura o si es una practica correcta.
Si tienen una mejor idea o comentario los espero...
Marcelo