Externes PROGMEM-Array

OP #1930502
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.
OP #1930523
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?
#1930528
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.

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