Mikrocontroller und Digitale Elektronik
›
Thread
const Array deklarieren mit bitweisen Werten
TG
That guy with the array
Gast
19.09.2013 02:41
#3326978
Servus zusammen,
Obwohl ich mich schon etwas an uCs abgenutzt habe, arbeite ich das erste
Mal mit Arrays und stolpere gerade über eine Feinheit. Ich habe ein
Array wie im Bild und wie unten gezeigt in Atmel Studio 6 deklariert,
beim Compilieren schmeißt es mir jedoch den Fehler
'Error 2 invalid suffix "b" on integer constant'
Mit Verweis auf die erste Zeile des Arrays aus. Ich habe die spaces
eingefügt um das ganze etwas übersichtlicher zu gestalten in der Annahme
dass der Compiler diese einfach ignoriert, stimmt das?
Weiß hier jemand netterweise weiter und ist die Deklaration so stimmig?
Anbei das Ganze noch als Code zum Testen: 1 static const __flash uint16_t numtable [] = { //teilt den zu schreibenden Zahlen/Buchstaben auf dem Display die Segmente zu
2 // | \ Segment| a | b | c | d | e | f | g1 | g2 | h | i | j | k | l | m |
3 // |Zahl___\_______|____________________________________________________________________________________________________________________________|
4 /* 0 */ 0 b 1 1 1 1 1 1 0 0 0 0 0 0 0 0 ,
5 /* 1 */ 0 b 0 1 1 0 0 0 0 0 0 0 1 0 0 0 ,
6 /* 2 */ 0 b 1 1 0 1 1 0 1 1 0 0 0 0 0 0 ,
7 /* 3 */ 0 b 1 1 1 1 0 0 0 1 0 0 0 0 0 0 ,
8 /* 4 */ 0 b 0 1 1 0 0 1 1 1 0 0 0 0 0 0 ,
9 /* 5 */ 0 b 1 0 1 1 0 1 1 1 0 0 0 0 0 0 ,
10 /* 6 */ 0 b 1 0 1 1 1 1 1 1 0 0 0 0 0 0 ,
11 /* 7 */ 0 b 1 1 1 0 0 1 0 0 0 0 0 0 0 0 ,
12 /* 8 */ 0 b 1 1 1 1 1 1 1 1 0 0 0 0 0 0 ,
13 /* 9 */ 0 b 1 1 1 1 0 1 1 1 0 0 0 0 0 0
14 //{0b 0 0 0 0 0 0 0 0 0 0 0 0 0 0 },
15 };
K
Kindergärtner
Gast
19.09.2013 02:47
#3326980
That guy with the array schrieb:
> in der Annahme
> dass der Compiler diese einfach ignoriert, stimmt das?
Nein, Integer (Ganzzahlen) dürfen keine Leerzeichen enthalten. In die
Binärzahl 0b11111100000000 darfst du nicht einfach Leerzeichen einfügen.
Die Binärschreibweise mit 0b... ist übrigens außerdem nicht
C-Standard-Konform, sondern eine GCC-Erweiterung.
TG
That guy with the array
Gast
19.09.2013 11:12
#3327177
Vielen Dank, das hat geholfen!
ich habe mich jetzt für folgende Lösung entschieden: 1 static const __flash uint16_t numtable [] = { //teilt den zu schreibenden Zahlen/Buchstaben auf dem Display die Segmente zu
2 // | \ Segment| a | b | c | d | e | f | g1 | g2 | h | i | j | k | l | m |
3 // |Zahl___\_______|____________________________________________________________________________________________________________________________|
4 /* 0 */ ( 1 << 13 ) | ( 1 << 12 ) | ( 1 << 11 ) | ( 1 << 10 ) | ( 1 << 9 ) | ( 1 << 8 ) | ( 0 << 7 ) | ( 0 << 6 ) | ( 0 << 5 ) | ( 0 << 4 ) | ( 0 << 3 ) | ( 0 << 2 ) | ( 0 << 1 ) | ( 0 << 0 ),
5 /* 1 */ ( 0 << 13 ) | ( 1 << 12 ) | ( 1 << 11 ) | ( 0 << 10 ) | ( 0 << 9 ) | ( 0 << 8 ) | ( 0 << 7 ) | ( 0 << 6 ) | ( 0 << 5 ) | ( 0 << 4 ) | ( 1 << 3 ) | ( 0 << 2 ) | ( 0 << 1 ) | ( 0 << 0 ),
6 /* 2 */ ( 1 << 13 ) | ( 1 << 12 ) | ( 0 << 11 ) | ( 1 << 10 ) | ( 1 << 9 ) | ( 0 << 8 ) | ( 1 << 7 ) | ( 1 << 6 ) | ( 0 << 5 ) | ( 0 << 4 ) | ( 0 << 3 ) | ( 0 << 2 ) | ( 0 << 1 ) | ( 0 << 0 ),
7 /* 3 */ ( 1 << 13 ) | ( 1 << 12 ) | ( 1 << 11 ) | ( 1 << 10 ) | ( 0 << 9 ) | ( 0 << 8 ) | ( 0 << 7 ) | ( 1 << 6 ) | ( 0 << 5 ) | ( 0 << 4 ) | ( 0 << 3 ) | ( 0 << 2 ) | ( 0 << 1 ) | ( 0 << 0 ),
8 /* 4 */ ( 0 << 13 ) | ( 1 << 12 ) | ( 1 << 11 ) | ( 0 << 10 ) | ( 0 << 9 ) | ( 1 << 8 ) | ( 1 << 7 ) | ( 1 << 6 ) | ( 0 << 5 ) | ( 0 << 4 ) | ( 0 << 3 ) | ( 0 << 2 ) | ( 0 << 1 ) | ( 0 << 0 ),
9 /* 5 */ ( 1 << 13 ) | ( 0 << 12 ) | ( 1 << 11 ) | ( 1 << 10 ) | ( 0 << 9 ) | ( 1 << 8 ) | ( 1 << 7 ) | ( 1 << 6 ) | ( 0 << 5 ) | ( 0 << 4 ) | ( 0 << 3 ) | ( 0 << 2 ) | ( 0 << 1 ) | ( 0 << 0 ),
10 /* 6 */ ( 1 << 13 ) | ( 0 << 12 ) | ( 1 << 11 ) | ( 1 << 10 ) | ( 1 << 9 ) | ( 1 << 8 ) | ( 1 << 7 ) | ( 1 << 6 ) | ( 0 << 5 ) | ( 0 << 4 ) | ( 0 << 3 ) | ( 0 << 2 ) | ( 0 << 1 ) | ( 0 << 0 ),
11 /* 7 */ ( 1 << 13 ) | ( 1 << 12 ) | ( 1 << 11 ) | ( 0 << 10 ) | ( 0 << 9 ) | ( 1 << 8 ) | ( 0 << 7 ) | ( 0 << 6 ) | ( 0 << 5 ) | ( 0 << 4 ) | ( 0 << 3 ) | ( 0 << 2 ) | ( 0 << 1 ) | ( 0 << 0 ),
12 /* 8 */ ( 1 << 13 ) | ( 1 << 12 ) | ( 1 << 11 ) | ( 1 << 10 ) | ( 1 << 9 ) | ( 1 << 8 ) | ( 1 << 7 ) | ( 1 << 6 ) | ( 0 << 5 ) | ( 0 << 4 ) | ( 0 << 3 ) | ( 0 << 2 ) | ( 0 << 1 ) | ( 0 << 0 ),
13 /* 9 */ ( 1 << 13 ) | ( 1 << 12 ) | ( 1 << 11 ) | ( 1 << 10 ) | ( 0 << 9 ) | ( 1 << 8 ) | ( 1 << 7 ) | ( 1 << 6 ) | ( 0 << 5 ) | ( 0 << 4 ) | ( 0 << 3 ) | ( 0 << 2 ) | ( 0 << 1 ) | ( 0 << 0 )
14 // (0<<13)| (0<<12)| (0<<11)| (0<<10)| (0<< 9)| (0<< 8)| (0<< 7)| (0<< 6)| (0<< 5)| (0<< 4)| (0<< 3)| (0<< 2)| (0<< 1)| (0<< 0)
15 };
YX
Yalu X.
(yalu)
Moderator
19.09.2013 13:01
#3327348
Wie wär's hiermit:
1 #define BITS(b13,b12,b11,b10,b9,b8,b7,b6,b5,b4,b3,b2,b1,b0) \
2 (b13<<13|b12<<12|b11<<11|b10<<10|b9<<9|b8<<8|b7<<7|b6<<6|b5<<5|b4<<4|b3<<3|b2<<2|b1<<1|b0)
3
4 static const __flash uint16_t numtable [] = { //teilt den zu schreibenden Zahlen/Buchstaben auf dem Display die Segmente zu
5 // | \ Segment| a | b | c | d | e | f | g1 | g2 | h | i | j | k | l | m |
6 // |_Zahl_\_______|___________________________________________________________________________________|
7 /* 0 */ BITS ( 1 , 1 , 1 , 1 , 1 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ),
8 /* 1 */ BITS ( 0 , 1 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 0 , 0 , 0 ),
9 /* 2 */ BITS ( 1 , 1 , 0 , 1 , 1 , 0 , 1 , 1 , 0 , 0 , 0 , 0 , 0 , 0 ),
10 /* 3 */ BITS ( 1 , 1 , 1 , 1 , 0 , 0 , 0 , 1 , 0 , 0 , 0 , 0 , 0 , 0 ),
11 /* 4 */ BITS ( 0 , 1 , 1 , 0 , 0 , 1 , 1 , 1 , 0 , 0 , 0 , 0 , 0 , 0 ),
12 /* 5 */ BITS ( 1 , 0 , 1 , 1 , 0 , 1 , 1 , 1 , 0 , 0 , 0 , 0 , 0 , 0 ),
13 /* 6 */ BITS ( 1 , 0 , 1 , 1 , 1 , 1 , 1 , 1 , 0 , 0 , 0 , 0 , 0 , 0 ),
14 /* 7 */ BITS ( 1 , 1 , 1 , 0 , 0 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ),
15 /* 8 */ BITS ( 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 0 , 0 , 0 , 0 , 0 , 0 ),
16 /* 9 */ BITS ( 1 , 1 , 1 , 1 , 0 , 1 , 1 , 1 , 0 , 0 , 0 , 0 , 0 , 0 )
17 };
TG
That guy with the array
Gast
19.09.2013 14:49
#3327544
Super, tolle Idee mit dem Makro und auch gleich fertig formatiert, bin
begeister, vielen Dank!!
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.
Noch kein Account?
Die Registrierung ist kostenlos und dauert nur eine Minute.
Jetzt registrieren