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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.