Zilog Z8F0130 User Manual

Page 233

Advertising
background image

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

section on page

247 and the

Start-Up Files

section on page 243.

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.

Advertising