const Array deklarieren mit bitweisen Werten

Gast #3326978
Lesenswert?

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   */     0b   1        1        1        1        1        1        0        0        0        0        0        0        0        0    ,
5
    /* 1   */     0b   0        1        1        0        0        0        0        0        0        0        1        0        0        0    , 
6
    /* 2   */     0b   1        1        0        1        1        0        1        1        0        0        0        0        0        0    ,  
7
    /* 3   */     0b   1        1        1        1        0        0        0        1        0        0        0        0        0        0    ,      
8
    /* 4   */     0b   0        1        1        0        0        1        1        1        0        0        0        0        0        0    ,  
9
    /* 5   */     0b   1        0        1        1        0        1        1        1        0        0        0        0        0        0    ,  
10
    /* 6   */     0b   1        0        1        1        1        1        1        1        0        0        0        0        0        0    ,  
11
    /* 7   */     0b   1        1        1        0        0        1        0        0        0        0        0        0        0        0    , 
12
    /* 8   */     0b   1        1        1        1        1        1        1        1        0        0        0        0        0        0    ,  
13
    /* 9   */     0b   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
  };
Angehängte Dateien:
Gast #3326980
Lesenswert?

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.
Gast #3327177
Lesenswert?

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
  };
Moderator #3327348
Lesenswert?

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
};

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren