Próbuję zrealizować dostęp do bitów któregoś rejestru PORT jako do elementów struktury. Napisałem na ten przykład coś takiego:
, wykorzystywane potem tak:Takie rozwiązanie działa poprawnie, ale powoli, poza tym kod ma duży rozmiar (w porównaniu do operacji bitowych bezpośrednio na rejestrach). Czy jest jakiś bardziej optymalne rozwiązanie tego programu (być może okaże się nawet banalne), oparte na strukturach, ewentualnie na uniach?
struct portb {
unsigned DS:1;
unsigned RW:1;
unsigned AS:1;
unsigned :2;
unsigned LOAD:1;
unsigned :1;
unsigned CS:1;
};
struct portb* Portb = (struct portb*)&PORTB;Portb->RW = 1;
Portb->CS = 0;
DDRD = 0xff;
PORTD = adres;
Portb->AS = 1;
Portb->AS = 0;
DDRD = 0x00;
PORTD = 0;
Portb->DS = 0;
asm volatile("NOP");
dane = PIND;
Portb->DS = 1;
Portb->CS = 1;
DDRD = 0xff;