Forum: Mikrocontroller und Digitale Elektronik Problem bei Struct


von Melow (Gast)


Lesenswert?

Hallo,

Ich möchte folgenden Code in eine *.h Datei packen, bekomme aber immer 
einen Error:
1
#ifndef font_6x8_h
2
#define font_6x8_h
3
4
5
6
7
struct font_6x8
8
{
9
                
10
  unsigned char font_6x8_hoehe 8;
11
  unsigned char font_6x8_breite 6;
12
};
13
14
15
#endif

Der Error ist:
../Font_6x8.h:10: error: expected ':', ',', ';', '}' or '__attribute__' 
before numeric constant


Kann mir da jemand weiterhelfen? Das ganze wird mit AVRStudio erstellt.

von Kali (Gast)


Lesenswert?

Am besten liest Du mal ein C-Buch.

Aber in der Zwischenzeit:
1
struct font_6x8
2
{
3
                
4
  unsigned char font_6x8_hoehe 8;
5
  unsigned char font_6x8_breite 6;
6
};

Ist erstmal, abgesehen von dem syntaktischen Fehler mit den Zahlen nur 
eine Struktur-Deklaration. Nichts sonst. Es wird kein Speicherplatz 
reserviert. Das ist, falls das letztlich eine Initalisierung sein soll, 
Dein zweiter Fehler.

Also:
1
struct font_6x8
2
{
3
                
4
  unsigned char font_6x8_hoehe;
5
  unsigned char font_6x8_breite;
6
};

ist erstmal eine korrekte Deklaration.

Nun, definieren wir noch eine Variable mit dieser Struktur.
1
struct font_6x8
2
{
3
                
4
  unsigned char font_6x8_hoehe;
5
  unsigned char font_6x8_breite;
6
} StrukturVariable;

Und zu guter letzt initialisieren wir sie:
1
struct font_6x8
2
{
3
                
4
  unsigned char font_6x8_hoehe;
5
  unsigned char font_6x8_breite;
6
} StrukturVariable = { 8, 6 };

So. Und wenn Du das ganze nochmal nachliest, dann wäre mir das sehr 
angenehm.

von Melow (Gast)


Lesenswert?

Stimmt so ging das, hatte ich schon wieder vergessen aber vielen Dank 
für die ausführliche Erklärung:)

Jetzt stehe ich aber vor einem anderen Problem, und zwar habe ich mir 
meine Schrift erstellt wie folgt:
1
static unsigned char font_6x8[] PROGMEM =   {       
2
        0x06                            //Breite
3
        0x08                            //Höhe
4
        0x00,0x44,0x7E,0x7E,0x40,0x00,  //1
5
        0x00,0x44,0x62,0x52,0x4C,0x00,  //2
6
        0x00,0x24,0x42,0x5A,0x24,0x00,  //3
7
        0x00,0x1E,0x10,0x78,0x10,0x00,  //4
8
        0x00,0x4E,0x4C,0x4C,0x32,0x00,  //5
9
        };

Je nach Schrift die ich verwenden möchte, möchte ich einer Funktion 
einen anderen Parameter übergeben.
Kann ich das mit Pointern realisieren?
Meine Version sieht bis jetzt so aus:
1
void put_char(unsigned char print_char, unsigned char xpos, unsigned char ypos,unsigned char *font)
2
{
3
  unsigned char breite;
4
  unsigned char hoehe;
5
  
6
  breite = font[0];
7
  hoehe = font[1];
8
}
Und die Funktion wird wie folgt aufgerufen:
1
put_char('2',0,16,font_6x8);

Aber leider stimmen die Werte für breite und höhe dann nicht.
Weiß auch leider nicht was ich ändern muss, hab schon viel ausprobiert:/

von Christopher G. (cbg)


Lesenswert?

Das liegt am PROGMEM. Hast du dir durchgelesen, was das bewirkt? Das 
schreibt man ja nicht aus Spass hin wenn man nicht weiß, dass es das 
überhaupt gibt.

Der Compiler sollte auch schreien.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.