von
That guy with the array (Gast)
19.09.2013 02:41
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 };
von
Kindergärtner (Gast)
19.09.2013 02:47
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.
von
That guy with the array (Gast)
19.09.2013 11:12
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 };
von
Yalu X.
(yalu )
(Moderator )
19.09.2013 13:01
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 };
von
That guy with the array (Gast)
19.09.2013 14:49
Super, tolle Idee mit dem Makro und auch gleich fertig formatiert, bin
begeister, vielen Dank!!
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.