String placement – Zilog Z8F0130 User Manual
Page 228
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: