String placement – Zilog Z8F0130 User Manual

Page 228

Advertising
background image

Using the ANSI C-Compiler

UM013037-1212

204

Zilog Developer Studio II – Z8 Encore!
User Manual

#pragma _monitor

void my_kernel_fn (void)

{ … }

This feature does not work properly for functions that are also declared as interrupt service
routines. Avoid combining the use of the

_monitor

and interrupt qualifiers for the same

function.

The

#pragma _monitor

declaration has function scope and will affect the next function

definition (as opposed to a function declaration, that is, a function prototype) that the com-
piler encounters. For this reason, quite unexpected results can ensue if this pragma is used
in a function prototype, especially when function declarations and definitions are grouped
separately as is common practice. In the case of

_monitor

, these results might cause seri-

ous problems in your application by disabling interrupts in a function in which this was not
your intention. Therefore, it is recommended that you avoid using this

#pragma

in func-

tion prototypes.

String Placement

When string constants (literals) such as

"mystring"

are used in a C program, they are

stored by the C-Compiler in the RData address space for the small memory model and in
the EData address space for the large memory model. However, sometimes this default
placement of string constants does not allow you adequate control over your memory use.
Therefore, language extensions are provided to give you more control over string place-
ment:

N"mystring"

This defines a

near

string constant. The string is stored in RData. The address of the

string is a

near

pointer.

F"mystring"

This defines a far string constant. The string is stored in EData. The address of the
string is a far pointer.

R"mystring"

This defines a

rom

string constant. The string is stored in ROM. The address of the

string is a

rom

pointer.

The following is an example of string placement:

#include <sio.h>

void funcn (near char *str)

{

while (*str)

putch (*str++);

Note:

Advertising