*(volatile unsigned short *) &( ( (volatile unsigned char *) &( IMMV->out_proc ) )[30] ) = SWAPWORD(DacMax+DACAdj1);
&( IMMV->out_proc ) --> puntatore al membro out_proc della struttura IMMV
(volatile unsigned char *) &( IMMV->out_proc ) --> cast di quello sopra a puntature volatile unsigned char
[30] di quello sopra prendi il trentesimo elemento
&( ... --> ne considere il puntatore
ne fai un cast a (volatile unsigned char *) --> a mio avviso non è necessario perchè già quello è
* --> lo deferenzi
però quella tua affermazione "quello strano casting iniziale e quella specie di assegnazione " -> " mi fa pensare che prima di tutto devi studiarti le basi del C
ciao
sergio