Externes PROGMEM-Array

OP #1930502
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
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
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

Eine eigene Frage? Dieser Thread ist über 16 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.