4 critical sections, 5 semaphores using bit b,(hl) – Jameco Electronics Rabbit 3000 User Manual

Page 56

Advertising
background image

User’s Manual

47

The privileged instructions to manipulate the IP register are listed below.

IPSET 0 ; shift IP left and set priority 00 in bits 1,0

IPSET 1

IPSET 2

IPSET 3

IPRES ; rotate IP right 2 bits, restoring previous priority

RETI ; pops IP from stack and then pops return address

POP IP ; pop IP register from stack

3.5.4 Critical Sections

Certain library routines may need to disable interrupts during a critical section of code.
Generally these routines are only legal to call if the processor priority is either 0 or 1. A
priority higher than this implies custom hand-coded assembly routines that do not call
general-purpose libraries. The following code can be used to disable priority 1 interrupts.

IPSET 1 ; save previous priority and set priority to 1

....critical section...

IPRES ; restore previous priority

This code is safe if it is known that the code in the critical section does not have an embed-
ded critical section. If this code is nested, there is the danger of overflowing the IP register.
A different version that can be nested is the following.

PUSH IP

IPSET 1 ; save previous priority and set priority to 1

....critical section...

POP IP ; restore previous priority

The following instructions are also privileged.

LD A,xpc

LD xpc,a

BIT B,(HL)

3.5.5 Semaphores Using Bit B,(HL)

The

bit B,(HL)

instruction is privileged to allow the construction of a semaphore by the

following code.

BIT B,(HL) ; test a bit in the byte at (HL)

SET B,(HL) ; make sure bit set, does not affect flag

; if zero flag set the semaphore belongs to us;

; otherwise someone else has it

A semaphore is used to gain control of a resource that can only belong to one task or pro-
gram at a time. This is done by testing a bit to see if it is on, in which case someone else is
using the resource, otherwise setting the bit to indicate ownership of the resource. No
interrupt can be allowed between the test of the bit and the setting of the bit as this might
allow two different program to both think they own the resource.

Advertising
This manual is related to the following products: