Gast
#4104425
Hallo, um einen TLC5971 (LED Treiber) komfortabel anzusteuern habe ich ein struct mit den Parametern des Treibers erstellt und das Ganze anschließend in eine union gepackt um es dann byte-weise verschicken zu können. struct tlc5971_par { uint8_t command:6; uint8_t outtmg:1; uint8_t extgck:1; uint8_t tmgrst:1; uint8_t dsprpt:1; uint8_t blank:1; uint8_t bc_blue:7; uint8_t bc_green:7; uint8_t bc_red:7; uint16_t gs_blue_3:16; uint16_t gs_green_3:16; uint16_t gs_red_3:16; uint16_t gs_blue_2:16; uint16_t gs_green_2:16; uint16_t gs_red_2:16; uint16_t gs_blue_1:16; uint16_t gs_green_1:16; uint16_t gs_red_1:16; uint16_t gs_blue_0:16; uint16_t gs_green_0:16; uint16_t gs_red_0:16; }; union tlc5971 { uint8_t bytes[28]; struct tlc5971_par par; }; Ich habe mittlerweile auch gelesen, dass es Compilersache ist wie das Bitfeld später im Speicher liegt. Ich verwende AtmelStudio 6 und dort ist die Option -fpack-struct standardmäßig dabei. Die Optimierungen habe ich abgeschaltet und nun erhalte ich trotzdem die Daten wie sie im Bild dargestellt sind. Bereits das erste Byte ist also nicht korrekt. In bytes[0] müsste ja schon 0xA4 stehen. Hat jemand einen Tipp wie man es sauber lösen könnte? Viele Grüße
