Hallo,
ich möchte mehrere TLC5948A LED Treiber ansprechen. Diese benutzen ein
257Bit Shiftregister.
Bevor ich mir nun Funktionen schreibe, welche ein byte/bit an eine
gewünschte Position in einem byte-Array schreiben, dachte ich kann man
das evtl. auch mit bit-Feldern lösen.
Das folgende Beispiel, auf einem STM32F070 mit Atollic Studio erzeugt
laut sizeof eine Größe von 2 Byte. Kann ich dem Compiler sagen, dass es
das trotzdem in einem Byte packen darf/soll?
1 | typedef struct{
|
2 | uint8_t MSB : 6;
|
3 | } s_component;
|
4 |
|
5 | typedef struct {
|
6 | uint8_t MSB1 : 1;
|
7 | s_component oTest;
|
8 | uint8_t MSB2 : 1;
|
9 | } s_shiftregister;
|
Im weiteren Verlauf dachte ich dann an folgendes, doch auch diese Lösung
erzeugt wesentlich mehr Bytes, als erwartet.
1 | typedef struct{
|
2 | uint8_t MSB : 1;
|
3 | uint8_t u8Data[32];
|
4 | } s_component;
|
5 |
|
6 | typedef struct {
|
7 | s_component aoData[7];
|
8 | } s_shiftregister;
|
Dass diese Lösung dann stark Compiler abhängig wäre, ist mir bewusst.