Hallo,
kann mir jemand sagen wie das da unten funktioniert bzw. was das genau
ist und wozu man es benutzen kann? Was ein struct ist, ist mir klar aber
bei mir sehen die irgendwie einfacher aus.
1
staticconststructpios_overo_cfgpios_overo_cfg={
2
.regs=SPI2,
3
.remap=GPIO_AF_SPI2,
4
.init={
5
.SPI_Mode=SPI_Mode_Slave,
6
.SPI_Direction=SPI_Direction_2Lines_FullDuplex,
7
.SPI_DataSize=SPI_DataSize_8b,
8
.SPI_NSS=SPI_NSS_Hard,
9
.SPI_FirstBit=SPI_FirstBit_MSB,
10
.SPI_CRCPolynomial=7,
11
.SPI_CPOL=SPI_CPOL_High,
12
.SPI_CPHA=SPI_CPHA_2Edge,
13
.SPI_BaudRatePrescaler=SPI_BaudRatePrescaler_2,
14
},
15
.use_crc=false,
16
.dma={
17
.irq={
18
// Note this is the stream ID that triggers interrupts (in this case TX)
Bei der klassischen Initialisierung müssen die Initialisierer in der
korrekten Reihenfolge angegeben werden, wenn nur ein Element der
Struktur (mit einem von 0 abweichenden Wert) initialisiert werden soll,
dann müssen alle Elemente der Struktur, die in der Deklaration vorher
stehen, auch initialisiert werden.
Will man im obigen Beispiel nur das Strukturelement c initialisieren,
müssen der Reihenfolge wegen zwangsweise auch a und b initialisiert
werden.
Bei "designated initializers" ist die Reihenfolge egal, und so ist auch
eine alleinige Initialisierung von c möglich; a und b werden dann mit 0
initialisiert.
Und gerade bei einer so komplexen Struktur hat man den Vorteil, dass man
gleich sieht, welches Element welchen Wert bekommt, ohne dass man
daneben noch die Definition des Typs sehen und die Elemente einzeln
abzählen muss.