Bonjour,
Le code ci-dessous est extrait d'un code parfaitement fonctionnel que j'ai un peu de mal à décrypter (je suis débutant en C). Il s'agit de l'initialisation d'un buffer circulaire pour une liaison serie.
Je me demande ce que signifie "&(&TX) ->" dans :
Code C : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 char TX_buf[32]; char RX_buf[32]; struct { unsigned char *ringBuf_start; unsigned char *ringBuf_end; unsigned char *ringBuf_in; unsigned char *ringBuf_out; } TX; struct { unsigned char *ringBuf_start; unsigned char *ringBuf_end; unsigned char *ringBuf_in; unsigned char *ringBuf_out; } RX; void init_serial_buffer(void) { ((&TX) -> ringBuf_in = (&TX) -> ringBuf_out = (&TX) -> ringBuf_start = TX_buf, (&TX) -> ringBuf_end = &(&TX) -> ringBuf_start[32-1]); ((&RX) -> ringBuf_in = (&RX) -> ringBuf_out = (&RX) -> ringBuf_start = RX_buf, (&RX) -> ringBuf_end = &(&RX) -> ringBuf_start[32-1]); }
Et plus généralement, connaissez-vous des sites, des livres, videos...etc où je pourrai m'entrainer à la lecture et/ou à la production d'expressions complexes de pointeurs/structures. Sachant à moyen terme je doit devenir capable de produire du code optimisé pour systèmes embarqués.
Code C : Sélectionner tout - Visualiser dans une fenêtre à part (&TX) -> ringBuf_end = &(&TX) -> ringBuf_start[32-1]);
Merci d'avance.
Partager