Tho Wes schrieb:
> Servus,
>
> im ZUsammenhang einer SPI und der Zusammensetzung von 4 Bytes zu einem
> uint32_t frage ich mich, was genau der code von Karl Heinz macht:
>
>
1 | > uint32_t speicherzusammensetzung;
|
2 | >
|
3 | > *( (uint8_t*)&speicherzusammensetzung + 0 )
|
4 | > =speicherzusammensetzung_array[0];
|
5 | > *( (uint8_t*)&speicherzusammensetzung + 1 )
|
6 | > =speicherzusammensetzung_array[1];
|
7 | > *( (uint8_t*)&speicherzusammensetzung + 2 )
|
8 | > =speicherzusammensetzung_array[2];
|
9 | > *( (uint8_t*)&speicherzusammensetzung + 3 )
|
10 | > =speicherzusammensetzung_array[3];
|
11 | > return speicherzusammensetzung;
|
12 | >
|
13 | >
|
> insbesondere das **( (uint8_t*)* sowie das **(
> (uint8_t*)&speicherzusammensetzung + 0 )* kapiere ich nicht.
>
> P.S. der orignalcode ist von Karl heinz, nur bei mir heißen die
> Variablen anders
>
> Könnte mir bitte jemand helfen?
Also ein **((uint8_t*)* sehe ich nirgends im Code. Also vorsicht beim
Zitieren.
Der Code macht folgendes:
1) &speicherzusammensetzung --> Zeiger auf diese Variable (32Bit).
2) (uint8_t*)&speicherzusammensetzung --> der Zeiger wird auf 8Bit-Wert
gecastet, d.h zuvor war es ein Zeiger auf 32Bit, jetzt aber auf 8Bit.
3) ((uint8_t*)&speicherzusammensetzung + 0) --> Zeiger auf die ersten
8Bit des 32Bit Wertes
4) *( (uint8_t*)&speicherzusammensetzung + 0 ) --> Dereferenzierung,
d.h. ich greife auf die Daten an dieser Stelle zu.
5) *( (uint8_t*)&speicherzusammensetzung + 0 ) =
speicherzusammensetzung_array[0]; --> das bekommst du jetzt auch hin.