beautypg.com

Monitor function support, Set_vector intrinsic function, At keyword – Zilog Z8F0130 User Manual

Page 227

background image

UM013037-1212

Monitor Function Support

Zilog Developer Studio II – Z8 Encore!

User Manual

203

SET_VECTOR Intrinsic Function

SET_VECTOR can be used to specify the address of an interrupt handler for an interrupt
vector. Because the interrupt vectors of the Z8 Encore! microcontroller are usually in
ROM, they cannot be modified at run time. The SET_VECTOR function works by switch-
ing to a special segment and placing the address of the interrupt handler in the vector table.
No executable code is generated for this statement.

The following is the

SET_VECTOR

intrinsic function prototype:

intrinsic void SET_VECTOR(int

vectnum

,void (*hndlr)(void));

An example of the use of

SET_VECTOR

is as follows:

#include

extern void interrupt isr_timer0(void);

void main(void)

{

SET_VECTOR(TIMER0, isr_timer0);

}

See the

SET_VECTOR

section on page 237 for supported values of vectnum.

_At Keyword

The

_At

keyword, described in the

Placement Directives

section on page 206, can be used

in conjunction with the

interrupt

keyword to associate an interrupt handler with an

interrupt vector. Because the interrupt vectors of the Z8 Encore! microcontroller are usu-
ally in ROM, only one handler can be associated with an interrupt vector.

For example:

#include

void interrupt isr_timer0(void) _At TIMER0

{

}

Monitor Function Support

A special function qualifier type is provided to support users who are interested in creating
a real-time operating system (RTOS) kernel for the Z8 Encore!. Functions defined with
this qualifier are treated differently from other functions at the point of function entry and
function exit. At function entry, the global interrupt status is saved on the stack and inter-
rupts are then disabled, before any other action is taken including the setup of the normal
stack frame, if any. Upon exit from a monitor function, the last thing that happens before
returning from the function is that the previous interrupt state is restored from the stack.
These operations are useful or perhaps even critical in designing an RTOS and also pro-
vide the fastest possible way of disabling interrupts in a critical section of kernel code.

To define a function of this type, use the

_monitor

pragma, as in the following code: