Ich hab' das auch noch nie verwendet, hatte es aber vor Jahren mal hier gesehen:
Code:
/*****************************************************************************/
// Status LEDs
// A shadow register that simplifies usage of status LEDs:
union {
uint8_t byte;
struct {
unsigned LEDsR:3;
unsigned LEDsL:3;
unsigned reserved:2;
};
struct {
unsigned LED1:1;
unsigned LED2:1;
unsigned LED3:1;
unsigned LED4:1;
unsigned LED5:1;
unsigned LED6:1;
unsigned reserved1:1;
unsigned reserved2:1;
};
} statusLEDs;
(Aus RP6RobotBaseLib.h)
Oje: https://www.roboternetz.de/community...fehler-gesucht
...dass
GCC da ziemlich unschöne Dinge anstellt.
Ich glaube, hier treffen zumindest zwei große Fallen aufeinander:
1.: Mit :1 wird keine boolesche Variable im Sinne vom GCC erzeugt, vielmehr handelt es sich um eine 1-Bit Variable. Eine Zuweisung mit True/False ist deshalb nicht legitim. Richtig wäre die Zuweisung eines 1-Bit-Wertes, deshalb verwendet GCC in meinem verlinkten Beitrag nur das Bit0 bei der Zuweisung.
2.: Die schwammigen Definitionen und Verwendungen von True und False. Weil allgemein angenommen wird, dass False gleich 0 ist (Ziffer Null, kein O), und alles außer 0 wäre True, ergeben sich Probleme, wenn man versucht, der 1-bit-Variable den boolesche Wert "True" zuzuordnen. Wie ich schon vor fast vier Jahren geschrieben hatte:
"(ACHTUNG! Das funktioniert nicht generell in C weil nicht definiert ist, wie der Compiler intern ein true speichert. true könnte auch z.B. 0b10000000 sein. Nur so am Rande erwähnt)"
(Ich hoffe, dass stimmt so halbwegs)
[Esraubtmirdenschlaf]
Wenn man, wie gewöhnlich,
char true=1, false=0;
if( (1==1) == true)
verwendet, würde das auch mit
char true=0b10000000, false=0;
if( (1==1) == true)
funktionieren?
(1==1) ist das GCC-True. Egal wie, dieses True ist in seiner Logikeinheit fest gespeichert. Welcher Datentype würde für mein eigenes true passen? Sind vielleicht deshalb die booleschen Variablen in GCC nicht definiert?
Ist ja lustig, so trifft man sich wieder:
https://www.roboternetz.de/community...t-Boolean-in-C
"...da "false" theoretisch nicht Null sein muss." *heul*
´Programmiersprache C/C++
6.2.5. Datentyp bool
C sieht keinen eigenen Datentyp für logische Werte vor.
Logische Ausdrücke und Vergleiche liefern stattdessen einen Wert vom Typ int:
0 "Falsch" ( false )
sonst "Wahr" ( true )
Diese Eigenschaft ermöglicht in C das Erstellen sehr kompakter Quelltexte.
(Aus http://www.imb-jena.de/~gmueller/kurse/c_c++/c625.html)
Diese Eigenschaft ist Schummeln?
[/Esraubtmirdenschlaf]
Lesezeichen