Forum: Compiler & IDEs Externes PROGMEM-Array


von Paul W. (mosfetkiller)


Lesenswert?

Hallo,

ich habe eine große Tabelle, die ich in eine externe .C-Datei auslagern 
möchte. Diese ist zu groß für den SRAM, muss also per PROGMEM-Attribut 
im Flash abgelegt werden.

tables.c:
1
unsigned char SINE[50][128] PROGMEM = { {...}, {...}, ... };

tables.h:
1
extern unsigned char SINE[50][128] PROGMEM;

Obiger Code produziert leider folgende Fehlermeldung:
1
tables.h:9: Fehler: expected »=«, »,«, »;«, »asm« or »__attribute__« before »PROGMEM«
2
tables.c:21: Fehler: expected »=«, »,«, »;«, »asm« or »__attribute__« before »PROGMEM«

(Entferne ich die beiden Attribute PROGMEM, so kompiliert der Code 
einwandfrei...aber damit kann ich natürlich nichts anfangen.)

Was muss ich ändern, damit der Code kompiliert?

Gruß,
Paul.

von rogger (Gast)


Lesenswert?

so ganz ohne Code würde ich spontan auf ein vergessenes
#include <avr/pgmspace.h> tippen

von Paul W. (mosfetkiller)


Lesenswert?

meh. Nein, das Include habe ich schon drin. ;) Der Code oben ist nur ein 
Auszug.

Gruß,
Paul.

von rogger (Gast)


Lesenswert?

Paul Wilhelm schrieb:
> Der Code oben ist nur ein
> Auszug.

genau das ist ja das Problem... So kann dir wahrscheinlich keiner 
helfen.

von Paul W. (mosfetkiller)


Lesenswert?

Ich sag doch, es kompiliert fehlerfrei, wenn ich PROGMEM weglasse.

Wenn ich den Inhalt aus tables.c komplett in meine main.c kopiere und 
den Inhalt der tables.h auskommentiere, so kompiliert es auch fehlerfrei 
(mit PROGMEM).

Die main.c greift auf das Array per pgm_read_byte() zu, mehr nicht.

Es geht nur darum, das Array SINE in die externe Datei tables.c 
auszulagern.
Und das geht bei mir bislang nur mit Arrays ohne PROGMEM-Attribut. Ich 
möchte es aber mit PROGMEM. Jemand eine Idee?

von (prx) A. K. (prx)


Lesenswert?

Die oben gezeigte Fehlermeldung entsteht exakt dann, wenn PROGMEM nicht 
definiert ist. PROGMEM wird im Include-File als Präprozessor-Makro 
definiert und wenn der Parser wie oben in der Fehlermeldung erkennbar 
diesen Namen sieht, dann kann es an dieser Stelle kein Makro sein.

Da kannst du jetzt zigmal beteuern, das sei nicht so. Überzeugender wäre 
der Quellcode eines Testbeispiels, in dem das Problem auftritt.

von Paul W. (mosfetkiller)


Lesenswert?

d'oh. Typischer Fall von PEBKAC...
Dateisalat. Waren die Includes. Danke an alle Beteiligten!

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.