www.mikrocontroller.net

Forum: Compiler & IDEs Externes PROGMEM-Array


Autor: Paul Wilhelm (mosfetkiller)
Datum:

Bewertung
0 lesenswert
nicht 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:
unsigned char SINE[50][128] PROGMEM = { {...}, {...}, ... };

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

Obiger Code produziert leider folgende Fehlermeldung:
tables.h:9: Fehler: expected »=«, »,«, »;«, »asm« or »__attribute__« before »PROGMEM«
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.

Autor: rogger (Gast)
Datum:

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

Autor: Paul Wilhelm (mosfetkiller)
Datum:

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

Gruß,
Paul.

Autor: rogger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Paul Wilhelm schrieb:
> Der Code oben ist nur ein
> Auszug.

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

Autor: Paul Wilhelm (mosfetkiller)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Paul Wilhelm (mosfetkiller)
Datum:

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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.