Forum: Compiler & IDEs compiler error bei mehrdimensionalen Array


von B. Schuster (Gast)


Lesenswert?

Moin
Ich will mit meinem ATmega128 auf einem GLCD große Buchstaben
darstellen(softfonts). Sie sind im Flash der MC als zweidimensionales
Array abgelegt:
//////////////////////////////////
#include <avr/pgmspace.h>

const unsigned char fontsbig[104][48] PROGMEM = {
{   0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,    //
ASCII = 032  SPACE
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
{   0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x00,0x60,0x00,0x60,0x00,    //
ASCII = 033  !
    0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,
...
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
//////////////////////////////////

Zugreifen von der Grafikroutine möchte ich so
//////////////////////////////////
currentbyte=pgm_read_byte(&fontsbig[sign][i]);
//////////////////////////////////

Doch an der Stelle meckert mein Compiler(avr-gcc (GCC) 3.4.3) und
schmeißt mir diese Fehlermeldung vor die Füße:
//////////////////////////////////
lcd_fonts.c:58: error: invalid use of array with unspecified bounds
//////////////////////////////////

Nach meinem Wissen hab ich hier nicht verkehrt gemacht, bei
eindimensionalen Arrays klappt es auf diese Weise ja auch.
Wo ist hier der Haken. Oder ist es gar ein Compilerfehler?

Danke Schuddi

von Karl heinz B. (heinzi)


Lesenswert?

Zeig doch mal mehr Source Code.
Aus dem was Du bisher preisgegeben hast, kann man noch nicht
viel folgern.

Einschub: Warum denken immer alle gleich an Compilerfehler?
Klar haben Compiler auch Fehler, sind auch nur Programme.
Aber 99.9% aller Fehler sind Programmierer-Fehler und keine
Compilerfehler. Du kannst davon ausgehen, dass wenn ein Compiler
einen Fehler hat, dann steckt der irgendwo in 'esoterischen'
Bereichen der Sprache. Dass ein Durchscnittsprogrammierer einen
Compilerfehler findet ist weniger wahrscheinlich wie 6 Richtige
im Lotto.

von Karl heinz B. (heinzi)


Lesenswert?

Insbesondere sind alle Codestellen interessant wo
fontsbig im Zusammenhang mit [] vorkommt.

von B. Schuster (Gast)


Lesenswert?

Ne, is auch kein Compilerfehler. Ich muß da ganze anders deklarieren.

"const unsigned char fontsbig[104][48] PROGMEM" ist in der Datei
"fontsbig.c" abgelegt und in dem dazugehörigen Header mit "extern
const unsigned char fontsbig[][] PROGMEM;" für andere c-Dateien
zugänglich gemacht.
Der Aufruf "currentbyte=pgm_read_byte(&fontsbig[sign][i]);" findet in
der Datei "lcd_fonts.c" statt.
Hier tritt der Fehler auf.

Wenn ich die Daten von "const unsigned char fontsbig[104][48]
PROGMEM" in der Datei "lcd_fonts.c" ablege, von woaus auch der
Aufruf kommt, haut alles hin.

Wie kann ich auf die Daten in der anderen Datei trotzdem zugreifen?

von Irgwer (Gast)


Lesenswert?

Bei der Deklaration von externen Arrays darf man nur den ersten Index
weglassen.

Versuchs mal mit:

extern const unsigned char fontsbig[][48] PROGMEM;

von B. Schuster (Gast)


Lesenswert?

Super, es läuft.
Danke Irgwer

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.