Arraygröße AVR--GCC

Gast #1472167
Lesenswert?

Hallo Forum,

ich möchte mit einem AVR Mega128 einen Sound abspielen und habe diesen 
als PCM array im Flash definiert. (AVR-Studio mit AVR-GCC)

Funktioniert auch alles gut bis zu einer gewissen Array-Größe.
Ein 32kB Array hat noch funktioniert, aber jetzt bei ca 80kB meckert der 
Compiler "error: size of array is too large"

Gibt's da irgendwo eine maximale Array-Größe zu beachten oder ggf. zu 
konfigurieren ?? Wie definiere ich so ein großes Array für den AVR ??

#include <avr/pgmspace.h>
//Sound Daten
const unsigned char sound1[] PROGMEM = {
0xA7, 0x54, 0x71, 0x92, 0x8B, 0x88, 0x7B, 0x59, 0x88, 0x84, 0x82, 0x86, 
0x7E, 0x83, 0xA4, 0x41, 0xA0, 0x66, 0x73, 0xAC, 0x66, 0x7B, 0x79, 0x9E,
:
:
:
0x71, 0x7E, 0x4C, 0x49, 0x53, 0x54, 0x04, 0x00,
0x00, 0x00, 0x49, 0x4E, 0x46, 0x4F
};

Danke vorab - Bj
#1472686
Lesenswert?

2-dimensionales Array wird wohl auch nicht helfen, wohl aber ein Array 
aus Pointern auf ein Array. Also beispielsweise:

char array0[16384] PROGMEM = ...;
char array1[16384] PROGMEM = ...;
char array2[16384] PROGMEM = ...;
char array3[16384] PROGMEM = ...;
char *array[4] = { array0, array1, array2, array 3 };

Wenn wie hier array selbst nicht im progmem ist wird der Zugriff 
einfach:
  pgm_read_byte(&array[i/16384][i%16384])
Gast #1472791
Lesenswert?

Das mit dem 2-dimensionalen Array wird wohl nicht klappen. Hatte schon 
versucht statt 32k Bytes mal 32k Integer bzw. Long anzulegen. Sobald das 
gesamte Array 32k Größe übersteigt kommt die Fehlermeldung.

Bleibt nur die Lösung mehrere Arrays nacheinander im Flash abzulegen.
Da der Zugriff auf die Array im Interrupt stattfinden will ich die 
Division bei der Pointer-Array Lösung eigentlich nicht umsetzen.

Danke an alle !!

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