Zilog Z8F0130 User Manual
Page 233
UM013037-1212
Program RAM Support (Z8 Encore! XP 16K Series
Zilog Developer Studio II – Z8 Encore!
User Manual
209
The compiler provides a pragma (
#pragma PRAM
) for this purpose. This pragma has
function scope and can only be used just before a function definition. The code for such
functions is then placed in a special segment called PRAMSEG.
For example:
#pragma PRAM
int func(void)
{
return 2;
}
The code for the
func
function is placed in the
PRAMSEG
segment. Multiple functions in a
program can be designated as PRAM functions by preceding each of them with
#pragma
PRAM
. A copy of the PRAMSEG is kept in ROM and copied to PRAM by the C start-up
module. For more details, see the
Linker Command Files for C Programs
Only the code for the function designated as PRAM is placed by the compiler in PRAM-
SEG. Any functions called by such function are not automatically placed by the compiler
in PRAMSEG.
For example:
#pragma PRAM
int func(void)
{
return anotherfunc();
}
In the preceding example, only the code for
func
is placed in PRAMSEG. The code for
anotherfunc
is placed in a segment in ROM. To place
anotherfunc
in PRAM, you
must precede it with
#pragma PRAM
also.
For example:
#pragma PRAM
int anotherfunc(void)
{
return 2;
}
The same is true for any library functions called from such functions. If you want to avoid
having these functions executed from Flash (which might partially defeat the power-sav-
ing goal of placing the functions that call them in PRAM), you must include the source for
the library function in your project and precede the library function with
#pragma PRAM
if it is a C function or if it is an assembly function, change the segment of the function to
PRAMSEG using the
segment PRAMSEG
assembler directive.