The function:
#define ASSOC(port) (*(volatile bit_field *) (&port))
The function call:
#define SCLK ASSOC(PORTC).bit0
bit_field defined as a struct like this:
typedef struct {
unsigned char bit0 :1, bit1 :1, bit2 :1, bit3 :1, bit4 :1, bit5 :1,
bit6 :1, bit7 :1;
} bit_field;
I don't know where &port is defined.
Can someone please explain how the function is read and how it works please? I am not very good with pointers and this example in particular is very confusing with "*" in the front and at the end and the "&" with the port.
Thank you
port
is not defined. It is the argument to ASSOC as you can see here:
#define ASSOC(port) /* etc. */
Also, I assume it is supposed to be a char
, because the bit_field
has 8 bits. The &
in &port
simply serves to get its address in memory.
ASSOC in turn casts &port
to a volatile bit_field *
and then there is the extra *
at the beginning to point directly to the contents of the resulting pointer.
Therefore, once you call ASSOC(port), you can use it as a bit_field type structure. For example, the SCLK
macro will give the first bit of PORTC
.