|
From: | Roland Zitzke |
Subject: | [avr-gcc-list] read Access to all of the Atmega 128 flash memory |
Date: | Sun, 2 Jun 2002 10:21:17 +0200 |
Hi,
I am developing a project on an atmega128 with
about 16k of code and a lot of (80 k) audio sample data which will reside in
flash memory.
I would preferably convert this data to C
compatible code and let gcc and the linker decide on the actual location of
these variables.
Code will look like:
#include
#include <progmem.h>
unsigned char PROGMEM audio1 [] =
{
0x80, 0x95, 0x3f, ..., 0x4c
};
I will get about 15 variables like this each
containing about 5 k of data.
The compiler has no choice but to put samples in
both lower and upper memory where lower memory is below 64k.
Now, how do I access bytes from these variables
correctly in gcc?
I see in pgmspace.h (which gets included by
progmem.h):
#if 0 #define PRG_RDB(addr) __lpm_inline((unsigned short)(addr)) #else #define PRG_RDB(addr) _LPM((unsigned short)(addr)) #endif but to my understanding the LPM instruction can only handle lower memory? (or am I wrong?) There is the ELPM instruction but it requires of cause an address to be longer than 16 bit. How do I obtain this address from within my gcc code for one of my variables? Any hints? Thanks and regards Roland |
[Prev in Thread] | Current Thread | [Next in Thread] |