Hallo allemaal,

Ik heb een probleem met het implementeren van een tabel in het flash geheugen van een AVR.

Ik programmeer in C en wil graag een tabel maken die 8 * 40 bytes groot is, dit past niet in RAM omdat een tiny2313 maar 128 bytes heeft...

Hier onder is een voorbeeld van hoe ik de tabel opbouw maar deze wordt automatisch in ram geplaatst...

Is er een manier om dit eenvoudig in flash te zetten?

Alvast bedankt voor het meedenken!

char cBiphase[2][40]={

{118, 99, 80, 62, 46, 32, 20, 11, 4, 1, 1, 4, 10, 20, 32, 46, 62, 80, 98,
118, 138, 158, 176, 194, 210, 224, 236, 246, 252, 255, 255, 252, 245, 236,
224, 210, 194, 176, 157, 138},

{118, 99, 80, 62, 46, 32, 20, 11, 4, 1, 1, 4, 10, 20, 32, 46, 63, 82, 102,
122, 142, 162, 180, 197, 211, 223, 233, 240, 243, 244, 243, 239, 234, 228,
221, 214, 208, 203, 200, 198}
};

is afhankelijk van de gebruikte compiler.
Het makkelijkst gaat het met de IAR compiler, dan is het gewoon _flash ervoor zetten bij de decaratie.
Bij GCC vindt ik persoonlijk nogal omslachtig, maar kijk dan eens naar het PROGMEM keyword.

Heb het probleem inmiddels opgelost...

Oude situatie (vanuit SRAM)

int iSample;

const Biphase[2] = {
118, 230
};

iSample = Biphase[1];

Nieuwe situatie (vanuit Program flash)

int iSample;
const Biphase[2] PROGMEM = {
118, 230
};

iSample = pgm_read_word( &Biphase[1] );

Als voorbeeld maar 2 bytes maar mijn cosine tabel heeft er 320