home *** CD-ROM | disk | FTP | other *** search
Text File | 1993-04-28 | 122.5 KB | 3,829 lines |
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- MCX11
-
- MicroController eXecutive
- for the
- Motorola MC68HC11
-
- Version 1.3
-
-
-
-
- by
-
- A.T. Barrett & Associates
- 11501 Chimney Rock
- Houston, Texas 77035
- (713)728-9688
-
-
- April 1990
-
-
- Support Contact:
-
- Mike Wood
- M/S OE319
- Motorola, Inc.
- 6501 William Cannon Drive West
- Austin, Texas 78735
- (512)891-2717
-
-
-
- Neither Motorola, Inc. nor A.T. Barrett & Associates makes
- any warranty, expressed or implied, with regard to this
- material including but not limited to merchantability or
- fitness for a given purpose. The information in this
- document is subject to change without notice and neither
- Motorola, Inc. or A.T. Barrett & Associates assumes any
- responsibility for any errors which may appear herein. Nor
- shall Motorola, Inc. or A.T. Barrett & Associates bear any
- liability for use of this material with respect
- compensatory, special, incidental, consequential, or
- exemplary damages.
-
-
-
-
-
-
-
-
-
-
-
- MCX11 - MicroController eXecutive for the 68HC11
-
-
- TABLE OF CONTENTS
-
- Section 1 Introduction Page
-
- 1.1 Background and Features........................... 1-1
- 1.2 MCX11 as a Software Component..................... 1-1
- 1.3 Target Environment................................ 1-2
- 1.4 Development Environment........................... 1-2
- 1.5 Manual Format..................................... 1-2
-
- Section 2 MCX11 Functional Overview
-
- 2.1 What Is MCX11..................................... 2-1
- 2.2 Tasks............................................. 2-2
- 2.3 Multitasking...................................... 2-2
- 2.4 Priority and Scheduling........................... 2-2
- 2.5 Intertask Communication and Synchronization....... 2-3
- 2.6 Time based Functions.............................. 2-4
- 2.7 Interrupt Service................................. 2-4
-
- Section 3 MCX11 Control & Data Structures
-
- 3.1 Tasks.............................................. 3-1
- 3.1.1 Task Identifier & Priority....................... 3-1
- 3.1.2 Task State Table................................. 3-2
- 3.1.3 Stack............................................ 3-3
- 3.2 Semaphores........................................ 3-3
- 3.3 Messages and Mailboxes............................ 3-5
- 3.4 Queues............................................ 3-7
- 3.5 Timers............................................. 3-8
-
- Section 4 Executive Service Requests (ESRs)
-
- 4.1 Purpose........................................... 4-1
- 4.2 Semaphore ESRs.................................... 4-1
- 4.3 Message ESRs...................................... 4-2
- 4.4 Queue ESRs........................................ 4-2
- 4.5 Task Control ESRs................................. 4-2
- 4.6 Time Based ESRs................................... 4-2
-
- Section 5 Alphabetical Listing of ESRs
-
- 5.1 .delay. - Delay a Task for a Period of Time..... 5-2
- 5.2 .dequeue. - Get an Entry from a FIFO Queue...... 5-4
- 5.3 .enqueue. - Insert Data into FIFO Queue......... 5-6
- 5.4 .execute. - Execute a Task...................... 5-9
- 5.5 .pend. - Force a Semaphore to a PENDING State.. 5-11
- 5.6 .purge. - Purge a Task's Timers................ 5-12
- 5.7 .receive. - Receive a Message.................. 5-14
- 5.8 .resume. - Resume a Task....................... 5-16
- 5.9 .send. - Send a Message to a Task.............. 5-17
- 5.10 .sendw. - Send a Message and Wait............. 5-19
- 5.11 .signal. - Signal a Semaphore................. 5-20
-
-
-
- Page i
-
-
-
-
-
-
- MCX11 - MicroController eXecutive for the 68HC11
-
-
- TABLE OF CONTENTS
- 5.12 .suspend. - Suspend a Task.................... 5-22
- 5.13 .terminate. - Terminate a Task................ 5-23
- 5.14 .timer. - Start a Timer....................... 5-24
- 5.15 .wait. - Wait on Semaphore.................... 5-26
-
- Section 6 System Configuration
-
- 6.1 System Configuration Concepts..................... 6-1
- 6.2 MCX11 System Table Memory Requirements............ 6-1
-
- Section 7 Device Driver & Interrupts
-
- 7.1 Driver Concepts................................... 7-1
- 7.2 Interrupt Service................................. 7-1
- 7.2.1 Interrupt Processing Variables................... 7-2
- 7.2.2 Interrupt Processing Code........................ 7-4
-
- Section 8 Advanced Topics
-
- 8.1 Other topics...................................... 8-1
-
- Appendix A MCX11 Distributed Source Files............. A-1
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Page ii
-
-
-
-
-
-
- MCX11 - MicroController eXecutive for the 68HC11
-
-
-
- SECTION 1
-
- INTRODUCTION
-
-
- 1.1 BACKGROUND AND FEATURES
-
- MCX11, the MicroController eXecutive for the MC68HC11, is an
- efficient software framework for embedded real-time
- applications using the Motorola MC68HC11 microcontroller.
- Motorola, Inc. makes MCX11 available free of charge via the
- Freeware Bulletin Board System. MCX11 is written in the
- AS11 assembly language which is also available on the
- Motorola Freeware BBS (512/891-3733).
-
- MCX11 provides many features which are designed to support
- real-time applications. These features include:
-
- - Multitasking for up to 126 tasks
- - Pre-emptive task scheduling by priority
- - Intertask communication and synchronization via
- semaphores, messages, and queues.
- - Support for timed operations
- - Fast context switch
- - Very small RAM and ROM requirements
- - Fifteen Executive Service Request functions
-
-
- 1.2 MCX11 AS A SOFTWARE COMPONENT
-
- MCX11 is furnished in AS11 source form and is downloadable
- via a modem connection to the Freeware BBS. In its
- distribution form, it is not executable. It may be
- assembled separately or with the application programs and
- any device drivers peculiar to the application. MCX11 may
- be treated as any other software library. The user need not
- know how MCX11 performs its functions internally. Rather,
- the user need only know what functions of MCX11 to use to
- achieve a desired result. Thus, MCX11 becomes much like a
- large scale integrated circuit component in the hardware.
- Knowledge of what inputs produce what outputs is all that is
- needed to use the "chip" successfully. Unlike a chip,
- however, MCX11 users are provided with the source code to
- the kernel so that they can exercise complete control over
- their applications. With the source code, users may even
- wish to extend the functionality of MCX11 by the addition of
- new services.
-
- This manual is not meant as a tutorial on real-time kernels
- in general. It is intended to explain the "inputs" and
- "outputs" of MCX11 as a software component of the user's
- application. In an effort to assist the user in the
-
-
-
- Copyright (c) 1989 Page 1 - 1 Motorola, Inc.
-
-
-
-
-
-
- MCX11 - MicroController eXecutive for the 68HC11
-
-
-
- successful employment of MCX11, this manual will cover the
- following subjects:
-
- - basic concepts of MCX11 design
- - interfaces to the MCX11 services
- - system generation procedure
- - assembly procedure for MCX11 and application
- source files
- - procedure for merging MCX11 with the application
- object files
-
- 1.3 TARGET ENVIRONMENT
-
- MCX11 is designed to operate in an embedded processor, that
- is, one whose functions are fixed within the application. No
- assumptions are made about the configuration of the target
- system. It is the responsibility of the user to define the
- target environment and to insure that all necessary devices
- have program support. No distinction is made between Single-
- Chip Operating mode or Expanded Multiplexed Operating mode
- in the design of MCX11. If there are special requirements in
- the application for functions related to a certain operating
- mode, it will be the responsibility of the user to add them.
-
-
- 1.4 DEVELOPMENT ENVIRONMENT
-
- MCX11 development requires a computer compatible with the
- IBM PC and having at least 256K bytes of RAM, 1 floppy disk,
- a keyboard, and a video monitor, an RS-232 compatible serial
- I/O port, a Centronics compatible parallel printer port, and
- a printer (preferably one which is Epson compatible). A hard
- disk is very desirable for development work. This
- configuration is needed to run the AS11 cross assembler and
- serve as a debug terminal to the target assuming MC68HC11EVM
- Evaluation Module is being used. Consult the EVM User Manual
- for specifics on connection tp PC. Recommended software for
- the development environment besides MS-DOS includes an
- editor, and the Kermit communications program (public
- domain).
-
-
- 1.5 MANUAL FORMAT
-
- Section 1 of this manual is simply an overview of MCX11.
-
- Section 2 gives the functional overview of MCX11.
-
- Section 3 details the organization and content of the
- various MCX11 control and data structures.
-
-
-
-
-
- Copyright (c) 1989 Page 1 - 2 Motorola, Inc.
-
-
-
-
-
-
- MCX11 - MicroController eXecutive for the 68HC11
-
-
-
- Section 4 gives a description of the Executive Service
- Requests (ESRs) provided by MCX11, subdivided into their
- classes.
-
- Section 5 gives an alphabetical presentation of all MCX11
- Executive Service Requests.
-
- Section 6 deals with the configuration and generation of
- MCX11 systems.
-
- Section 7 discusses device drivers and interuupt service
- routines.
-
- Section 8 presents technical information on advanced topics
- related to the use of MCX11.
-
- Appendices round out the specifics of necessary user
- knowledge.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Copyright (c) 1989 Page 1 - 3 Motorola, Inc.
-
-
-
-
-
-
- MCX11 - MicroController eXecutive for the 68HC11
-
-
-
- SECTION 2
-
- MCX11 FUNCTIONAL OVERVIEW
-
-
- 2.1 WHAT IS MCX11
-
- A real-time executive provides a software framework within
- which different processes can operate and gain access to
- various system resources. Real-time systems usually consist
- of several processes, or tasks, which need to have control
- of the system resources at varying times due to the
- occurrence of external events. These tasks are at various
- times competing for system resources such as memory,
- execution time, or peripheral devices. They range from being
- compute bound to I/O bound. Tasks which are I/O or compute
- bound cannot be allowed to monopolize a system resource if
- a more important function requires the same resource. There
- must be a way of interrupting the operation of the task of
- lesser importance and granting the needed resource to the
- more important task.
-
- A multitasking real-time executive promotes an orderly
- transfer of control from one task to another such that
- efficient usage of the computer's resources is achieved.
- Orderly transfers require that the executive keep track of
- the needed resources and the execution state of each task so
- that they can be granted to each task in a timely manner.
- The key word there is timely. A real-time system which does
- not perform a required operation at the correct time has
- failed. That failure can have consequences which range from
- the benign to the catastrophic. Response time to a need for
- executive services and the execution time of such services
- must be sufficiently fast enough so that no need goes
- undetected.
-
- One way to achieve timeliness is the assignment of a
- priority to each task. The priority of a task is then used
- to determine its place within the sequence of execution of
- all tasks. Tasks of low priority may have their execution
- pre-empted by a task of higher priority so that the latter
- can perform some time critical function.
-
- An event can be any stimulus which requires a reaction from
- the executive or a task. Examples of an event would include
- a timer interrupt, an alarm condition, or a keyboard input.
- Events may originate externally to the processor or
- internally from within the software. An executive which
- responds to these events as the stimuli for allocating
- resources is said to be event driven. If response time to
- any event occurs within a period of time which can be
-
-
-
-
- Copyright (c) 1989 Page 2 - 1 Motorola, Inc.
-
-
-
-
-
-
- MCX11 - MicroController eXecutive for the 68HC11
-
-
-
- accurately defined and guaranteed, the executive can be said
- to be deterministic.
-
- By these definitions, MCX11 is a deterministic, event
- driven, multitasking, real-time executive.
-
-
- 2.2 TASKS
-
- In MCX11, a task is a program module which exists to perform
- a defined function or set of functions. A task is
- independent of other tasks but may establish relationships
- with other tasks. These relationships may exist in the form
- of data structures, input/output, or other constructs. A
- task executes when the MCX11 task dispatcher determines that
- the resources required by the task are available. Once it
- begins running, the task has control of all of the system's
- resources. But as there are other tasks in the system, a
- running task cannot be allowed to control all of the
- resources all of the time. Thus, MCX11 employs the concept
- of multitasking.
-
-
- 2.3 MULTITASKING
-
- Multitasking appears to give the computer the apparent
- ability to be performing multiple operations concurrently.
- Obviously, the computer cannot be doing two or more things
- at once as it is a sequential machine. However, with the
- functions of the system segregated into different tasks, the
- effect of concurrency can be achieved. In multitasking,
- each task once given operating control either runs to
- completion, or to a point where it must wait for an event to
- occur, for a needed resource to become available, or until
- it is interrupted. Efficient use of the computer can be
- obtained by using the time a task might otherwise wait for
- an event to occur to run another task.
-
- This switching from one task to another forms the basis of
- multitasking. The result is the appearance of several tasks
- being executed simultaneously.
-
-
- 2.4 PRIORITY AND SCHEDULING
-
- When several tasks can be competing for the resource of
- execution time, the problem is to determine how to grant it
- so that each gets access to the system in time to perform
- its function. The solution is to assign a priority to each
- task indicative of its relative importance to other tasks in
- the system. MCX11 uses a fixed priority scheme in which up
- to 126 tasks may be defined. Tasks which have a need to
-
-
-
- Copyright (c) 1989 Page 2 - 2 Motorola, Inc.
-
-
-
-
-
-
- MCX11 - MicroController eXecutive for the 68HC11
-
-
-
- respond rapidly to events are assigned high priorities.
- Those which perform functions that are not time critical are
- assigned lower priorities.
-
- It is the priority of each task that determines where it is
- to run in the hierarchy of tasks. When a task may run
- depends on what is happening to the tasks of higher
- priority. Tasks are granted execution time in a strict
- descending order of priority. While executing, a task may
- be interrupted by an event which causes a task of higher
- priority to be runnable. The lower priority task is placed
- into a temporary state of suspension and execution control
- is granted to the higher priority task. Eventually, control
- is returned to the interrupted task and it is resumed at the
- point of its interruption. Thus, when any task is given
- execution control, no higher priority task can be in a
- runnable state. This is a most important point to remember.
- When all tasks are in an unrunnable state, control is
- granted to the null task.
-
- The null task is a do-nothing task which allows the system
- to run in an idle mode while waiting for an event which will
- resume or start a higher priority task. The null task is
- always the lowest priority task in the system and is always
- runnable. It is an integral part of the kernel.
-
-
- 2.5 INTERTASK COMMUNICATION AND SYNCHRONIZATION
-
- MCX11 provides an environment whereby two or more tasks can
- communicate with one another. The three major ways in which
- this is done are through the mechanisms of semaphore
- signalling, message transmission, and queues. A semaphore
- is actually a flag which contains information about the
- state of the associated event. Any event which is used for
- task synchronization will be associated with a particular
- semaphore. The occurrence of a specific event can be
- signalled by manipulating the semaphore associated with that
- event.
-
- Message transmission involves the logical transfer of data
- packets from one task to another. These data packets are
- called "messages". Messages are sent from one task and
- placed in the "mailbox" of the receiving task in the order
- of the priorities of the senders. Messages may be of any
- format recognizable by the sender and receiver and data may
- be passed in either direction. That is, it is possible for
- two tasks to alternate the roles of sender and receiver.
-
- A third technique whereby two tasks can communicate and
- synchronize is via a first-in-first-out (FIFO) queueing
- mechanism. The queueing techniques used by MCX11 involve
-
-
-
- Copyright (c) 1989 Page 2 - 3 Motorola, Inc.
-
-
-
-
-
-
- MCX11 - MicroController eXecutive for the 68HC11
-
-
-
- the physical transfer (copying) of data packets from one
- task to another. Task synchronization due to queueing
- operations is automatically performed by MCX11.
-
-
- 2.6 TIME BASED FUNCTIONS
-
- An MCX11 system is configured with an interval timer using
- the Real Time Interrupt (RTI) clock as a peripheral device.
- The timer permits task control on a timed basis. A
- generalized scheme using one-shot and cyclic timers in
- conjunction with semaphores is provided. MCX11 efficiently
- manages multiple timers using an ordered linked list of
- pending timer events. A timer for an event is inserted into
- the linked list in accordance with its duration. A
- differential technique is employed so that the timer with
- the shortest time to expiration is at the head of the list.
- Timed events may even be co-terminous. Directives for
- scheduling and cancelling timed events are an integral part
- of the executive.
-
-
- 2.7 INTERRUPT SERVICE
-
- Support for a generalized interrupt service scheme is
- provided within the MCX11 kernel. The Interrupt Service
- Routine (ISR) code, however, is provided by the User. The
- rules for writing interrupt service routines that function
- with MCX11 are quite simple and require only minor
- housekeeping chores. MCX11 also provides the common
- Interrupt Service Exit function. This logic is used by all
- interrupts to determine if a context switch is in order as
- the result of the interrupt. If no task switch is required,
- the interrupted task is resumed at the point of the
- interrupt. If, however, a task switch is in order, the
- interrupted task's context is saved, the new task's context
- is loaded and control is given to it.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Copyright (c) 1989 Page 2 - 4 Motorola, Inc.
-
-
-
-
-
-
- MCX11 - MicroController eXecutive for the 68HC11
-
-
-
- SECTION 3
-
- MCX11 CONTROL & DATA STRUCTURES
-
-
- In order to understand how MCX11 works and how to build
- real-time application systems around it, it is necessary to
- understand how its various control and data structures work.
- This section describes these structures and their
- interrelationships. The descriptions will include:
-
- - tasks
- - semaphores
- - messages and mailboxes
- - queues
- - timers
-
- The MCX11 executive services which deal with these classes
- of control and data structures will be presented in a
- subsequent section.
-
-
- 3.1 TASKS
-
- In a real-time application using MCX11, the functions of the
- system are assigned to various tasks. MCX11 supports up to
- 126 tasks in a single system. The nature of each task is, of
- course, application dependent and left to the imagination of
- the system designer. However, there are attributes which all
- tasks share. These include:
-
- - a task identifier
- - a priority
- - a task state table
- - a stack
- - a mailbox
- - an entry point
-
- 3.1.1 Task Identifier & Priority
-
- Each task is identified by a numerical identifier which is a
- number from 1 - 126. The task identifier, or number, serves
- as a reference during executive operations. Task 1 is
- executed before task 2 which is executed prior to task 3 and
- so on. Thus, the task number is inversely related to the
- task's execution priority. The lower the task number, the
- higher the priority. MCX11 uses this fixed task numbering
- scheme because it is low in overhead and quite adequate for
- most applications. The task number permits a direct access
- to the task's state table without the need for linked lists
- or other commonly used technique.
-
-
-
-
- Copyright (c) 1989 Page 3 - 1 Motorola, Inc.
-
-
-
-
-
-
- MCX11 - MicroController eXecutive for the 68HC11
-
-
-
- 3.1.2 Task State Table
-
- The state table is commonly referred to as a Task Control
- Block (TCB). A TCB in MCX11 is contained in two separate
- sections in order to minimize the use of system RAM. Only
- those data about the execution state of the task are kept in
- RAM. Static information about the task is kept in ROM. Both
- sets of this TCB information are kept in arrays which allow
- direct access to the data based on the task number. This
- makes for very quick access without the commonly wasted time
- of searching a linked list.
-
- The RAM portion of the TCB contains only volatile data about
- the task and includes the following:
-
- - the execution state
- - the stack pointer
- - the first link in the task's mailbox
-
- Whenever the MCX11 dispatcher is looking for a task to
- execute, it examines the execution state variable to see if
- the task is runnable or not. The execution state is
- contained in a single byte and a value of $00 indicates that
- the task is runnable. Any other content in the task state
- and the task is blocked from running.
-
- The stack pointer contains the address of the current top-
- of-stack.
-
- The first link in the task's mailbox contains the address of
- the highest priority message waiting to be received by the
- task. If no message is waiting, the pointer contains zero.
-
- The ROM part of the TCB contains:
-
- - the initial execution state
- - the entry point
- - the base address of the stack
- - the address of the RAM part of the TCB
-
- The initial execution state is specified by the system
- designer at the time of system configuration. This becomes
- the initial content of the execution state. By specifying a
- value of zero, the task will be executed immediately after
- initialization in accordance with its priority.
- Specification of a non-zero value will prevent the task from
- automatically starting execution after initialization.
-
- The entry point is the address where the task is to begin
- execution.
-
-
-
-
-
- Copyright (c) 1989 Page 3 - 2 Motorola, Inc.
-
-
-
-
-
-
- MCX11 - MicroController eXecutive for the 68HC11
-
-
-
- The base address of the stack identifies that location in
- RAM where the task's stack begins.
-
- The address of the RAM part of the TCB table is included for
- completeness and is sometimes used to save time in setting
- up the address of the RAM TCB area.
-
- 3.1.3 Stack
-
- Each task must have a stack on which the context of the task
- is saved during those periods when the task is not actually
- executing. The base address of the stack is stored in the
- ROM portion of the TCB. The stack extends from the base
- address downward in memory, i.e. towards address $0000, for
- a number of bytes specified by the given stack size for the
- task. The size of each task's stack is dependent on many
- things such as the maximum depth of nested subroutines
- calls, the maximum amount of working space needed for
- temporary variables, and the size of any stack frames used
- by the task. At minimum, the size of the stack must allow
- for the storage of a complete context which requires nine
- (9) bytes. If XIRQ is to be used in the design, an extra
- nine (9) bytes must be allocated to each task's stack due to
- the possibility of stacking an IRQ followed by an XIRQ. This
- is possible because the XIRQ cannot be masked and can
- interrupt an IRQ interrupt service routine at any point.
-
- In addition to the stacks needed by the tasks, there is also
- the need for a stack for MCX11. This system stack must have
- sufficient space to handle the maximum number of interrupts
- possible at any given time, less one interrupt. Each
- interrupt requires nine bytes. MCX11 functions have a worst
- case stack requirement of seven (7) bytes not including
- those bytes required for the system stack.
-
- The sum of all of the stack requirements should not be
- allowed to exceed available RAM or there will be trouble.
-
-
- 3.2 SEMAPHORES
-
- Semaphores (event flags) are used to synchronize two tasks
- to the occurrence of an asynchronous event. One task may
- need to wait for the other to reach a certain point before
- it can continue. Input/output operations are an example of
- this type of synchronization. For instance, when an input
- from an external device is desired by a task, it must wait
- for the input event to occur. When the input operation is
- completed, the device driver signals that the event has
- occurred which indicates the data is available. The
- signalling process causes the waiting task to resume,
-
-
-
-
- Copyright (c) 1989 Page 3 - 3 Motorola, Inc.
-
-
-
-
-
-
- MCX11 - MicroController eXecutive for the 68HC11
-
-
-
- presumably to process the input data. The synchronization of
- the task with the event is done with the use of a semaphore.
-
- There are several forms that a semaphore may take in the
- design of a real-time kernel. MCX11 uses a basic semaphore
- construct that is known to handle most events and is low in
- overhead. A semaphore is referenced by a numerical
- identifier limited to a value from 1-255. A semaphore
- identifier of zero has a special meaning. There are three
- different classes of semaphores used by MCX11 as follows:
-
- - Named semaphores
- - Task semaphores
- - Queue semaphores
-
- Named semaphores are those normally referenced by the user
- in the application code. Task and queue semaphores are used
- by MCX11 internally for the purpose of orthogonality with
- the semaphore service functions. Task semaphores are always
- referenced by the identifier of zero (0) which is translated
- by MCX11 into the proper number for the task semaphore.
- Queue semaphores should never be referenced by the user lest
- undesirable results should occur.
-
- An MCX11 semaphore is a single byte (8 bits) which contains
- a value representing one of the three possible states in
- which it can exist. These states are:
-
- - PENDING
- - WAITING
- - DONE
-
- A PENDING state indicates that the event associated with the
- semaphore has not yet occurred and is therefore pending.
- The WAITING state shows that not only has the event not yet
- occurred but a task is waiting for it to happen. The DONE
- state tells that the event has occurred. MCX11 semaphores
- have a very strict state transition protocol which is
- automatically managed by MCX11. The permissible state
- changes are shown below in Figure 3-1.
-
-
- +------- PENDING------- +
- | ^ |
- | |------ | |
- v | v
- DONE<--------------- WAITING
-
- Figure 3.1
-
-
-
-
-
-
- Copyright (c) 1989 Page 3 - 4 Motorola, Inc.
-
-
-
-
-
-
- MCX11 - MicroController eXecutive for the 68HC11
-
-
-
- If a task attempts to wait on a semaphore which is in the
- DONE state, the wait does not occur and the task is
- immediately resumed (since the desired event has already
- happened) and the semaphore state is changed back to
- PENDING. If a task attempts to wait on a semaphore in the
- PENDING state, the state of the semaphore is changed to
- WAITING and the task's execution is suspended until the
- event occurs. An attempt to wait on a semaphore which is
- already in the WAITING state can cause unpredictable results
- and should not be attempted. It should be considered a
- design error.
-
- If an attempt is made to signal a semaphore which is in a
- PENDING state, the semaphore is placed into the DONE state.
- As this action does not concern any task, no further action
- is taken. However, if a signal is sent to a semaphore in
- the WAITING state, the semaphore transitions to a DONE state
- and the task waiting on the event is made runnable again.
- The semaphore is then automatically set back to a PENDING
- state by MCX11.
-
-
- 3.3 MESSAGES AND MAILBOXES
-
- Messages are one of the means by which data is transmitted
- from a sender to a receiver task. Every task running under
- MCX11 is capable of being both a message sender and
- receiver. Each task is assigned a "mailbox" into which are
- placed all messages sent to it. When a sender task sends a
- message, it is put into the mailbox of the receiver task. If
- two or more tasks are sending messages to a single receiver,
- their messages are put into the mailbox in strict sequence
- of their priorities, highest priority first.
-
- The content of the message is not actually moved from the
- sender to the receiver when it is sent. Instead, messages
- are linked into a threaded list according to the priorities
- of their senders. When the receiver requests receipt of the
- next message, its address is returned. This technique
- guarantees the receiver that the highest priority message is
- received first. It is possible, however, to temporarily
- suspend this order by requesting only those messages from a
- particular sender. This is useful when it is desirable not
- to mix messages on a shared resource, for example, a
- printer.
-
- The mailbox of a task is a threaded (linked) list of all
- messages sent to but not yet received by that task. The
- mailbox consists of a pointer (link) to the message sent by
- the highest priority sender. That message is linked to the
- next highest priority message and it in turn is linked to
- the third highest priority message, and so on until the end
-
-
-
- Copyright (c) 1989 Page 3 - 5 Motorola, Inc.
-
-
-
-
-
-
- MCX11 - MicroController eXecutive for the 68HC11
-
-
-
- of the thread. The last message in a task's mailbox will
- contain a NULL (value of zero) link.
-
- Messages may be sent with or without waiting for a response
- from the receiver. When a task wants to send a message and
- wait until the receiver has processed the message, it will
- include a semaphore number as one of the arguments in the
- MCX11 send message directive. That semaphore is then
- associated with the event of completed processing of the
- message. Once the message is linked into the mailbox of the
- receiver task, the sender is put into a WAIT state on the
- message processing complete event.
-
- The receiver removes the message from the mailbox and
- processes it according to the content of the message body.
- When the receiver no longer needs the data in the body of
- the message, it signals the semaphore associated with the
- completion of message processing making the sender task
- runnable again and, thereby, allowing it to continue its
- operation.
-
- It should be remembered that the body of the message can
- also be used by the receiver to send a response back to the
- sender. This is a very efficient way of passing data bi-
- directionally between two tasks with little overhead.
-
- If the sending task does not wish to wait on the action of
- the receiver or if there is no response required, a message
- can be sent without waiting for completion of processing.
- This makes it possible for a sender to send multiple
- messages to a receiver, or, simply do something else while
- the receiver processes the message. However, even though a
- message is sent without waiting for the response, it is
- still possible at a later time for the sender to wait for
- the completion of processing event.
-
- If the receiver has completed the use of the message by the
- time the sender waits for that event, the sending task
- continues operation without interruption. If the receiver
- has not yet completed processing of the message, the sender
- must wait for the event to occur. When it does occur, the
- sender's operation is resumed.
-
- A message is a four-element structure set up in a contiguous
- area of RAM. The first three elements of the message are
- used by MCX11 to control the transmission. The user need
- only set up the content of the message body. The format of a
- MCX11 message is as follows:
-
- - Mailbox link (supplied by MCX11)
- - Task number of sender (supplied by
- MCX11)
-
-
-
- Copyright (c) 1989 Page 3 - 6 Motorola, Inc.
-
-
-
-
-
-
- MCX11 - MicroController eXecutive for the 68HC11
-
-
-
- - Message semaphore number (optional)
- - Message body (supplied by User)
-
- The first element in the message provides the link to the
- next message, if any, in the mailbox.
-
- The second element is the task number of the sender. This
- field is included so that the receiver task can selectively
- receive only those messages from a specified task.
-
- The third element of the message contains an optional
- message semaphore number. Typically, when a sending task
- wants to send a message and wait until the receiver has
- processed the message, it will include a non-zero semaphore
- number as one of the calling arguments for the MCX11
- directive. The sending task will then suspend execution
- until the receiver task completes the processing of the
- message content. When the receiver no longer needs the data
- in the body of the message, it signals the message semaphore
- to notify the sender that it may continue processing.
- .
- The last element, the body, of the message may contain
- whatever data is required by the receiver task and in
- whatever format. It may be fixed or variable in length as
- required.
-
-
- 3.4 QUEUES
-
- MCX11 supports first-in-first-out (FIFO) queues having
- single or multiple bytes per entry. The queues can support
- multiple producer/single consumer service but are usually
- employed in only a single producer/single consumer mode.
- Queues are referenced via a numerical identifier which is
- unique to each queue. Queue numbers are assigned in the
- system generation procedure. MCX11 queues differ from
- messages in that the actual entry data rather than its
- address is entered into or removed from the queue. Another
- difference is that the queue entries represent the
- chronological order of processing. Also, the priorities of
- the sender or receiver are not considered as with messages.
- Queues are usually used to handle data such as character
- stream input/output or other data buffering. Queues require
- more overhead as they move the data from the source to the
- queue or vice versa but they also provide automatic
- synchronization between the queue's producer and its
- consumer. It is recommended that they not be used where
- high throughput rates are required.
-
- A queue consists of two parts: the queue header and the
- queue body. The queue header contains that information
- needed by the MCX11 internal routines to enable them to move
-
-
-
- Copyright (c) 1989 Page 3 - 7 Motorola, Inc.
-
-
-
-
-
-
- MCX11 - MicroController eXecutive for the 68HC11
-
-
-
- data into and out of the queues properly. The organization
- of the queue header consists of the following elements:
-
- - Width, queue entry size (in bytes)
- - Depth, maximum length (in entries)
- - Current size of the queue (in entries)
- - Put index (in bytes; MCX11 internal use)
- - Address of queue body
- - Queue not empty semaphore number
- - Active semaphore number
-
- The first three elements are defined during the system
- generation process. The Current Size and the Put Index
- fields are initialized to zero (empty). Both of these fields
- are maintained internally by the MCX11 queue handling
- routines. They should never be manipulated by a user task.
-
- Semaphores are used to signal internal events such as queue-
- not- empty or queue-not-full. The semaphores for these
- events are allocated as a consecutive pair during the system
- initialization process. The queue-not-full semaphore number
- is equal to the number of the queue-not-empty semaphore plus
- one. A queue can have a semaphore active only for those two
- mutually exclusive events. Consequently only the queue-not-
- empty semaphore number requires definition in the queue
- header.
-
- The active semaphore number field in the queue header is
- used to contain the number of the semaphore associated with
- one of the two possible events. If the queue is empty and a
- task attempts to remove an entry, the active semaphore field
- in the queue header is set to contain the number of the
- queue-not-empty semaphore. Conversely, if a task attempts to
- put an entry into a queue which is already full, the active
- semaphore field is set to contain the number of the queue-
- not-full semaphore.
-
- By use of these semaphores, it is possible to send data
- between tasks asynchronously but without the worry of over-
- running the queue.
-
-
- 3.5 TIMERS
-
- In the descriptions of time based functions to follow in the
- succeeding sections, it will be important to understand the
- conventions used by MCX11. All timers in MCX11 are 16-bits
- long. The two time units used internally by MCX11 are ticks
- and tocks. A tick gives the amount of time between clock
- generated system interrupts, or equivalently, the period
- between clock interrupt service requests.
-
-
-
-
- Copyright (c) 1989 Page 3 - 8 Motorola, Inc.
-
-
-
-
-
-
- MCX11 - MicroController eXecutive for the 68HC11
-
-
-
- A tock is an integral number of ticks and is the time unit
- used by all of the time dependent functions in MCX11. The
- tick frequency of the RTI clock is set during the system
- initialization process but was determined, as was the number
- of ticks per tock, by the system designer during MCX11
- system configuration.
-
- As an example, suppose the hardware clock is configured to
- cause interrupts every 25 milliseconds and that 0.25 seconds
- (250 milliseconds) is the time most convenient interval for
- timing events in the application. In order to determine the
- number of ticks per tock, simply divide the desired duration
- of the tock (250 ms) by the duration of a tick (25 ms).
- Thus, in this case, 1 tock = 10 ticks.
-
- Timer values are defined as the number of clock tocks
- required to form the needed amount of time. If a timer
- value is positive, it is used only once (one-shot timer).
- However, if the value is negative, it is used as a cyclic
- timer having a period equal to the 2's complement value.
- For example, if a clock tock equals 250 milliseconds, a
- timer value of 20 would produce a once-only period of 5
- seconds. If the timer were -20, the period is still 5
- seconds but the timer is cyclic.
-
- All timed event operations and data structures are handled
- by MCX11. A task should not attempt to manipulate any of the
- timer related control or data structures.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Copyright (c) 1989 Page 3 - 9 Motorola, Inc.
-
-
-
-
-
-
- MCX11 - MicroController eXecutive for the 68HC11
-
-
-
- SECTION 4
-
- EXECUTIVE SERVICE REQUESTS (ESRS)
-
-
- 4.1 PURPOSE
-
- Executive Service Requests (ESRs) are the functions that a
- real-time kernel performs and serve to give it its flavor.
- This section will describe the classes of the MCX11
- directives. The directives are divided into five classes as
- follows:
-
- - Semaphores
- - Messages
- - Queues
- - Task control
- - Time based
-
- A brief functional description of each ESR within the class
- is given along with their respective calling arguments. The
- calling arguments needed for each ESR appear below in
- parentheses. Where two or more arguments are required, they
- are separated by commas. These are not the actual calling
- sequences but are for purposes of explanation only. Actual
- calling sequences are given in Section 5.
-
- In the paragraphs below, the ESR function name is enclosed
- within two periods. This will be the convention used for
- MCX11 to denote an ESR. The following abbreviations are used
- below for the arguments:
-
- - SEMA Semaphore number
- - TASK Task number
- - QUEUE Queue number
- - TOCK Timer value
- - PNTR Address pointer or data value
- - MSG Message address
-
- 4.2 SEMAPHORE ESRS
-
- A complete set of directives for managing semaphores is
- provided by MCX11.
-
-
- .wait. (SEMA) wait for a specific sema to be signalled
- .signal. (SEMA) signal semaphore
- .pend. (SEMA) reset semaphore state to PENDing
-
-
-
-
-
-
-
- Copyright (c) 1989 Page 4 - 1 Motorola, Inc.
-
-
-
-
-
-
- MCX11 - MicroController eXecutive for the 68HC11
-
-
-
- 4.3 MESSAGE ESRS
-
- The message directives provide a means of transferring large
- amounts of data between tasks with minimal overhead since
- only pointers (addresses) are passed. Message receipt
- acknowledgement is also provided for task synchronization.
- The format of a MCX11 message and function prototypes are
- noted.
-
- .send. (MSG,TASK) send message to a task
- .sendw. (MSG,TASK,SEMA) send & wait acknowledgement
- .receive. (TASK) receive message
-
-
- 4.4 QUEUE ESRS
-
- Queue directives provide a means of passing multiple byte
- packets of information between tasks with automatic task
- synchronization of queue full and empty conditions.
-
- .dequeue. (QUEUE,PNTR) remove entry from queue
- .enqueue. (QUEUE,PNTR) insert entry into queue
-
-
- 4.5 TASK CONTROL ESRS
-
- The task control directives provided by MCX11 allow for low
- level complete control of tasks and their respective
- interactions.
-
- .resume. (TASK) resume specific task
- .suspend. (TASK) suspend specific task
- .terminate. (TASK) terminate specific task
- .execute. (TASK) execute task from starting point
-
-
- 4.6 TIME BASED ESRS
-
- The time based directives provide for the synchronization of
- tasks with timed events. In addition, a generalized time
- based semaphore scheme for more advanced time based
- requirements is provided.
-
- .delay. (TASK,SEMA,TOCK) delay task
- .timer. (TASK,SEMA,TOCK) schedule timer for task/sema
- .purge. (TASK,SEMA,PNTR) purge timer for task/sema
-
-
-
-
-
-
-
-
-
- Copyright (c) 1989 Page 4 - 2 Motorola, Inc.
-
-
-
-
-
-
- MCX11 - MicroController eXecutive for the 68HC11
-
-
-
- SECTION 5
-
- ALPHABETICAL LISTING OF ESRs
-
-
- In the pages to follow, each ESR will be shown in
- alphabetical order. Each ESR will be given in a standard
- format:
-
- Name - brief functional description
-
- CLASS
-
- One of the five ESR classes of which it is a member.
-
- SYNOPSIS
-
- The prototype declaration including argument typing.
- The decimal value of the function code is enclosed in
- brackets [xx].
-
- DESCRIPTION
-
- A description of what the ESR does, data types used,
- etc.
-
- CALLING SEQUENCE
-
- The formal AS11 calling sequence for the ESR. The
- following notations will be used:
-
- ACCA = Accumulator A, 8 bits
- ACCB = Accumulator B, 8 bits
- IX = Index register X, 16 bits
-
- RETURN VALUE
-
- A description of the return values from the ESR.
-
- EXAMPLE
-
- One or more typical ESR uses. The examples assume the
- syntax of AS11 cross assembler.
-
- SEE ALSO
-
- List of related ESRs that could be examined in
- conjunction with the current ESR.
-
-
-
-
-
-
-
- Copyright (c) 1989 Page 5 - 1 Motorola, Inc.
-
-
-
-
-
-
- MCX11 - MicroController eXecutive for the 68HC11
-
-
-
- 5.1 .delay. - DELAY A TASK FOR A PERIOD OF TIME
-
- CLASS
-
- Timer
-
- SYNOPSIS
-
- .delay. (TASK,SEMA,TOCK) [13]
-
- DESCRIPTION
-
- The delay directive places the specified task into a
- Wait state for the period defined by the TOCK value.
- TASK is a task number in the range of 1-126. Or, TASK
- may be 0 if the reference is to SELF. Thus, a task need
- not know its own task number to schedule a delay for
- itself. SEMA is the semaphore number associated with
- the expiration of the timer. It may be a named
- semaphore if its number > 0. Or, it may be the task
- semaphore of the calling task if it is specified as 0.
- TOCK is a 16-bit timer. If TOCK is > 0, the timer is a
- one-shot. If TOCK < 0, the timer is cyclic. Caution
- should be exercised when scheduling delays for other
- tasks.
-
- CALLING SEQUENCE
-
- ACCA = Task number (0 if SELF)
- ACCB = Semaphore number (0 if Task's semaphore)
- IX = Number of clock tocks to delay
- swi
- FCB .delay.
- return
-
- RETURN VALUE
-
- None. Registers unchanged.
-
- EXAMPLE
-
- Assume that the RTI is used as the time base using a
- 2**23 crystal and the clock TICK is defined to be
- 15.625 msec. Further assume that there are 8 TICKS per
- TOCK so that a TOCK is 125 msec. If a 2.5 sec delay is
- desired for the calling task using a named semaphore,
- TIMEOUT, the request would appear as:
-
-
-
-
-
-
-
-
- Copyright (c) 1989 Page 5 - 2 Motorola, Inc.
-
-
-
-
-
-
- MCX11 - MicroController eXecutive for the 68HC11
-
-
-
-
- TOCK equ 8
- TOCKTIME equ 1000/8 TOCKTIME = 125 msec
- TIMEOUT equ 3 Named semaphore #3
- .
- :
- clra Task is self (ACCA=0)
- ldab #TIMEOUT Semaphore = TIMEOUT
- ldx #2500/TOCKTIME Timer = 20 TOCKS
- swi
- FCB .delay.
- . Point of continuation
-
- The requesting task would be put into a WAIT state on
- semaphore TIMEOUT while the 2.5 sec clock runs down.
- When it expires, TIMEOUT would be signalled and the
- task would continue at the instruction following the
- FCB declaration.
-
- SEE ALSO
-
- .timer., .purge.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Copyright (c) 1989 Page 5 - 3 Motorola, Inc.
-
-
-
-
-
-
- MCX11 - MicroController eXecutive for the 68HC11
-
-
-
- 5.2 .dequeue. - GET AN ENTRY FROM A FIFO QUEUE
-
- CLASS
-
- Queue
-
- SYNOPSIS
-
- .dequeue. (QUEUE,PNTR) [7]
-
- DESCRIPTION
-
- Dequeue is used to get an entry from a FIFO queue. The
- number of bytes in the entry is determined by the Width
- entry in the Queue Header. If the queue is empty, the
- calling task is placed into an EVENT WAIT state on the
- queue-not-empty semaphore. If the queue is not empty,
- the oldest entry in the queue is removed and returned
- to the calling task. If the size of the queue entry is
- greater than two bytes, the returned data is in the RAM
- area beginning at the address specified by PNTR. If the
- queue entry is one or two bytes, PNTR is ignored and
- the entry is returned in one or two registers.
-
- CALLING SEQUENCE
-
- ACCA= Queue number
- IX = Destination address of queue entry if size > 2
- swi
- FCB .dequeue.
- return
-
- RETURN VALUE
-
- If queue entry size = 1, ACCA= queue entry
- If queue entry size = 2, ACCA = byte 1 of queue entry,
- and ACCB = byte 2 of queue entry
- Other registers unchanged
-
- EXAMPLE
-
- Example #1:
-
- There exists a FIFO queue, DBLQ, containing two
- character entries. The queue currently contains four
- entries as follows:
-
- ab
- DE
- Mc
- xY
-
-
-
-
- Copyright (c) 1989 Page 5 - 4 Motorola, Inc.
-
-
-
-
-
-
- MCX11 - MicroController eXecutive for the 68HC11
-
-
-
- A task is programmed to remove the oldest entry in the
- queue and return it for subsequent processing. The
- entry is dequeued by:
-
- DBLQ equ 4 Queue #4
- .
- :
- ldaa #DBLQ ACCA = queue # 4
- swi
- FCB .dequeue.
- . Point of continuation
-
- At the instruction following the FCB declaration, ACCA
- and ACCB will contain the two characters, ab. The queue
- will now contain the three entries:
-
- DE
- Mc
- xY
-
- Example #2:
-
- Another queue exists, QUADQ, which contains four byte
- entries and is currently empty. The request to get an
- entry from the queue would appear as:
-
- QUADQ equ 5 Queue #5
- .
- :
- ldaa #QUADQ ACCA = queue # 5
- ldx #destn IX = destination address
- swi
- FCB .dequeue.
- . Point of continuation
- :
- destn ZMB 4 Where the entry is placed
- :
-
- Since there are no entries available to dequeue, MCX11
- puts the task into a WAIT state on the NOT_EMPTY
- semaphore associated with queue #5. The task will
- remain in that state until another task puts a 4-byte
- entry into QUADQ. When that happens, the waiting task
- is put into the RUN state. The entry is removed and is
- stored at the specified destination address, destn, and
- the task continues at the instruction following the FCB
- declaration.
-
- SEE ALSO
-
- .enqueue.
-
-
-
-
- Copyright (c) 1989 Page 5 - 5 Motorola, Inc.
-
-
-
-
-
-
- MCX11 - MicroController eXecutive for the 68HC11
-
-
-
- 5.3 .enqueue. - INSERT DATA INTO FIFO QUEUE
-
- CLASS
-
- Queue
-
- SYNOPSIS
-
- .enqueue. (QUEUE,PNTR) [8]
-
- DESCRIPTION
-
- Enqueue inserts an entry into a FIFO queue. If the
- queue is full, the calling task is set to a WAIT state
- on the queue NOT FULL condition. When the queue is not
- full, the entry is inserted into the queue. If the
- width of the queue entry is greater than 2 bytes, the
- data to be put into the queue is found at the address
- specified by the contents of register IX. If the width
- is 1 byte, the actual data to be enqueued is found in
- bits 8-15 of IX. If the width is equal to 2 bytes, then
- byte 1 of the entry is found in bits 8-15 of IX, and
- byte 2 is in bits 0-7 of IX.
-
- CALLING SEQUENCE
-
- ACCA= Queue number
- IX = Source address of entry to be enqueued if size > 2
- Or, IX8-15 = byte to be enqueued if size = 1
- Or, IX8-15 = byte 1 and IX0-7 = byte 2 if size = 2
- swi
- FCB .enqueue.
- return
-
- RETURN VALUE
-
- None. Registers unchanged.
-
- EXAMPLE
-
- Example #1:
-
- Using the 2-byte queue, DBLQ, defined above, a task
- wants to put an entry into it. Assume that the queue
- contents are the three entries:
-
- DE
- Mc
- xY
-
- The queue entry size is two bytes which permits the
- entry to be passed to the queue routine in ACCA and
-
-
-
- Copyright (c) 1989 Page 5 - 6 Motorola, Inc.
-
-
-
-
-
-
- MCX11 - MicroController eXecutive for the 68HC11
-
-
-
- ACCB. The request to put a two-byte entry, LW, into
- DBLQ is:
-
- ldaa #DBLQ ACCA = queue # 4
- ldx #"LW" IX = "LW"
- swi
- FCB .enqueue.
- . Point of continuation
-
- Since the queue has content, no task is waiting for an
- entry to dequeue; therefore, the entry is put into the
- queue following the "xY" entry and the task continues
- at the instruction following the FCB. The new content
- of DBLQ is:
-
- DE
- Mc
- xY
- LW
-
-
- Example #2:
-
- Using the queue, QUADQ, previously defined but now
- containing three entries:
-
- abcd
- EFGH
- iJkL
-
- A request to put a new entry into the queue, MnOp, is
- given by:
-
- ldaa #QUADQ ACCA = queue # 5
- ldx #srcadr IX = source address
- swi
- FCB .enqueue.
- . Point of continuation
- :
- srcadr FCC "MnOp"
- :
-
- Since the entry size is four bytes, IX must contain the
- address of the entry to be enqueued. After continuing
- at the instruction following the FCB declaration, QUADQ
- contains:
-
- abcd
- EFGH
- IjKl
- MnOp
-
-
-
-
- Copyright (c) 1989 Page 5 - 7 Motorola, Inc.
-
-
-
-
-
-
- MCX11 - MicroController eXecutive for the 68HC11
-
-
-
- SEE ALSO
-
- .dequeue.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Copyright (c) 1989 Page 5 - 8 Motorola, Inc.
-
-
-
-
-
-
- MCX11 - MicroController eXecutive for the 68HC11
-
-
-
- 5.4 .execute. - EXECUTE A TASK
-
- CLASS
-
- Task control
-
- SYNOPSIS
-
- .execute. (TASK) [12]
-
- DESCRIPTION
-
- The execute task directive is used to start or restart
- a task from its beginning. The program counter (PC) and
- stack pointer (SP) are initialized to their starting
- values and the specified task is made runnable. If the
- new task is of higher priority than the current task, a
- context switch is performed and the new task runs, else
- control is returned to the caller. The task being
- started cannot be SELF (task number argument = 0).
-
- CALLING SEQUENCE
-
- ACCA= Task number
- swi
- FCB .execute.
- return
-
- RETURN VALUE
-
- None. Registers unchanged.
-
- EXAMPLE
-
- The current task wishes to cause task number 6 to begin
- execution at its starting point. Task number 6 is
- currently IDLE. The request appears as:
-
- TASK6 equ 6 Task #6
- .
- :
- ldaa #TASK6 ACCA = task # 6
- swi
- FCB .execute.
- . Point of continuation
-
- If TASK6 is of higher priority, then the current task
- is interrupted, but still runnable, and TASK6 is made
- the current task. The task which scheduled TASK6 is not
- given control again until all other higher priority
- tasks, including TASK6, are not runnable. When it does
- continue, it will do so following the FCB declaration.
-
-
-
- Copyright (c) 1989 Page 5 - 9 Motorola, Inc.
-
-
-
-
-
-
- MCX11 - MicroController eXecutive for the 68HC11
-
-
-
-
- If TASK6 is of lower priority that the current task, no
- context switch occurs and the current task continues at
- the instruction following the FCB declaration.
-
- SEE ALSO
-
- .terminate.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Copyright (c) 1989 Page 5 - 10 Motorola, Inc.
-
-
-
-
-
-
- MCX11 - MicroController eXecutive for the 68HC11
-
-
-
- 5.5 .pend. - FORCE A SEMAPHORE TO A PENDING STATE
-
- CLASS
-
- Semaphore
-
- SYNOPSIS
-
- .pend. (SEMA) [3]
-
- DESCRIPTION
-
- To understand the use of the pend directive, recall
- that the WAIT directive will return control to the
- calling task immediately if the task requests to wait
- on a semaphore found to already be in a DONE state. In
- this sense, semaphores keep a history of their
- associated events, even if no task is waiting at the
- time of the signal. If a task needs to go
- unconditionally into a Event Wait state on a semaphore,
- a call should first be made to PEND followed closely by
- a WAIT directive.
-
- CALLING SEQUENCE
-
- ACCB = Semaphore number
- swi
- FCB .pend.
- return
-
- RETURN VALUE
-
- None. Registers unchanged.
-
- EXAMPLE
-
- The current task is going to make use of a semaphore
- and wants to be certain of its state prior to use. It
- forces the semaphore into a PENDing condition by the
- following request:
-
- NEWSEMA equ 14 Semaphore #14
- .
- :
- ldab #NEWSEMA ACCB = semaphore # 14
- swi
- FCB .pend.
- . Point of continuation
-
- SEE ALSO
-
- .wait.
-
-
-
- Copyright (c) 1989 Page 5 - 11 Motorola, Inc.
-
-
-
-
-
-
- MCX11 - MicroController eXecutive for the 68HC11
-
-
-
- 5.6 .purge. - PURGE A TASK'S TIMERS
-
- CLASS
-
- Timer
-
- SYNOPSIS
-
- .purge. (TASK,SEMA,PNTR) [15]
-
- DESCRIPTION
-
- The purge timer directive is used to remove all active
- timers for the specified task or semaphore number. A
- specification of a zero semaphore number will purge all
- semaphore timers for the given task. When the purge is
- completed, the current task is resumed.
-
- CALLING SEQUENCE
-
- ACCA = Task number (0 if SELF)
- ACCB = Semaphore number (0 if task semaphore)
- IX0-7 = Switch: 0 = purge all timers for given task
- >0 = purge time for given task & sema
- swi
- FCB .purge.
- return
-
- RETURN VALUE
-
- None. Registers unchanged.
-
- EXAMPLE
-
- The most common use of this ESR is for the current task
- to get rid of one or all of its active timers. Since
- timers are associated with semaphores, the combination
- of task number and semaphore number is sufficient to
- identify a timer uniquely. The request to purge the
- current task's timer associated with the task semaphore
- appears as:
-
- clra ACCA = 0 means SELF
- clrb ACCB = 0 means task sema
- ldx #1 Only purge one timer
- swi
- FCB .purge.
- . Point of continuation
-
-
-
-
-
-
-
- Copyright (c) 1989 Page 5 - 12 Motorola, Inc.
-
-
-
-
-
-
- MCX11 - MicroController eXecutive for the 68HC11
-
-
-
- If all timers for a task are to be purged, the request
- appears as:
-
- clra ACCA = 0 means SELF
- ldx #0 Purge all timers
- swi
- FCB .purge.
- . Point of continuation
-
- SEE ALSO
-
- .timer., .terminate.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Copyright (c) 1989 Page 5 - 13 Motorola, Inc.
-
-
-
-
-
-
- MCX11 - MicroController eXecutive for the 68HC11
-
-
-
- 5.7 .receive. - RECEIVE A MESSAGE
-
- CLASS
-
- Message
-
- SYNOPSIS
-
- .receive. (TASK) [6]
-
- DESCRIPTION
-
- The receive message directive is used to fetch messages
- from a calling task's mailbox. Because the messages
- are placed in the mailbox in the order of the sender's
- priority, they are processed in the same sequence. If
- the receiving task specifies a non-zero task number,
- the first message from that task will be returned.
- With a zero task number, the first message in the
- mailbox is returned. If there are no messages in the
- mailbox, the task's context is saved, and the task is
- put into a Message WAIT state. When the next message
- is sent to the task it will be resumed and the attempt
- to receive a message will be reissued.
-
- CALLING SEQUENCE
-
- ACCA = Task number if messages from specific task are
- wanted. Or, ACCA = 0 if highest priority message
- is wanted.
- swi
- FCB .receive.
- return
-
- RETURN VALUE
-
- Register IX contains the address of the received
- message. Other registers unchanged.
-
- EXAMPLE
-
- Example #1:
-
- The current task is a server which operates only when
- another task sends it a message instructing it to
- perform some function. The server task receives
- messages by making a request such as:
-
- clra 0 = next message
- swi
- FCB .receive.
- . Point of continuation
-
-
-
- Copyright (c) 1989 Page 5 - 14 Motorola, Inc.
-
-
-
-
-
-
- MCX11 - MicroController eXecutive for the 68HC11
-
-
-
-
- The server task will not continue unless there is a
- message waiting in its mailbox. It will be put into a
- WAIT state until such time as another task sends it a
- message. No waiting occurs if a message is already in
- the mailbox at the time of the request. When the
- message is available, its address is returned in the IX
- register.
-
- Example #2:
-
- If the server wants to receive only those messages from
- a specific task, and the task's number is to be found
- in a variable named 'attach', the request is:
-
- ldaa attach variable contains task #
- swi
- FCB .receive.
- . Point of continuation
- :
- attach ZMB 1
-
- The server task will now only listen for messages from
- the task whose number is in the variable 'attach'. All
- other messages will remain in the mailbox of the
- server. The server will continue only when it has
- received a message from the specific task.
-
- SEE ALSO
-
- .send., .sendw.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Copyright (c) 1989 Page 5 - 15 Motorola, Inc.
-
-
-
-
-
-
- MCX11 - MicroController eXecutive for the 68HC11
-
-
-
- 5.8 .resume. - RESUME A TASK
-
- CLASS
-
- Task control
-
- SYNOPSIS
-
- .resume. (TASK) [9]
-
- DESCRIPTION
-
- The resume directive clears the suspended state of a
- task caused by a suspend directive. If the resumed
- task is made runnable and is higher priority, a task
- switch is performed. Otherwise, control is returned to
- the calling task.
-
- CALLING SEQUENCE
-
- ACCA = Task number
- swi
- FCB .resume.
- return
-
- RETURN VALUE
-
- None. Registers unchanged.
-
- EXAMPLE
-
- A task which has been previously suspended may be
- resumed from the point of suspension only by a .resume.
- request from another task. The request appears as:
-
- TASK6 equ 6 Task #6
- .
- :
- ldaa #TASK6 ACCA = task # 6
- swi
- FCB .resume.
- . Point of continuation
-
- Upon resuming the given task, a context switch may
- occur if the resumed task is of higher priority than
- the task making the request. If not, no context switch
- occurs. The requesting task continues at the
- instruction following the FCB.
-
- SEE ALSO
-
- .suspend.
-
-
-
- Copyright (c) 1989 Page 5 - 16 Motorola, Inc.
-
-
-
-
-
-
- MCX11 - MicroController eXecutive for the 68HC11
-
-
-
- 5.9 .send. - SEND A MESSAGE TO A TASK
-
- CLASS
-
- Message
-
- SYNOPSIS
-
- .send. (MSG,TASK) [4]
-
- DESCRIPTION
-
- The send message directive inserts a message into the
- target task's mailbox in the order of the sending
- task's priority. If the receiving task is waiting to
- receive a message and is of higher priority than the
- sender, a task switch is performed. If the receiving
- task is of lower priority and waiting on a message,
- then the receiving task is marked runnable but control
- is returned on a message, the message is simply
- inserted to his mailbox for later receipt.
-
- CALLING SEQUENCE
-
- ACCA = Task number of the receiver
- ACCB = Semaphore number (task semaphore number = 0)
- IX = Message address
- swi
- FCB .send.
- return
-
- RETURN VALUE
-
- None. ACCB will contain the number of the task
- semaphore if ACCB was = 0 at time of swi. All other
- registers unchanged.
-
- EXAMPLE
-
- A task wishing to send a message to a receiver task can
- do so by the following code:
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Copyright (c) 1989 Page 5 - 17 Motorola, Inc.
-
-
-
-
-
-
- MCX11 - MicroController eXecutive for the 68HC11
-
-
-
- RCVRTSK equ 12 Receiving task = task #12
- MSGSEMA equ 7 Use sema #7 for Message
- .
- :
- ldaa #RCVRTSK ACCA = receiver task #
- ldab #MSGSEMA ACCB = Message semaphore
- ldx #msgadr IX = Address of message
- swi
- FCB .send.
- . Point of continuation
- :
- msgadr ZMB 4 Message overhead
- FCC "THIS IS THE MESSAGE BODY"
-
- The message located at 'msgadr' will be put into the
- mailbox of RCVRTSK. Processing in the sending task will
- resume at the instruction following the FCB
- declaration.
-
- SEE ALSO
-
- .receive., .sendw.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Copyright (c) 1989 Page 5 - 18 Motorola, Inc.
-
-
-
-
-
-
- MCX11 - MicroController eXecutive for the 68HC11
-
-
-
- 5.10 .sendw. - SEND A MESSAGE AND WAIT
-
- CLASS
-
- Message
-
- SYNOPSIS
-
- .sendw. (MSG,TASK,SEMA) [5]
-
- DESCRIPTION
-
- The send message and wait directive is similar to the
- send message directive described above, except that the
- sending task is always put into a Event Wait state on
- the message semaphore. This allows the receiving task
- to signal the sender when the message processing is
- complete and/or that there is data returned in the
- message area.
-
- CALLING SEQUENCE
-
- ACCA = Task number of the receiver
- ACCB = Semaphore number (task semaphore number = 0)
- IX = Message address
- swi
- FCB .sendw.
- return
-
- RETURN VALUE
-
- None. ACCB will contain the number of the task
- semaphore if ACCB was = 0 at time of swi. All other
- registers unchanged.
-
- EXAMPLE
-
- The example is the same as for .send. except that the
- ESR request will be .sendw. Another difference is the
- WAIT state into which the sending task is placed until
- the receiving task signals the message semaphore. Until
- that signal is received, the sending task proceeds no
- further. When the receiver signals the message
- semaphore, the sending task will continue at the
- instruction following the FCB.
-
- SEE ALSO
-
- .send., .receive.
-
-
-
-
-
-
- Copyright (c) 1989 Page 5 - 19 Motorola, Inc.
-
-
-
-
-
-
- MCX11 - MicroController eXecutive for the 68HC11
-
-
-
- 5.11 .signal. - SIGNAL A SEMAPHORE
-
- CLASS
-
- Semaphore
-
- SYNOPSIS
-
- .signal. (SEMA) [2]
-
- DESCRIPTION
-
- The signal semaphore directive sets the state of a
- specified semaphore to DONE. If the semaphore is
- currently in a WAIT state, the Event Wait state of the
- waiting task is removed, and the semaphore is set
- PENDing. If the waiting task becomes runnable and is
- of higher priority than the signalling task, the
- context of the current task is saved, and a context
- switch is performed.
-
- If the state of the semaphore was either PENDing or
- DONE, the semaphore is placed in the DONE state and the
- current task is resumed following the signal ESR.
-
- CALLING SEQUENCE
-
- ACCB = Semaphore number
- swi
- FCB .signal.
- return
-
- RETURN VALUE
-
- None. Registers unchanged.
-
- EXAMPLE
-
- Assume that the current task wishes to signal the
- occurrence of a particular event. The event is
- associated with a named semaphore, EVNTSEMA. The task
- signals the semaphore by the following procedure:
-
- EVNTSEMA equ 15 Named semaphore #15
- .
- :
- ldab #EVNTSEMA ACCB = semaphore # 15
- swi
- FCB .signal.
- . Point of continuation
-
-
-
-
-
- Copyright (c) 1989 Page 5 - 20 Motorola, Inc.
-
-
-
-
-
-
- MCX11 - MicroController eXecutive for the 68HC11
-
-
-
- Depending on the state of semaphore EVNTSEMA, the
- signal may or may not cause a context switch. The
- signalling task will continue processing at the
- instruction following the FCB declaration.
-
- SEE ALSO
-
- .pend., .wait.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Copyright (c) 1989 Page 5 - 21 Motorola, Inc.
-
-
-
-
-
-
- MCX11 - MicroController eXecutive for the 68HC11
-
-
-
- 5.12 .suspend. - SUSPEND A TASK
-
- CLASS
-
- Task control
-
- SYNOPSIS
-
- .suspend. (TASK) [10]
-
- DESCRIPTION
-
- The suspend directive causes the specified task to be
- placed into a suspended state. The suspended state
- will remain in force until it is removed by a resume,
- execute, or reset directive. A task may suspend
- itself. Task 0 indicates the SELF task.
-
- CALLING SEQUENCE
-
- ACCA = Task number (this may be SELF [0])
- swi
- FCB .suspend.
- return
-
- RETURN VALUE
-
- None. Registers unchanged.
-
- EXAMPLE
-
- The current task wants to suspend itself until some
- indeterminate point in the future. To do so, it makes
- the following request:
-
- clra ACCA = 0 means SELF
- swi
- FCB .suspend.
- . Point of continuation
-
- The task remains in a suspended state until resumed by
- a .resume. ESR issued from another task. At that time,
- the resumed task will continue at the instruction
- following the FCB declaration.
-
- SEE ALSO
-
- .resume.
-
-
-
-
-
-
-
- Copyright (c) 1989 Page 5 - 22 Motorola, Inc.
-
-
-
-
-
-
- MCX11 - MicroController eXecutive for the 68HC11
-
-
-
- 5.13 .terminate. - TERMINATE A TASK
-
- CLASS
-
- Task control
-
- SYNOPSIS
-
- .terminate. (TASK) [11]
-
- DESCRIPTION
-
- The terminate directive is used to terminate a task's
- operation. During termination, the task's state is
- cleared and the task state is set to Terminated. The
- timer queue is searched and all active timers for the
- task are purged. Also, all messages pending for the
- task are removed. A task number of 0 indicates self
- termination. In all cases, the highest priority task
- will execute next.
-
- CALLING SEQUENCE
-
- ACCA = Task number (may be = 0 if terminating SELF)
- swi
- .terminate.
- return
-
- RETURN VALUE
-
- None. Registers unchanged. Returns only if not
- terminating SELF.
-
- EXAMPLE
-
- The current task commits suicide by terminating itself
- with the following procedure:
-
- clra ACCA = 0 means SELF
- swi
- FCB .terminate.
-
- There is no point of continuation following a suicide.
- If another task is terminated by the current task, the
- current task will continue processing at the
- instruction following the FCB declaration.
-
- SEE ALSO
-
- .purge.
-
-
-
-
-
- Copyright (c) 1989 Page 5 - 23 Motorola, Inc.
-
-
-
-
-
-
- MCX11 - MicroController eXecutive for the 68HC11
-
-
-
- 5.14 .timer. - START A TIMER
-
- CLASS
-
- Timer
-
- SYNOPSIS
-
- .timer. (TASK,SEMA,TOCK) [14]
-
- DESCRIPTION
-
- The timer directive inserts an entry of the specified
- time duration into the timer queue. The timer can be
- cyclic or one-shot. Cyclic timers are indicated by a
- negative duration while one-shots are of positive
- duration. Further options allow the timer to be
- associated either with a specified task number (0 =
- SELF) or a semaphore number. After the timer is
- inserted, the current task is resumed. See the
- Advanced Topic section for task versus semaphore-based
- timers.
-
- CALLING SEQUENCE
-
- ACCA = Task number (0 if SELF)
- ACCB = Semaphore number (0 if task's semaphore)
- IX = Number of clock tocks in timer. If > 0, timer is a
- one-shot. If < 0, timer is cyclic.
- swi
- FCB .timer.
- return
-
- RETURN VALUE
-
- None. ACCA will contain the current task number if ACCA
- was = 0 at swi. Other registers unchanged.
-
- EXAMPLE
-
- Example #1:
-
- Assume that the current task wants to set up a one-shot
- timer of 5 seconds. Also assume that the RTI is used as
- the time base using a 2**23 crystal and the clock TICK
- is defined to be 15.625 msec. Furthermore, there are 8
- TICKS per TOCK so that a TOCK is 125 msec. The setup of
- a 5 second timer associated with a named semaphore,
- TIMEOUT, would appear as:
-
-
-
-
-
-
- Copyright (c) 1989 Page 5 - 24 Motorola, Inc.
-
-
-
-
-
-
- MCX11 - MicroController eXecutive for the 68HC11
-
-
-
- TOCK equ 8
- TOCKTIME equ 1000/8 TOCKTIME = 125 msec
- TIMEOUT equ 3 Named semaphore #3
- .
- :
- clra Task is self (ACCA=0)
- ldab #TIMEOUT Semaphore = TIMEOUT
- ldx #5000/TOCKTIME Timer = 40 TOCKS
- swi
- FCB .timer.
- . Point of continuation
-
- The current task would continue processing immediately
- after the ESR is finished because the .timer. ESR does
- not cause the requestor to be put into a WAIT state nor
- is there a context switch possible. The task may
- attempt to wait on the timer semaphore at some later
- time.
-
- SEE ALSO
-
- .purge.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Copyright (c) 1989 Page 5 - 25 Motorola, Inc.
-
-
-
-
-
-
- MCX11 - MicroController eXecutive for the 68HC11
-
-
-
- 5.15 .wait. - WAIT ON SEMAPHORE
-
- CLASS
-
- Semaphore
-
- SYNOPSIS
-
- .wait. (SEMA) [1]
-
- DESCRIPTION
-
- The wait directive is a fundamental function in MCX11.
- It is used to make a task wait for a specified event to
- occur. The event must be associated with the given
- semaphore. If the semaphore is found to be in a
- PENDing state, the task is placed into an Event Wait
- state and the semaphore is changed to WAITing, and the
- context of the current task is saved. If the semaphore
- is in a DONE state, no wait occurs and the task resumes
- immediately. Upon task resumption, the wait directive
- returns the semaphore number of the event which
- occurred.
-
- CALLING SEQUENCE
-
- ACCB = Semaphore number
- swi
- FCB .wait.
- return
-
- RETURN VALUE
-
- None. Registers unchanged.
-
- EXAMPLE
-
- The current task wants to wait on a timer semaphore set
- up by a previous .timer. request. The semaphore is a
- named semaphore, TIMEOUT. The procedure would appear as
- follows:
-
- TIMEOUT equ 3 Semaphore #3
- .
- :
- ldab #TIMEOUT ACCB = semaphore # 3
- swi
- FCB .wait.
- . Point of continuation
-
- The current task is put into a WAIT state on semaphore
- TIMEOUT as a result of this request. It will remain in
-
-
-
- Copyright (c) 1989 Page 5 - 26 Motorola, Inc.
-
-
-
-
-
-
- MCX11 - MicroController eXecutive for the 68HC11
-
-
-
- this state until another task, in this case, the clock
- driver, signals TIMEOUT that the timer period has
- elapsed. The task would then continue at the
- instruction following the FCB.
-
- SEE ALSO
-
- .pend., .signal.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Copyright (c) 1989 Page 5 - 27 Motorola, Inc.
-
-
-
-
-
-
- MCX11 - MicroController eXecutive for the MC68HC11
-
-
-
- SECTION 6
-
- SYSTEM CONFIGURATION
-
-
- 6.1 SYSTEM CONFIGURATION CONCEPTS
-
- Another configuration concept central to the operation of
- MCX11 is that of pre-definition. Most real time systems
- used in embedded operations have a fairly static
- configuration. That is to say, the equipment configuration
- is not subject to frequent changes nor is the basic system
- functionality. Consequently, the system designer can define
- the operating environment so that the operating system
- dynamics are avoided to the greatest degree possible. In
- other words, the number of tasks concurrently executing may
- change but the relative priorities of tasks remain fixed.
- Thus task priorities can be pre-assigned. The amount of
- free memory can be computed and established, number of
- queues and their sizes, and the number of timers and
- semaphores are all defined prior to runtime. The result is
- that MCX11 works in an established environment which yields
- the effect of less system overhead, smaller code, and
- faster execution; all three being desirable in a real time
- system.
-
- In order to define a MCX11 system configuration it is
- necessary to configure those data and control structures
- with the application specific information which MCX11
- requires. The configuration is done by creating AS11 source
- code files which define the necessary information needed to
- assemble with MCX11 source code to define a particular
- configuration. The following paragraphs describe the
- techniques.
-
-
- 6.2 MCX11 SYSTEM TABLE MEMORY REQUIREMENTS
-
- MCX11 system tables must necessarily reside in an area of
- RAM. This section is included to assist the system designer
- in determining the amount of ROM and RAM required for MCX11
- tables. The amount of RAM and ROM may be computed from the
- equations below given the following system configuration
- information:
-
- NTASKS The number of tasks
- NNAMSEM The number of named semaphores
- NQUEUES The number of queues
- NTIMERS The number of timers
-
-
-
-
-
-
- Copyright (c) 1989 Page 6 - 1 Motorola, Inc.
-
-
-
-
-
-
- MCX11 - MicroController eXecutive for the MC68HC11
-
-
-
- The symbols above are used by MCX11 and should be considered
- reserved symbols. These numbers are obviously exclusive of
- any RAM and ROM requirements of the application tasks.
-
- Tasks
-
- A Task Control Block occupies 5 bytes of RAM and 7
- bytes of ROM.
-
- TASK bytes (RAM) = NTASKS * 5 + 5
- TASK bytes (ROM) = NTASKS * 7
-
- Semaphores
-
- Each semaphore requires 1 byte of RAM. Total system
- area required for semaphore control is the number of
- named semaphores + the number of tasks + 2 times the
- number of queues.
-
- SEMA bytes (RAM) = NNAMSEM + NTASKS + 2 * NQUEUES
-
-
- Queues
-
- Each queue consists of a queue header and the queue
- body. Each queue header requires 3 bytes of RAM and 6
- bytes of ROM. Each defined queue body requires an area
- of RAM defined by the product of its Width (W) and its
- Depth (D).
-
- QUEUE bytes (RAM) = NQUEUES * 3 + Sum(Wi * Di),
- where Wi is the width and Di
- is the depth of the ith queue,
- and i ranges from 1 - NQUEUES.
-
- QUEUE bytes (ROM) = NQUEUES * 6
-
-
- Clock
-
- Timers require 8 bytes of RAM each. The total area
- required for timer control and storage is the product
- of 8 and the number of defined timers.
-
- TIMER bytes (RAM) = NTIMERS * 8
-
-
-
-
-
-
-
-
-
-
- Copyright (c) 1989 Page 6 - 2 Motorola, Inc.
-
-
-
-
-
-
- MCX11 - MicroController eXecutive for the MC68HC11
-
-
-
- SECTION 7
-
- DEVICE DRIVER & INTERRUPTS
-
-
- 7.1 DRIVER CONCEPTS
-
- Device drivers are program modules which provide an
- organized software interface between a physical device and
- the application programs using the device. The intent is to
- mask the specifics of the device's hardware peculiarities
- from the application software. By doing so, the application
- code need only conform to the protocol which the device
- driver expects in order to perform a function. Each device
- driver may have a protocol unique to its function, i.e., a
- disk driver has different functional requirements from an
- analog-to-digital converter.
-
- In order to accommodate the wide range of devices which are
- found in real-time systems, the device drivers in MCX11 are
- structured as tasks. As a task, a device driver has the
- most flexible environment with complete access to system
- resources via the Executive Service Requests. Actually, a
- device driver usually consists of two parts: the driver
- task, and the interrupt service routine (ISR). The latter
- is used when the device can cause an interrupt to signal the
- completion of a function or the availability of the device.
-
- An ISR exists to handle an exception in the normal flow of
- processing. The general philosophy of MCX11 drivers is to
- minimize the time spent in the interrupt service routine and
- let the task portion handle the real work of the driver.
- This design concept places no restrictions on the designer
- for either the ISR or the task functionality. The structure
- of the ISR is explained more completely in the following
- section.
-
-
- 7.2 INTERRUPT SERVICE
-
- The classic interrupt processing philosophy is to
- acknowledge the interrupt and save the current processor
- context. Then a branch is made to a software routine where
- the code services the specific interrupt and performs any
- required operations. When the interrupt service routine is
- complete, control of the main program is resumed at the
- point of interruption. MCX11 uses a modified version of
- that sequence.
-
- The MC68HC11 microcontroller always pushes the current
- processor context of nine (9) bytes on the active stack when
- an interrupt occurs. That having been done, it acknowledges
-
-
-
- Copyright (c) 1989 Page 7 - 1 Motorola, Inc.
-
-
-
-
-
-
- MCX11 - MicroController eXecutive for the MC68HC11
-
-
-
- the interrupt and vectors automatically to the specific ISR
- written for that event. The user must initialize each two-
- byte interrupt vector location specific to his application
- as part of the initialization code.
-
- MCX11 presets the vector locations for the following
- interrupts. All others not specifically reserved by the
- MC68HC11 are available to the user.
-
- Event Address
-
- Clock (RTI) $FFF0-$FFF1
- MCX11 ESR request $FFF6-$FFF7
- Power On/Reset $FFFE-$FFFF
-
- MCX11 uses a modified version of the classical ISR approach.
- The sequence is the same until the return to the interrupted
- program is made at the end of the ISR. In MCX11, an
- interrupt may be the event for which a task is waiting. If
- so, a notification of the event's occurrence must be given
- to the task. But the possibility exists that the waiting
- task has a higher priority than the interrupted task.
- Notification of the event should remove the wait state from
- the higher priority task thus making it runnable, assuming
- it is not otherwise blocked.
-
- At that point, a decision has to be made as to how to
- continue. Whichever task is of higher priority, the one
- interrupted or the one which was waiting, it will be the one
- to resume processing. If it is the interrupted task, it
- resumes at the point of interruption as in the classic
- sequence. If the latter task is of higher priority, a
- context switch is performed in which it is made the current
- task. Its processor context is restored from its stack and
- the task resumes at the location following the ESR which
- caused it to wait. The interrupted task remains runnable and
- will continue at the point of its interruption at some later
- time when it becomes the highest priority runnable task.
-
- MCX11 provides a common exit routine to which all ISRs
- should branch if there is the possibility of a context
- switch as the result of the interrupt. The function's
- primary responsibility is to signal a specified semaphore of
- the occurrence of an event and to dispatch control to the
- highest priority task which is runnable after the interrupt
- has been serviced.
-
-
- 7.2.1 Interrupt Processing Variables
-
- In order for MCX11 interrupt servicing to operate properly,
- it is necessary to observe a few rules of the road. There
-
-
-
- Copyright (c) 1989 Page 7 - 2 Motorola, Inc.
-
-
-
-
-
-
- MCX11 - MicroController eXecutive for the MC68HC11
-
-
-
- are some system variables which are used during interrupt
- processing in the ISR and in the common ISR exit routine.
- These variables must be used only in the ISR and should not
- be used elsewhere. A listing of the variables and a brief
- description of them follows. Their addresses are also given
- as a displacement from the base address of the MCX11 system
- variables, MCXVAR. MCXVAR may be located at any RAM address
- but must be predefined and assembled with the MCX11 kernel
- code.
-
- intlvl (address MCXVAR+11)
-
- This byte variable is a counter of the number of
- interrupts stacked but not yet processed completely.
- When an interrupt occurs in a task, intlvl will always
- contain a value of zero. The ISR code must increment it
- by 1 to indicate that an ISR is in process. If a task
- calls the MCX11 kernel, intlvl is incremented to a
- value of 1. If an interrupt were to occur while control
- is in the MCX11 kernel, intlvl would be incremented to
- 2 by the ISR, etc.
-
- MCX11 allows the existence of interruptible ISRs;
- therefore, intlvl can assume any value up to the number
- of possible interrupts in the system. As interrupts are
- processed by the common ISR exit logic, intlvl is
- decremented. A resumption of processing at the task
- level can only occur when the decremented value of
- intlvl becomes zero. Otherwise, the non-zero value
- indicates the existence of an interrupt which has been
- incompletely serviced. In that case, the common ISR
- exit logic returns control to the interrupted ISR and
- resumes processing at that point. Thus, nested
- interrupts and re-entrant ISRs are handled cleanly,
- quickly, and automatically by MCX11.
-
- curtsk (address MCXVAR+5)
-
- This byte variable contains the number of the current
- task. It is to be considered a READ-ONLY variable. The
- user should NEVER write to this variable. It is needed
- during ISR processing to determine if the MCX11
- Dispatcher was interrupted.
-
- curtcb (address MCXVAR+6)
-
- This 2-byte variable contains the address of the
- current task's Task Control Block (TCB). The TCB
- contains an entry for the task's stack pointer. MCX11
- interrupt processing requires that the ISR which
- increments intlvl to a value of 1 must also save the
-
-
-
-
- Copyright (c) 1989 Page 7 - 3 Motorola, Inc.
-
-
-
-
-
-
- MCX11 - MicroController eXecutive for the MC68HC11
-
-
-
- current task's stack pointer in its TCB. The variable,
- curtcb, is READ-ONLY.
-
-
- 7.2.2 Interrupt Processing Code
-
- All ISRs which have the capability of causing a context
- switch should incorporate the following routine as in-line
- code in the ISR. If the ISR is to be allowed to enable
- interrupts, this code should precede the CLI instruction. As
- a rule it should occur early in the ISR but there are
- exceptions. (Refer to the MCX11 clock driver's ISR, whose
- entry address has the symbol rtiisr, for a good example of
- an exception to the rule.)
-
- Note that the label, notlvl0, used in the code segment below
- will need to be changed for each ISR. The symbols ACTSP and
- SYSTACK are not variables and should not be changed. ACTSP
- is equated to the value of 1 and represents the displacement
- into the TCB where the task's stack pointer is stored.
- SYSTACK is the location of the base of the System Stack area
- and is defined in the System Configuration source code file,
- SYSTEM.AS.
-
-
- tst intlvl Test for task level interrupt
- bne notlvl0 Branch if not task level int
- tst curtsk See if Dispatcher interrupted
- beq notlvl0 Branch if so
- ldx curtcb Get task's TCB address
- sts ACTSP,x Save task's stack pointer
- lds #SYSTACK Change to System Stack
- notlvl0 inc intlvl Increment the interrupt level
-
- After this point, the CLI instruction may be inserted
- if desired.
-
-
- The interrupt service code follows. An important factor in
- interrupt processing throughput is the length of time
- interrupts are disabled during the ISR. In all ISRs,
- interrupts must be disabled long enough to perform the code
- segment above and only then should interrupts be re-enabled.
- Ideally, interrupt routines should be performed with
- interrupts enabled to allow other interrupts to be serviced.
-
- The exit from the ISR routine is via a branch to the MCX11
- common Interrupt Service Routine Exit routine located at the
- address having the symbol, isrrtn. This routine allows for
- optionally signalling a semaphore during the exit process.
- The ISR may wish to signal a semaphore that the event
- associated with the interrupt has occurred. To do so, the
-
-
-
- Copyright (c) 1989 Page 7 - 4 Motorola, Inc.
-
-
-
-
-
-
- MCX11 - MicroController eXecutive for the MC68HC11
-
-
-
- ISR simply puts the number of the semaphore to be signalled
- into the B-Accumulator and the executes a branch to isrrtn.
- From there on, the further processing of the interrupt is
- performed automatically by MCX11. As an example, assume the
- ISR wants to signal a semaphore and that the label used for
- the semaphore is EVNTSEMA. Then the concluding code segment
- in the ISR is
-
-
- ldab #EVNTSEMA Load ACCB with semaphore #
- jmp isrrtn Jump to exit logic.
-
-
- If no semaphore is to be signalled during the exit routine,
- the ISR should make sure that the B-Accumulator is cleared
- before branching to isrrtn.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Copyright (c) 1989 Page 7 - 5 Motorola, Inc.
-
-
-
-
-
-
- MCX11 - MicroController eXecutive for the MC68HC11
-
-
-
- SECTION 8
-
- ADVANCED TOPICS
-
-
- 8.1 OTHER TOPICS
-
- Other topics of interest will be added to this section as
- they are researched and documented.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Copyright (c) 1989 Page 8 - 1 Motorola, Inc.
-
-
-
-
-
-
- MCX11 - MicroController eXecutive for the MC68HC11
-
-
-
- APPENDIX A
-
- MCX11 DISTRIBUTED SOURCE FILES
-
-
- MCX11 is distributed as a collection of files. Those files
- and their purposes are briefly described below.
-
- CLKDRVR.AS
-
- The AS11 source code of the RTI clock driver and RTI
- Interrupt Service Routine.
-
- ESREQU.AS
-
- These are just the equates for MCX11 ESRs included for
- completeness.
-
- MCX.AS
-
- This is the AS11 source code of the MCX11 kernel. Unless you
- are expanding the functions of the kernel or fixing a
- reported bug, this file probably won't change too much.
-
- SYSTEM.AS
-
- This AS11 source code file contains the application specific
- information and should be studied very closely. It also
- contains initialization code which may be necessary to
- change to meet the needs of a given application. The file is
- pre-configured with the specifications needed for the
- demonstration programs in file TEST.AS.
-
- TEST.AS
-
- This is an AS11 source code file containing 4 tasks which
- demonstrate the use of all of the MCX11 ESRs. It doesn't do
- anything practical except to give the user a limited look at
- how to accomplish certain operations.
-
- VECTORS.AS
-
- AS11 source code containing all of the vectors used by
- MCX11. This file may need to be edited for a given
- application.
-
- ASSEMBLE.BAT
-
- A MS-DOS Batch file used to assemble MCX11 and the TEST
- programs. It also produces a listing file.
-
- MANUAL.DOC
-
-
-
- Copyright (c) 1989 Page A - 1 Motorola, Inc.
-
-
-
-
-
-
- MCX11 - MicroController eXecutive for the MC68HC11
-
-
-
-
- The MCX11 User's Manual is contained in this file. It can be
- printed out directly to any ASCII compatible printer.
-
- README.DOC
-
- Some notes about getting started with MCX11.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Copyright (c) 1989 Page A - 2 Motorola, Inc.
-
-
-