OpenCores
URL https://opencores.org/ocsvn/or1k/or1k/trunk

Subversion Repositories or1k

Compare Revisions

  • This comparison shows the changes necessary to convert path
    /or1k/trunk/rtems-20020807/doc/common
    from Rev 1028 to Rev 1765
    Reverse comparison

Rev 1028 → Rev 1765

/wksheets.t
0,0 → 1,409
@c ****** This comment is here to remind you not to edit the wksheets.t
@c ****** in any directory but common.
@c
@c Figures ...
@c RTEMS RAM Workspace Worksheet
@c RTEMS Code Space Worksheet
@c
@c COPYRIGHT (c) 1988-2002.
@c On-Line Applications Research Corporation (OAR).
@c All rights reserved.
@c
@c wksheets.t,v 1.7 2002/01/17 21:47:44 joel Exp
@c
 
@chapter Memory Requirements
 
@section Introduction
 
Memory is typically a limited resource in real-time
embedded systems, therefore, RTEMS can be configured to utilize
the minimum amount of memory while meeting all of the
applications requirements. Worksheets are provided which allow
the RTEMS application developer to determine the amount of RTEMS
code and RAM workspace which is required by the particular
configuration. Also provided are the minimum code space,
maximum code space, and the constant data space required by
RTEMS.
 
@section Data Space Requirements
 
RTEMS requires a small amount of memory for its
private variables. This data area must be in RAM and is
separate from the RTEMS RAM Workspace. The following
illustrates the data space required for all configurations of
RTEMS:
 
@itemize @bullet
@item Data Space: RTEMS_DATA_SPACE
@end itemize
 
@section Minimum and Maximum Code Space Requirements
 
A maximum configuration of RTEMS includes the core
and all managers, including the multiprocessing manager.
Conversely, a minimum configuration of RTEMS includes only the
core and the following managers: initialization, task, interrupt
and fatal error. The following illustrates the code space
required by these configurations of RTEMS:
 
@itemize @bullet
@item Minimum Configuration: RTEMS_MINIMUM_CONFIGURATION
@item Maximum Configuration: RTEMS_MAXIMUM_CONFIGURATION
@end itemize
 
@section RTEMS Code Space Worksheet
 
The RTEMS Code Space Worksheet is a tool provided to
aid the RTEMS application designer to accurately calculate the
memory required by the RTEMS run-time environment. RTEMS allows
the custom configuration of the executive by optionally
excluding managers which are not required by a particular
application. This worksheet provides the included and excluded
size of each manager in tabular form allowing for the quick
calculation of any custom configuration of RTEMS. The RTEMS
Code Space Worksheet is below:
 
@ifset use-ascii
@page
@end ifset
@ifset use-tex
@page
@end ifset
 
@page
@center @b{RTEMS Code Space Worksheet}
@sp 1
 
@ifset use-ascii
 
The following is a list of the components of the RTEMS code space. The first
number in parentheses is the size when the component is included,
while the second number indicates its size when not included. If the second
number is "NA", then the component must always be included.
 
@itemize @bullet
@item Core (RTEMS_CORE_CODE_SIZE, NA)
@item Initialization (RTEMS_INITIALIZATION_CODE_SIZE, NA)
@item Task (RTEMS_TASK_CODE_SIZE, NA)
@item Interrupt (RTEMS_INTERRUPT_CODE_SIZE, NA)
@item Clock (RTEMS_CLOCK_CODE_SIZE, NA)
@item Timer (RTEMS_TIMER_CODE_SIZE, RTEMS_TIMER_CODE_OPTSIZE)
@item Semaphore (RTEMS_SEMAPHORE_CODE_SIZE, RTEMS_SEMAPHORE_CODE_OPTSIZE)
@item Message (RTEMS_MESSAGE_CODE_SIZE, RTEMS_MESSAGE_CODE_OPTSIZE)
@item Event (RTEMS_EVENT_CODE_SIZE, RTEMS_EVENT_CODE_OPTSIZE)
@item Signal (RTEMS_SIGNAL_CODE_SIZE, RTEMS_SIGNAL_CODE_OPTSIZE)
@item Partition (RTEMS_PARTITION_CODE_SIZE, RTEMS_PARTITION_CODE_OPTSIZE)
@item Region (RTEMS_REGION_CODE_SIZE, RTEMS_REGION_CODE_OPTSIZE)
@item Dual Ported Memory (RTEMS_DPMEM_CODE_SIZE, RTEMS_DPMEM_CODE_OPTSIZE)
@item I/O (RTEMS_IO_CODE_SIZE, RTEMS_IO_CODE_OPTSIZE)
@item Fatal Error (RTEMS_FATAL_ERROR_CODE_SIZE, NA)
@item Rate Monotonic (RTEMS_RATE_MONOTONIC_CODE_SIZE, RTEMS_RATE_MONOTONIC_CODE_OPTSIZE)
@item Multiprocessing (RTEMS_MULTIPROCESSING_CODE_SIZE, RTEMS_MULTIPROCESSING_CODE_OPTSIZE)
@end itemize
@end ifset
 
@ifset use-tex
 
@tex
\line{\hskip 0.50in\vbox{\offinterlineskip\halign{
\vrule\strut#&
\hbox to 2.25in{\enskip\hfil#\hfil}&
\vrule#&
\hbox to 1.00in{\enskip\hfil#\hfil}&
\vrule#&
\hbox to 1.00in{\enskip\hfil#\hfil}&
\vrule#&
\hbox to 1.25in{\enskip\hfil#\hfil}&
\vrule#\cr
\noalign{\hrule}
&\bf Component && \bf Included && \bf Not Included && \bf Size &\cr\noalign{\hrule}
&Core && RTEMS_CORE_CODE_SIZE && NA && &\cr\noalign{\hrule}
&Initialization && RTEMS_INITIALIZATION_CODE_SIZE && NA && &\cr\noalign{\hrule}
&Task && RTEMS_TASK_CODE_SIZE && NA && &\cr\noalign{\hrule}
&Interrupt && RTEMS_INTERRUPT_CODE_SIZE && NA && &\cr\noalign{\hrule}
&Clock && RTEMS_CLOCK_CODE_SIZE && NA && &\cr\noalign{\hrule}
&Timer && RTEMS_TIMER_CODE_SIZE && RTEMS_TIMER_CODE_OPTSIZE && &\cr\noalign{\hrule}
&Semaphore && RTEMS_SEMAPHORE_CODE_SIZE && RTEMS_SEMAPHORE_CODE_OPTSIZE && &\cr\noalign{\hrule}
&Message && RTEMS_MESSAGE_CODE_SIZE && RTEMS_MESSAGE_CODE_OPTSIZE && &\cr\noalign{\hrule}
&Event && RTEMS_EVENT_CODE_SIZE && RTEMS_EVENT_CODE_OPTSIZE && &\cr\noalign{\hrule}
&Signal && RTEMS_SIGNAL_CODE_SIZE && RTEMS_SIGNAL_CODE_OPTSIZE && &\cr\noalign{\hrule}
&Partition && RTEMS_PARTITION_CODE_SIZE && RTEMS_PARTITION_CODE_OPTSIZE && &\cr\noalign{\hrule}
&Region && RTEMS_REGION_CODE_SIZE && RTEMS_REGION_CODE_OPTSIZE && &\cr\noalign{\hrule}
&Dual Ported Memory && RTEMS_DPMEM_CODE_SIZE && RTEMS_DPMEM_CODE_OPTSIZE && &\cr\noalign{\hrule}
&I/O && RTEMS_IO_CODE_SIZE && RTEMS_IO_CODE_OPTSIZE && &\cr\noalign{\hrule}
&Fatal Error && RTEMS_FATAL_ERROR_CODE_SIZE && NA && &\cr\noalign{\hrule}
&Rate Monotonic && RTEMS_RATE_MONOTONIC_CODE_SIZE && RTEMS_RATE_MONOTONIC_CODE_OPTSIZE && &\cr\noalign{\hrule}
&Multiprocessing && RTEMS_MULTIPROCESSING_CODE_SIZE && RTEMS_MULTIPROCESSING_CODE_OPTSIZE && &\cr\noalign{\hrule}
&\multispan 5 \bf\hfil Total Code Space Requirements\qquad\hfil&&&\cr\noalign{\hrule}
}}\hfil}
@end tex
@end ifset
 
@ifset use-html
@html
<CENTER>
<TABLE COLS=4 WIDTH="80%" BORDER=2>
<TR><TD ALIGN=center><STRONG>Component</STRONG></TD>
<TD ALIGN=center><STRONG>Included</STRONG></TD>
<TD ALIGN=center><STRONG>Not Included</STRONG></TD>
<TD ALIGN=center><STRONG>Size</STRONG></TD></TR>
<TR><TD ALIGN=center>Core</TD>
<TD ALIGN=center>RTEMS_CORE_CODE_SIZE</TD>
<TD ALIGN=center>NA</TD>
<TD><BR></TD></TR>
<TR><TD ALIGN=center>Initialization</TD>
<TD ALIGN=center>RTEMS_INITIALIZATION_CODE_SIZE</TD>
<TD ALIGN=center>NA</TD>
<TD><BR></TD></TR>
<TR><TD ALIGN=center>Task</TD>
<TD ALIGN=center>RTEMS_TASK_CODE_SIZE</TD>
<TD ALIGN=center>NA</TD>
<TD><BR></TD></TR>
<TR><TD ALIGN=center>Interrupt</TD>
<TD ALIGN=center>RTEMS_INTERRUPT_CODE_SIZE</TD>
<TD ALIGN=center>NA</TD>
<TD><BR></TD></TR>
<TR><TD ALIGN=center>Clock</TD>
<TD ALIGN=center>RTEMS_CLOCK_CODE_SIZE</TD>
<TD ALIGN=center>NA</TD>
<TD><BR></TD></TR>
<TR><TD ALIGN=center>Timer</TD>
<TD ALIGN=center>RTEMS_TIMER_CODE_SIZE</TD>
<TD ALIGN=center>RTEMS_TIMER_CODE_OPTSIZE</TD>
<TD><BR></TD></TR>
<TR><TD ALIGN=center>Semaphore</TD>
<TD ALIGN=center>RTEMS_SEMAPHORE_CODE_SIZE</TD>
<TD ALIGN=center>RTEMS_SEMAPHORE_CODE_OPTSIZE</TD>
<TD><BR></TD></TR>
<TR><TD ALIGN=center>Message</TD>
<TD ALIGN=center>RTEMS_MESSAGE_CODE_SIZE</TD>
<TD ALIGN=center>RTEMS_MESSAGE_CODE_OPTSIZE</TD>
<TD><BR></TD></TR>
<TR><TD ALIGN=center>Event</TD>
<TD ALIGN=center>RTEMS_EVENT_CODE_SIZE</TD>
<TD ALIGN=center>RTEMS_EVENT_CODE_OPTSIZE</TD>
<TD><BR></TD></TR>
<TR><TD ALIGN=center>Signal</TD>
<TD ALIGN=center>RTEMS_SIGNAL_CODE_SIZE</TD>
<TD ALIGN=center>RTEMS_SIGNAL_CODE_OPTSIZE</TD>
<TD><BR></TD></TR>
<TR><TD ALIGN=center>Partition</TD>
<TD ALIGN=center>RTEMS_PARTITION_CODE_SIZE</TD>
<TD ALIGN=center>RTEMS_PARTITION_CODE_OPTSIZE</TD>
<TD><BR></TD></TR>
<TR><TD ALIGN=center>Region</TD>
<TD ALIGN=center>RTEMS_REGION_CODE_SIZE</TD>
<TD ALIGN=center>RTEMS_REGION_CODE_OPTSIZE</TD>
<TD><BR></TD></TR>
<TR><TD ALIGN=center>Dual Ported Memory</TD>
<TD ALIGN=center>RTEMS_DPMEM_CODE_SIZE</TD>
<TD ALIGN=center>RTEMS_DPMEM_CODE_OPTSIZE</TD>
<TD><BR></TD></TR>
<TR><TD ALIGN=center>I/O</TD>
<TD ALIGN=center>RTEMS_IO_CODE_SIZE</TD>
<TD ALIGN=center>RTEMS_IO_CODE_OPTSIZE</TD>
<TD><BR></TD></TR>
<TR><TD ALIGN=center>Fatal Error</TD>
<TD ALIGN=center>RTEMS_FATAL_ERROR_CODE_SIZE</TD>
<TD ALIGN=center>NA</TD>
<TD><BR></TD></TR>
<TR><TD ALIGN=center>Rate Monotonic</TD>
<TD ALIGN=center>RTEMS_RATE_MONOTONIC_CODE_SIZE</TD>
<TD ALIGN=center>RTEMS_RATE_MONOTONIC_CODE_OPTSIZE</TD>
<TD><BR></TD></TR>
<TR><TD ALIGN=center>Multiprocessing</TD>
<TD ALIGN=center>RTEMS_MULTIPROCESSING_CODE_SIZE</TD>
<TD ALIGN=center>RTEMS_MULTIPROCESSING_CODE_OPTSIZE</TD>
<TD><BR></TD></TR>
<TR><TD ALIGN=center COLSPAN=3>
<STRONG>Total Code Space Requirements</STRONG></TD>
<TD><BR></TD></TR>
</TABLE>
</CENTER>
@end html
@end ifset
 
@page
 
@c ****** Next node is set by a sed script in the document Makefile.
@c ****** This comment is here to remind you not to edit the wksheets.t
@c ****** in any directory but common.
 
@section RTEMS RAM Workspace Worksheet
 
The RTEMS RAM Workspace Worksheet is a tool provided
to aid the RTEMS application designer to accurately calculate
the minimum memory block to be reserved for RTEMS use. This
worksheet provides equations for calculating the amount of
memory required based upon the number of objects configured,
whether for single or multiple processor versions of the
executive. This information is presented in tabular form, along
with the fixed system requirements, allowing for quick
calculation of any application defined configuration of RTEMS.
The RTEMS RAM Workspace Worksheet is provided below:
 
@ifset use-ascii
@page
@end ifset
@ifset use-tex
@sp 2
@end ifset
 
@center @b{RTEMS RAM Workspace Worksheet}
@sp 2
 
@ifset use-ascii
The total RTEMS RAM Workspace required is the sum of the following:
 
@itemize @bullet
@item maximum_tasks * RTEMS_BYTES_PER_TASK
@item maximum_timers * RTEMS_BYTES_PER_TIMER
@item maximum_semaphores * RTEMS_BYTES_PER_SEMAPHORE
@item maximum_message_queues * RTEMS_BYTES_PER_MESSAGE_QUEUE
@item maximum_regions * RTEMS_BYTES_PER_REGION
@item maximum_partitions * RTEMS_BYTES_PER_PARTITION
@item maximum_ports * RTEMS_BYTES_PER_PORT
@item maximum_periods * RTEMS_BYTES_PER_PERIOD
@item maximum_extensions * RTEMS_BYTES_PER_EXTENSION
@item Floating Point Tasks * RTEMS_BYTES_PER_FP_TASK
@item Task Stacks
@item maximum_nodes * RTEMS_BYTES_PER_NODE
@item maximum_global_objects * RTEMS_BYTES_PER_GLOBAL_OBJECT
@item maximum_proxies * RTEMS_BYTES_PER_PROXY
@item Fixed System Requirements of RTEMS_BYTES_OF_FIXED_SYSTEM_REQUIREMENTS
@end itemize
@end ifset
 
@ifset use-tex
@tex
\line{\hskip 0.75in\vbox{\offinterlineskip\halign{
\vrule\strut#&
\hbox to 3.0in{\enskip\hfil#\hfil}&
\vrule#&
\hbox to 0.75in{\enskip\hfil#\hfil}&
\vrule#&
\hbox to 1.25in{\enskip\hfil#\hfil}&
\vrule#\cr
\noalign{\hrule}
& \bf Description && \bf Equation && \bf Bytes Required &\cr\noalign{\hrule}
& maximum\_tasks && * RTEMS_BYTES_PER_TASK = &&&\cr\noalign{\hrule}
& maximum\_timers && * RTEMS_BYTES_PER_TIMER = &&&\cr\noalign{\hrule}
& maximum\_semaphores && * RTEMS_BYTES_PER_SEMAPHORE = &&&\cr\noalign{\hrule}
& maximum\_message\_queues && * RTEMS_BYTES_PER_MESSAGE_QUEUE = &&&\cr\noalign{\hrule}
& maximum\_regions && * RTEMS_BYTES_PER_REGION = &&&\cr\noalign{\hrule}
& maximum\_partitions && * RTEMS_BYTES_PER_PARTITION = &&&\cr\noalign{\hrule}
& maximum\_ports && * RTEMS_BYTES_PER_PORT = &&&\cr\noalign{\hrule}
& maximum\_periods && * RTEMS_BYTES_PER_PERIOD = &&&\cr\noalign{\hrule}
& maximum\_extensions && * RTEMS_BYTES_PER_EXTENSION = &&&\cr\noalign{\hrule}
& Floating Point Tasks && * RTEMS_BYTES_PER_FP_TASK = &&&\cr\noalign{\hrule}
& Task Stacks &&\hskip 2.3em=&&&\cr\noalign{\hrule}
& Total Single Processor Requirements &&&&&\cr\noalign{\hrule}
}}\hfil}
 
\line{\hskip 0.75in\vbox{\offinterlineskip\halign{
\vrule\strut#&
\hbox to 3.0in{\enskip\hfil#\hfil}&
\vrule#&
\hbox to 0.75in{\enskip\hfil#\hfil}&
\vrule#&
\hbox to 1.25in{\enskip\hfil#\hfil}&
\vrule#\cr
\noalign{\hrule}
& \bf Description && \bf Equation && \bf Bytes Required &\cr\noalign{\hrule}
& maximum\_nodes && * RTEMS_BYTES_PER_NODE = &&&\cr\noalign{\hrule}
& maximum\_global\_objects && * RTEMS_BYTES_PER_GLOBAL_OBJECT = &&&\cr\noalign{\hrule}
& maximum\_proxies && * RTEMS_BYTES_PER_PROXY = &&&\cr\noalign{\hrule}
}}\hfil}
 
\line{\hskip 0.75in\vbox{\offinterlineskip\halign{
\vrule\strut#&
\hbox to 3.0in{\enskip\hfil#\hfil}&
\vrule#&
\hbox to 0.75in{\enskip\hfil#\hfil}&
\vrule#&
\hbox to 1.25in{\enskip\hfil#\hfil}&
\vrule#\cr
\noalign{\hrule}
& Total Multiprocessing Requirements &&&&&\cr\noalign{\hrule}
& Fixed System Requirements && RTEMS_BYTES_OF_FIXED_SYSTEM_REQUIREMENTS &&&\cr\noalign{\hrule}
& Total Single Processor Requirements &&&&&\cr\noalign{\hrule}
& Total Multiprocessing Requirements &&&&&\cr\noalign{\hrule}
& Minimum Bytes for RTEMS Workspace &&&&&\cr\noalign{\hrule}
}}\hfil}
@end tex
@end ifset
 
@ifset use-html
@html
<CENTER>
<TABLE COLS=3 WIDTH="80%" BORDER=2>
<TR><TD ALIGN=center><STRONG>Description</STRONG></TD>
<TD ALIGN=center><STRONG>Equation</STRONG></TD>
<TD ALIGN=center><STRONG>Bytes Required</STRONG></TD></TR>
<TR><TD ALIGN=left>maximum_tasks</TD>
<TD ALIGN=right>* RTEMS_BYTES_PER_TASK =</TD>
<TD><BR></TD></TR>
<TR><TD ALIGN=left>maximum_timers</TD>
<TD ALIGN=right>* RTEMS_BYTES_PER_TIMER =</TD>
<TD><BR></TD></TR>
<TR><TD ALIGN=left>maximum_semaphores</TD>
<TD ALIGN=right>* RTEMS_BYTES_PER_SEMAPHORE =</TD>
<TD><BR></TD></TR>
<TR><TD ALIGN=left>maximum_message_queues</TD>
<TD ALIGN=right>* RTEMS_BYTES_PER_MESSAGE_QUEUE =</TD>
<TD><BR></TD></TR>
<TR><TD ALIGN=left>maximum_regions</TD>
<TD ALIGN=right>* RTEMS_BYTES_PER_REGION =</TD>
<TD><BR></TD></TR>
<TR><TD ALIGN=left>maximum_partitions</TD>
<TD ALIGN=right>* RTEMS_BYTES_PER_PARTITION =</TD>
<TD><BR></TD></TR>
<TR><TD ALIGN=left>maximum_ports</TD>
<TD ALIGN=right>* RTEMS_BYTES_PER_PORT =</TD>
<TD><BR></TD></TR>
<TR><TD ALIGN=left>maximum_periods</TD>
<TD ALIGN=right>* RTEMS_BYTES_PER_PERIOD =</TD>
<TD><BR></TD></TR>
<TR><TD ALIGN=left>maximum_extensions</TD>
<TD ALIGN=right>* RTEMS_BYTES_PER_EXTENSION =</TD>
<TD><BR></TD></TR>
<TR><TD ALIGN=left>Floating Point Tasks</TD>
<TD ALIGN=right>* RTEMS_BYTES_PER_FP_TASK =</TD>
<TD><BR></TD></TR>
<TR><TD ALIGN=left COLSPAN=2>Task Stacks</TD>
<TD><BR></TD></TR>
<TR><TD ALIGN=left COLSPAN=2>
<STRONG>Total Single Processor Requirements</STRONG></TD>
<TD><BR></TD></TR>
<TR></TR>
<TR><TD ALIGN=center><STRONG>Description</STRONG></TD>
<TD ALIGN=center><STRONG>Equation</STRONG></TD>
<TD ALIGN=center><STRONG>Bytes Required</STRONG></TD></TR>
<TR><TD ALIGN=left>maximum_nodes</TD>
<TD ALIGN=right>* RTEMS_BYTES_PER_NODE =</TD>
<TD><BR></TD></TR>
<TR><TD ALIGN=left>maximum_global_objects</TD>
<TD ALIGN=right>* RTEMS_BYTES_PER_GLOBAL_OBJECT =</TD>
<TD><BR></TD></TR>
<TR><TD ALIGN=left>maximum_proxies</TD>
<TD ALIGN=right>* RTEMS_BYTES_PER_PROXY =</TD>
<TD><BR></TD></TR>
<TR><TD ALIGN=left COLSPAN=2>
<STRONG>Total Multiprocessing Requirements</STRONG></TD>
<TD><BR></TD></TR>
<TR></TR>
<TR><TD ALIGN=left COLSPAN=2>Fixed System Requirements</TD>
<TD ALIGN=center>RTEMS_BYTES_OF_FIXED_SYSTEM_REQUIREMENTS</TD></TR>
<TR><TD ALIGN=left COLSPAN=2>Total Single Processor Requirements</TD>
<TD><BR></TD></TR>
<TR><TD ALIGN=left COLSPAN=2>Total Multiprocessing Requirements</TD>
<TD><BR></TD></TR>
<TR><TD ALIGN=left COLSPAN=2>
<STRONG>Minimum Bytes for RTEMS Workspace</STRONG></TD>
<TD><BR></TD></TR>
</TABLE>
</CENTER>
@end html
@end ifset
 
/Makefile.in
0,0 → 1,216
# Makefile.in generated by automake 1.6.2 from Makefile.am.
# @configure_input@
 
# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002
# Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
 
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
# PARTICULAR PURPOSE.
 
@SET_MAKE@
SHELL = @SHELL@
 
srcdir = @srcdir@
top_srcdir = @top_srcdir@
VPATH = @srcdir@
prefix = @prefix@
exec_prefix = @exec_prefix@
 
bindir = @bindir@
sbindir = @sbindir@
libexecdir = @libexecdir@
datadir = @datadir@
sysconfdir = @sysconfdir@
sharedstatedir = @sharedstatedir@
localstatedir = @localstatedir@
libdir = @libdir@
infodir = @infodir@
mandir = @mandir@
includedir = @includedir@
oldincludedir = /usr/include
pkgdatadir = $(datadir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@
top_builddir = ..
 
ACLOCAL = @ACLOCAL@
AUTOCONF = @AUTOCONF@
AUTOMAKE = @AUTOMAKE@
AUTOHEADER = @AUTOHEADER@
 
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
INSTALL = @INSTALL@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_DATA = @INSTALL_DATA@
install_sh_DATA = $(install_sh) -c -m 644
install_sh_PROGRAM = $(install_sh) -c
install_sh_SCRIPT = $(install_sh) -c
INSTALL_SCRIPT = @INSTALL_SCRIPT@
INSTALL_HEADER = $(INSTALL_DATA)
transform = @program_transform_name@
NORMAL_INSTALL = :
PRE_INSTALL = :
POST_INSTALL = :
NORMAL_UNINSTALL = :
PRE_UNINSTALL = :
POST_UNINSTALL = :
 
EXEEXT = @EXEEXT@
OBJEXT = @OBJEXT@
PATH_SEPARATOR = @PATH_SEPARATOR@
AMTAR = @AMTAR@
AWK = @AWK@
BMENU2 = @BMENU2@
DEPDIR = @DEPDIR@
DVIPS = @DVIPS@
ENDIF = @ENDIF@
EPSTOPDF = @EPSTOPDF@
GS = @GS@
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
LN_S = @LN_S@
MAINT = @MAINT@
MAKE = @MAKE@
PACKAGE = @PACKAGE@
PERL = @PERL@
PROJECT_ROOT = @PROJECT_ROOT@
PROJECT_TOPdir = @PROJECT_TOPdir@
RTEMS_TOPdir = @RTEMS_TOPdir@
STRIP = @STRIP@
TEXI2DVI = @TEXI2DVI@
TEXI2PDF = @TEXI2PDF@
TEXI2WWW = @TEXI2WWW@
VERSION = @VERSION@
am__include = @am__include@
am__quote = @am__quote@
htmldir = @htmldir@
install_sh = @install_sh@
pkgdocdir = @pkgdocdir@
 
EXTRA_DIST = cpright.texi setup.texi timemac.texi timetbl.t treedef.tex \
wksheets.t timing.t
 
subdir = common
mkinstalldirs = $(SHELL) $(top_srcdir)/../mkinstalldirs
CONFIG_CLEAN_FILES =
DIST_SOURCES =
DIST_COMMON = ChangeLog Makefile.am Makefile.in
all: all-am
 
.SUFFIXES:
$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am $(top_srcdir)/configure.ac $(ACLOCAL_M4)
cd $(top_srcdir) && \
$(AUTOMAKE) --foreign common/Makefile
Makefile: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.in $(top_builddir)/config.status
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)
uninstall-info-am:
tags: TAGS
TAGS:
 
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
 
top_distdir = ..
distdir = $(top_distdir)/$(PACKAGE)-$(VERSION)
 
distdir: $(DISTFILES)
@list='$(DISTFILES)'; for file in $$list; do \
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
if test "$$dir" != "$$file" && test "$$dir" != "."; then \
dir="/$$dir"; \
$(mkinstalldirs) "$(distdir)$$dir"; \
else \
dir=''; \
fi; \
if test -d $$d/$$file; then \
if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
fi; \
cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
else \
test -f $(distdir)/$$file \
|| cp -p $$d/$$file $(distdir)/$$file \
|| exit 1; \
fi; \
done
check-am: all-am
check: check-am
all-am: Makefile
 
installdirs:
 
install: install-am
install-exec: install-exec-am
install-data: install-data-am
uninstall: uninstall-am
 
install-am: all-am
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
 
installcheck: installcheck-am
install-strip:
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
INSTALL_STRIP_FLAG=-s \
`test -z '$(STRIP)' || \
echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
mostlyclean-generic:
 
clean-generic:
 
distclean-generic:
-rm -f Makefile $(CONFIG_CLEAN_FILES)
 
maintainer-clean-generic:
@echo "This command is intended for maintainers to use"
@echo "it deletes files that may require special tools to rebuild."
clean: clean-am
 
clean-am: clean-generic mostlyclean-am
 
distclean: distclean-am
 
distclean-am: clean-am distclean-generic
 
dvi: dvi-am
 
dvi-am:
 
info: info-am
 
info-am:
 
install-data-am:
 
install-exec-am:
 
install-info: install-info-am
 
install-man:
 
installcheck-am:
 
maintainer-clean: maintainer-clean-am
 
maintainer-clean-am: distclean-am maintainer-clean-generic
 
mostlyclean: mostlyclean-am
 
mostlyclean-am: mostlyclean-generic
 
uninstall-am: uninstall-info-am
 
.PHONY: all all-am check check-am clean clean-generic distclean \
distclean-generic distdir dvi dvi-am info info-am install \
install-am install-data install-data-am install-exec \
install-exec-am install-info install-info-am install-man \
install-strip installcheck installcheck-am installdirs \
maintainer-clean maintainer-clean-generic mostlyclean \
mostlyclean-generic uninstall uninstall-am uninstall-info-am
 
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT:
/timetbl.t
0,0 → 1,1330
@c ****** This comment is here to remind you not to edit the timetbl.t
@c ****** in any directory but common.
@c
@c Time Table Template
@c
@c COPYRIGHT (c) 1988-2002.
@c On-Line Applications Research Corporation (OAR).
@c All rights reserved.
@c
@c timetbl.t,v 1.8 2002/01/17 21:47:44 joel Exp
@c
 
@ifset use-tex
@sp 1
@tex
\centerline{\vbox{\offinterlineskip\halign{
\span\rtemstimetable
\rtemsonecase{No Floating Point Contexts}{RTEMS_NO_FP_CONTEXTS}
\rtemsdirective{Floating Point Contexts}
\rtemscase{restore first FP task}{RTEMS_RESTORE_1ST_FP_TASK}
\rtemscase{save initialized, restore initialized}{RTEMS_SAVE_INIT_RESTORE_INIT}
\rtemscase{save idle, restore initialized}{RTEMS_SAVE_IDLE_RESTORE_INIT}
\rtemscase{save idle, restore idle}{RTEMS_SAVE_IDLE_RESTORE_IDLE}
\rtemsendtimetable
}}\hfil}
@end tex
@end ifset
 
@ifset use-ascii
@ifinfo
@itemize @bullet
@item No Floating Point Contexts
@itemize -
@item only case: RTEMS_NO_FP_CONTEXTS
@end itemize
@item Floating Point Contexts
@itemize -
@item restore first FP task: RTEMS_RESTORE_1ST_FP_TASK
@item save initialized, restore initialized: RTEMS_SAVE_INIT_RESTORE_INIT
@item save idle, restore initialized: RTEMS_SAVE_IDLE_RESTORE_INIT
@item save idle, restore idle: RTEMS_SAVE_IDLE_RESTORE_INIT
@end itemize
@end itemize
@end ifinfo
@end ifset
 
@ifset use-html
@html
<CENTER>
<TABLE COLS=2 WIDTH="80%" BORDER=2>
<TR><TD ALIGN=left><STRONG>No Floating Point Contexts</STRONG></TD>
<TD ALIGN=center>RTEMS_NO_FP_CONTEXTS</TD></TR>
<TR><TD ALIGN=left COLSPAN=2><STRONG>Floating Point Contexts</TR>
<TR><TD ALIGN=left><dd>restore first FP task</TD>
<TD ALIGN=center>RTEMS_RESTORE_1ST_FP_TASK</TD>
<TR><TD ALIGN=left><dd>save initialized, restore initialized</TD>
<TD ALIGN=center>RTEMS_SAVE_INIT_RESTORE_INIT</TD>
<TR><TD ALIGN=left><dd>save idle, restore initialized</TD>
<TD ALIGN=center>RTEMS_SAVE_IDLE_RESTORE_INIT</TD>
<TR><TD ALIGN=left><dd>save idle, restore idle</TD>
<TD ALIGN=center>RTEMS_SAVE_IDLE_RESTORE_IDLE</TD>
</TABLE>
</CENTER>
@end html
@end ifset
 
@section Directive Times
 
This sections is divided into a number of
subsections, each of which contains a table listing the
execution times of that manager's directives.
 
@page
@section Task Manager
 
@ifset use-tex
@tex
\centerline{\vbox{\offinterlineskip\halign{
\span\rtemstimetable
\rtemsonecase{TASK\_CREATE}{RTEMS_TASK_CREATE_ONLY}
\rtemsonecase{TASK\_IDENT}{RTEMS_TASK_IDENT_ONLY}
\rtemsonecase{TASK\_START}{RTEMS_TASK_START_ONLY}
\rtemsdirective{TASK\_RESTART}
\rtemscase{calling task}{RTEMS_TASK_RESTART_CALLING_TASK}
\rtemscase{suspended task -- returns to caller}
{RTEMS_TASK_RESTART_SUSPENDED_RETURNS_TO_CALLER}
\rtemscase{blocked task -- returns to caller}
{RTEMS_TASK_RESTART_BLOCKED_RETURNS_TO_CALLER}
\rtemscase{ready task -- returns to caller}
{RTEMS_TASK_RESTART_READY_RETURNS_TO_CALLER}
\rtemscase{suspended task -- preempts caller}
{RTEMS_TASK_RESTART_SUSPENDED_PREEMPTS_CALLER}
\rtemscase{blocked task -- preempts caller}
{RTEMS_TASK_RESTART_BLOCKED_PREEMPTS_CALLER}
\rtemscase{ready task -- preempts caller}
{RTEMS_TASK_RESTART_READY_PREEMPTS_CALLER}
\rtemsdirective{TASK\_DELETE}
\rtemscase{calling task}{RTEMS_TASK_DELETE_CALLING_TASK}
\rtemscase{suspended task}{RTEMS_TASK_DELETE_SUSPENDED_TASK}
\rtemscase{blocked task}{RTEMS_TASK_DELETE_BLOCKED_TASK}
\rtemscase{ready task}{RTEMS_TASK_DELETE_READY_TASK}
\rtemsdirective{TASK\_SUSPEND}
\rtemscase{calling task}{RTEMS_TASK_SUSPEND_CALLING_TASK}
\rtemscase{returns to caller}{RTEMS_TASK_SUSPEND_RETURNS_TO_CALLER}
\rtemsdirective{TASK\_RESUME}
\rtemscase{task readied -- returns to caller}
{RTEMS_TASK_RESUME_TASK_READIED_RETURNS_TO_CALLER}
\rtemscase{task readied -- preempts caller}
{RTEMS_TASK_RESUME_TASK_READIED_PREEMPTS_CALLER}
\rtemsdirective{TASK\_SET\_PRIORITY}
\rtemscase{obtain current priority}
{RTEMS_TASK_SET_PRIORITY_OBTAIN_CURRENT_PRIORITY}
\rtemscase{returns to caller}{RTEMS_TASK_SET_PRIORITY_RETURNS_TO_CALLER}
\rtemscase{preempts caller}{RTEMS_TASK_SET_PRIORITY_PREEMPTS_CALLER}
\rtemsdirective{TASK\_MODE}
\rtemscase{obtain current mode}{RTEMS_TASK_MODE_OBTAIN_CURRENT_MODE}
\rtemscase{no reschedule}{RTEMS_TASK_MODE_NO_RESCHEDULE}
\rtemscase{reschedule -- returns to caller}
{RTEMS_TASK_MODE_RESCHEDULE_RETURNS_TO_CALLER}
\rtemscase{reschedule -- preempts caller}
{RTEMS_TASK_MODE_RESCHEDULE_PREEMPTS_CALLER}
\rtemsonecase{TASK\_GET\_NOTE}{RTEMS_TASK_GET_NOTE_ONLY}
\rtemsonecase{TASK\_SET\_NOTE}{RTEMS_TASK_SET_NOTE_ONLY}
\rtemsdirective{TASK\_WAKE\_AFTER}
\rtemscase{yield -- returns to caller}
{RTEMS_TASK_WAKE_AFTER_YIELD_RETURNS_TO_CALLER}
\rtemscase{yield -- preempts caller}
{RTEMS_TASK_WAKE_AFTER_YIELD_PREEMPTS_CALLER}
\rtemsonecase{TASK\_WAKE\_WHEN}{RTEMS_TASK_WAKE_WHEN_ONLY}
\rtemsendtimetable
}}\hfil}
@end tex
@end ifset
@ifset use-ascii
@ifinfo
@itemize @bullet
 
@item TASK_CREATE
@itemize -
@item only case: RTEMS_TASK_CREATE_ONLY
@end itemize
 
@item TASK_IDENT
@itemize -
@item only case: RTEMS_TASK_IDENT_ONLY
@end itemize
 
@item TASK_START
@itemize -
@item only case: RTEMS_TASK_START_ONLY
@end itemize
 
@item TASK_RESTART
@itemize -
@item calling task: RTEMS_TASK_RESTART_CALLING_TASK
@item suspended task -- returns to caller: RTEMS_TASK_RESTART_SUSPENDED_RETURNS_TO_CALLER
@item blocked task -- returns to caller: RTEMS_TASK_RESTART_BLOCKED_RETURNS_TO_CALLER
@item ready task -- returns to caller: RTEMS_TASK_RESTART_READY_RETURNS_TO_CALLER
@item suspended task -- preempts caller: RTEMS_TASK_RESTART_SUSPENDED_PREEMPTS_CALLER
@item blocked task -- preempts caller: RTEMS_TASK_RESTART_BLOCKED_PREEMPTS_CALLER
@item ready task -- preempts caller: RTEMS_TASK_RESTART_READY_PREEMPTS_CALLER
@end itemize
 
@item TASK_DELETE
@itemize -
@item calling task: RTEMS_TASK_DELETE_CALLING_TASK
@item suspended task: RTEMS_TASK_DELETE_SUSPENDED_TASK
@item blocked task: RTEMS_TASK_DELETE_BLOCKED_TASK
@item ready task: RTEMS_TASK_DELETE_READY_TASK
@end itemize
 
@item TASK_SUSPEND
@itemize -
@item calling task: RTEMS_TASK_SUSPEND_CALLING_TASK
@item returns to caller: RTEMS_TASK_SUSPEND_RETURNS_TO_CALLER
@end itemize
 
@item TASK_RESUME
@itemize -
@item task readied -- returns to caller: RTEMS_TASK_RESUME_TASK_READIED_RETURNS_TO_CALLER
@item task readied -- preempts caller: RTEMS_TASK_RESUME_TASK_READIED_PREEMPTS_CALLER
@end itemize
 
@item TASK_SET_PRIORITY
@itemize -
@item obtain current priority: RTEMS_TASK_SET_PRIORITY_OBTAIN_CURRENT_PRIORITY
@item returns to caller: RTEMS_TASK_SET_PRIORITY_RETURNS_TO_CALLER
@item preempts caller: RTEMS_TASK_SET_PRIORITY_PREEMPTS_CALLER
@end itemize
 
@item TASK_MODE
@itemize -
@item obtain current mode: RTEMS_TASK_MODE_OBTAIN_CURRENT_MODE
@item no reschedule: RTEMS_TASK_MODE_NO_RESCHEDULE
@item reschedule -- returns to caller: RTEMS_TASK_MODE_RESCHEDULE_RETURNS_TO_CALLER
@item reschedule -- preempts caller: RTEMS_TASK_MODE_RESCHEDULE_PREEMPTS_CALLER
@end itemize
 
@item TASK_GET_NOTE
@itemize -
@item only case: RTEMS_TASK_GET_NOTE_ONLY
@end itemize
 
@item TASK_SET_NOTE
@itemize -
@item only case: RTEMS_TASK_SET_NOTE_ONLY
@end itemize
 
@item TASK_WAKE_AFTER
@itemize -
@item yield -- returns to caller: RTEMS_TASK_WAKE_AFTER_YIELD_RETURNS_TO_CALLER
@item yield -- preempts caller: RTEMS_TASK_WAKE_AFTER_YIELD_PREEMPTS_CALLER
@end itemize
 
@item TASK_WAKE_WHEN
@itemize -
@item only case: RTEMS_TASK_WAKE_WHEN_ONLY
@end itemize
 
@end itemize
@end ifinfo
@end ifset
 
@ifset use-html
@html
<CENTER>
<TABLE COLS=2 WIDTH="80%" BORDER=2>
<TR><TD ALIGN=left><STRONG>TASK_CREATE</STRONG></TD>
<TD ALIGN=center>RTEMS_TASK_CREATE_ONLY</TD></TR>
<TR><TD ALIGN=left><STRONG>TASK_IDENT</STRONG></TD>
<TD ALIGN=center>RTEMS_TASK_IDENT_ONLY</TD></TR>
<TR><TD ALIGN=left><STRONG>TASK_START</STRONG></TD>
<TD ALIGN=center>RTEMS_TASK_START_ONLY</TD></TR>
<TR><TD ALIGN=left COLSPAN=2><STRONG>TASK_RESTART</STRONG></TD></TR>
<TR><TD ALIGN=left><dd>calling task</TD>
<TD ALIGN=center>RTEMS_TASK_RESTART_CALLING_TASK</TD></TR>
<TR><TD ALIGN=left><dd>suspended task -- returns to caller</TD>
<TD ALIGN=center>RTEMS_TASK_RESTART_SUSPENDED_RETURNS_TO_CALLER</TD></TR>
<TR><TD ALIGN=left><dd>blocked task -- returns to caller</TD>
<TD ALIGN=center>RTEMS_TASK_RESTART_BLOCKED_RETURNS_TO_CALLER</TD></TR>
<TR><TD ALIGN=left><dd>ready task -- returns to caller</TD>
<TD ALIGN=center>RTEMS_TASK_RESTART_READY_RETURNS_TO_CALLER</TD></TR>
<TR><TD ALIGN=left><dd>suspended task -- preempts caller</TD>
<TD ALIGN=center>RTEMS_TASK_RESTART_SUSPENDED_PREEMPTS_CALLER</TD></TR>
<TR><TD ALIGN=left><dd>blocked task -- preempts caller</TD>
<TD ALIGN=center>RTEMS_TASK_RESTART_BLOCKED_PREEMPTS_CALLER</TD></TR>
<TR><TD ALIGN=left><dd>ready task -- preempts caller</TD>
<TD ALIGN=center>RTEMS_TASK_RESTART_READY_PREEMPTS_CALLER</TD></TR>
<TR><TD ALIGN=left COLSPAN=2><STRONG>TASK_DELETE</STRONG></TD></TR>
<TR><TD ALIGN=left><dd>calling task</TD>
<TD ALIGN=center>RTEMS_TASK_DELETE_CALLING_TASK</TD></TR>
<TR><TD ALIGN=left><dd>suspended task</TD>
<TD ALIGN=center>RTEMS_TASK_DELETE_SUSPENDED_TASK</TD></TR>
<TR><TD ALIGN=left><dd>blocked task</TD>
<TD ALIGN=center>RTEMS_TASK_DELETE_BLOCKED_TASK</TD></TR>
<TR><TD ALIGN=left><dd>ready task</TD>
<TD ALIGN=center>RTEMS_TASK_DELETE_READY_TASK</TD></TR>
<TR><TD ALIGN=left COLSPAN=2><STRONG>TASK_SUSPEND</STRONG></TD></TR>
<TR><TD ALIGN=left><dd>calling task</TD>
<TD ALIGN=center>RTEMS_TASK_SUSPEND_CALLING_TASK</TD></TR>
<TR><TD ALIGN=left><dd>returns to caller</TD>
<TD ALIGN=center>RTEMS_TASK_SUSPEND_RETURNS_TO_CALLER</TD></TR>
<TR><TD ALIGN=left COLSPAN=2><STRONG>TASK_RESUME</STRONG></TD></TR>
<TR><TD ALIGN=left><dd>task readied -- returns to caller</TD>
<TD ALIGN=center>RTEMS_TASK_RESUME_TASK_READIED_RETURNS_TO_CALLER</TD></TR>
<TR><TD ALIGN=left><dd>task readied -- preempts caller</TD>
<TD ALIGN=center>RTEMS_TASK_RESUME_TASK_READIED_PREEMPTS_CALLER</TD></TR>
<TR><TD ALIGN=left COLSPAN=2><STRONG>TASK_SET_PRIORITY</STRONG></TD></TR>
<TR><TD ALIGN=left><dd>obtain current priority</TD>
<TD ALIGN=center>RTEMS_TASK_SET_PRIORITY_OBTAIN_CURRENT_PRIORITY</TD></TR>
<TR><TD ALIGN=left><dd>returns to caller</TD>
<TD ALIGN=center>RTEMS_TASK_SET_PRIORITY_RETURNS_TO_CALLER</TD></TR>
<TR><TD ALIGN=left><dd>preempts caller</TD>
<TD ALIGN=center>RTEMS_TASK_SET_PRIORITY_PREEMPTS_CALLER</TD></TR>
<TR><TD ALIGN=left COLSPAN=2><STRONG>TASK_MODE</STRONG></TD></TR>
<TR><TD ALIGN=left><dd>obtain current mode</TD>
<TD ALIGN=center>RTEMS_TASK_MODE_OBTAIN_CURRENT_MODE</TD></TR>
<TR><TD ALIGN=left><dd>no reschedule</TD>
<TD ALIGN=center>RTEMS_TASK_MODE_NO_RESCHEDULE</TD></TR>
<TR><TD ALIGN=left><dd>reschedule -- returns to caller</TD>
<TD ALIGN=center>RTEMS_TASK_MODE_RESCHEDULE_RETURNS_TO_CALLER</TD></TR>
<TR><TD ALIGN=left><dd>reschedule -- preempts caller</TD>
<TD ALIGN=center>RTEMS_TASK_MODE_RESCHEDULE_PREEMPTS_CALLER</TD></TR>
<TR><TD ALIGN=left><STRONG>TASK_GET_NOTE</STRONG></TD>
<TD ALIGN=center>RTEMS_TASK_GET_NOTE_ONLY</TD></TR>
<TR><TD ALIGN=left><STRONG>TASK_SET_NOTE</STRONG></TD>
<TD ALIGN=center>RTEMS_TASK_SET_NOTE_ONLY</TD></TR>
<TR><TD ALIGN=left COLSPAN=2><STRONG>TASK_WAKE_AFTER</STRONG></TD></TR>
<TR><TD ALIGN=left><dd>yield -- returns to caller</TD>
<TD ALIGN=center>RTEMS_TASK_WAKE_AFTER_YIELD_RETURNS_TO_CALLER</TD></TR>
<TR><TD ALIGN=left><dd>yield -- preempts caller</TD>
<TD ALIGN=center>RTEMS_TASK_WAKE_AFTER_YIELD_PREEMPTS_CALLER</TD></TR>
<TR><TD ALIGN=left><STRONG>TASK_WAKE_WHEN</STRONG></TD>
<TD ALIGN=center>RTEMS_TASK_WAKE_WHEN_ONLY</TD></TR>
</TABLE>
</CENTER>
@end html
@end ifset
 
@page
@section Interrupt Manager
 
It should be noted that the interrupt entry times
include vectoring the interrupt handler.
 
@ifset use-tex
@sp 1
@tex
\centerline{\vbox{\offinterlineskip\halign{
\span\rtemstimetable
\rtemsdirective{Interrupt Entry Overhead}
\rtemscase{returns to nested interrupt}{RTEMS_INTR_ENTRY_RETURNS_TO_NESTED}
\rtemscase{returns to interrupted task}
{RTEMS_INTR_ENTRY_RETURNS_TO_INTERRUPTED_TASK}
\rtemscase{returns to preempting task}
{RTEMS_INTR_ENTRY_RETURNS_TO_PREEMPTING_TASK}
\rtemsdirective{Interrupt Exit Overhead}
\rtemscase{returns to nested interrupt}{RTEMS_INTR_EXIT_RETURNS_TO_NESTED}
\rtemscase{returns to interrupted task}
{RTEMS_INTR_EXIT_RETURNS_TO_INTERRUPTED_TASK}
\rtemscase{returns to preempting task}
{RTEMS_INTR_EXIT_RETURNS_TO_PREEMPTING_TASK}
\rtemsendtimetable
}}\hfil}
@end tex
@end ifset
 
@ifset use-ascii
@ifinfo
@itemize @bullet
 
@item Interrupt Entry Overhead
@itemize -
@item returns to nested interrupt: RTEMS_INTR_ENTRY_RETURNS_TO_NESTED
@item returns to interrupted task: RTEMS_INTR_ENTRY_RETURNS_TO_INTERRUPTED_TASK
@item returns to preempting task: RTEMS_INTR_ENTRY_RETURNS_TO_PREEMPTING_TASK
@end itemize
 
@item Interrupt Exit Overhead
@itemize -
@item returns to nested interrupt: RTEMS_INTR_EXIT_RETURNS_TO_NESTED
@item returns to interrupted task: RTEMS_INTR_EXIT_RETURNS_TO_INTERRUPTED_TASK
@item returns to preempting task: RTEMS_INTR_EXIT_RETURNS_TO_PREEMPTING_TASK
@end itemize
 
@end itemize
@end ifinfo
@end ifset
 
@ifset use-html
@html
<CENTER>
<TABLE COLS=2 WIDTH="80%" BORDER=2>
<TR><TD ALIGN=left COLSPAN=2><STRONG>Interrupt Entry Overhead</STRONG></TD></TR>
<TR><TD ALIGN=left><dd>returns to nested interrupt</TD>
<TD ALIGN=center>RTEMS_INTR_ENTRY_RETURNS_TO_NESTED</TD></TR>
<TR><TD ALIGN=left><dd>returns to interrupted task</TD>
<TD ALIGN=center>RTEMS_INTR_ENTRY_RETURNS_TO_INTERRUPTED_TASK</TD></TR>
<TR><TD ALIGN=left><dd>returns to preempting task</TD>
<TD ALIGN=center>RTEMS_INTR_ENTRY_RETURNS_TO_PREEMPTING_TASK</TD></TR>
<TR><TD ALIGN=left COLSPAN=2><STRONG>Interrupt Exit Overhead</STRONG></TD></TR>
<TR><TD ALIGN=left><dd>returns to nested interrupt</TD>
<TD ALIGN=center>RTEMS_INTR_EXIT_RETURNS_TO_NESTED</TD></TR>
<TR><TD ALIGN=left><dd>returns to interrupted task</TD>
<TD ALIGN=center>RTEMS_INTR_EXIT_RETURNS_TO_INTERRUPTED_TASK</TD></TR>
<TR><TD ALIGN=left><dd>returns to preempting task</TD>
<TD ALIGN=center>RTEMS_INTR_EXIT_RETURNS_TO_PREEMPTING_TASK</TD></TR>
</TABLE>
</CENTER>
@end html
@end ifset
 
 
@section Clock Manager
 
@ifset use-tex
@tex
\centerline{\vbox{\offinterlineskip\halign{
\span\rtemstimetable
\rtemsonecase{CLOCK\_SET}{RTEMS_CLOCK_SET_ONLY}
\rtemsonecase{CLOCK\_GET}{RTEMS_CLOCK_GET_ONLY}
\rtemsonecase{CLOCK\_TICK}{RTEMS_CLOCK_TICK_ONLY}
\rtemsendtimetable
}}\hfil}
@end tex
@end ifset
 
@ifset use-ascii
@ifinfo
@itemize @bullet
 
@item CLOCK_SET
@itemize -
@item only case: RTEMS_CLOCK_SET_ONLY
@end itemize
 
@item CLOCK_GET
@itemize -
@item only case: RTEMS_CLOCK_GET_ONLY
@end itemize
 
@item CLOCK_TICK
@itemize -
@item only case: RTEMS_CLOCK_TICK_ONLY
@end itemize
 
@end itemize
@end ifinfo
@end ifset
 
@ifset use-html
@html
<CENTER>
<TABLE COLS=2 WIDTH="80%" BORDER=2>
<TR><TD ALIGN=left><STRONG>CLOCK_SET</STRONG></TD>
<TD ALIGN=center>RTEMS_CLOCK_SET_ONLY</TD></TR>
<TR><TD ALIGN=left><STRONG>CLOCK_GET</STRONG></TD>
<TD ALIGN=center>RTEMS_CLOCK_GET_ONLY</TD></TR>
<TR><TD ALIGN=left><STRONG>CLOCK_TICK</STRONG></TD>
<TD ALIGN=center>RTEMS_CLOCK_TICK_ONLY</TD></TR>
</TABLE>
</CENTER>
@end html
@end ifset
 
@section Timer Manager
 
@ifset use-tex
@tex
\centerline{\vbox{\offinterlineskip\halign{
\span\rtemstimetable
\rtemsonecase{TIMER\_CREATE}{RTEMS_TIMER_CREATE_ONLY}
\rtemsonecase{TIMER\_IDENT}{RTEMS_TIMER_IDENT_ONLY}
\rtemsdirective{TIMER\_DELETE}
\rtemscase{inactive}{RTEMS_TIMER_DELETE_INACTIVE}
\rtemscase{active}{RTEMS_TIMER_DELETE_ACTIVE}
\rtemsdirective{TIMER\_FIRE\_AFTER}
\rtemscase{inactive}{RTEMS_TIMER_FIRE_AFTER_INACTIVE}
\rtemscase{active}{RTEMS_TIMER_FIRE_AFTER_ACTIVE}
\rtemsdirective{TIMER\_FIRE\_WHEN}
\rtemscase{inactive}{RTEMS_TIMER_FIRE_WHEN_INACTIVE}
\rtemscase{active}{RTEMS_TIMER_FIRE_WHEN_ACTIVE}
\rtemsdirective{TIMER\_RESET}
\rtemscase{inactive}{RTEMS_TIMER_RESET_INACTIVE}
\rtemscase{active}{RTEMS_TIMER_RESET_ACTIVE}
\rtemsdirective{TIMER\_CANCEL}
\rtemscase{inactive}{RTEMS_TIMER_CANCEL_INACTIVE}
\rtemscase{active}{RTEMS_TIMER_CANCEL_ACTIVE}
\rtemsendtimetable
}}\hfil}
@end tex
@end ifset
 
@ifset use-ascii
@ifinfo
@itemize @bullet
 
@item TIMER_CREATE
@itemize -
@item only case: RTEMS_TIMER_CREATE_ONLY
@end itemize
 
@item TIMER_IDENT
@itemize -
@item only case: RTEMS_TIMER_IDENT_ONLY
@end itemize
 
@item TIMER_DELETE
@itemize -
@item inactive: RTEMS_TIMER_DELETE_INACTIVE
@item active: RTEMS_TIMER_DELETE_ACTIVE
@end itemize
 
@item TIMER_FIRE_AFTER
@itemize -
@item inactive: RTEMS_TIMER_FIRE_AFTER_INACTIVE
@item active: RTEMS_TIMER_FIRE_AFTER_ACTIVE
@end itemize
 
@item TIMER_FIRE_WHEN
@itemize -
@item inactive: TIMER_FIRE_WHEN_INACTIVE
@item active: TIMER_FIRE_WHEN_ACTIVE
@end itemize
 
@item TIMER_RESET
@itemize -
@item inactive: TIMER_RESET_INACTIVE
@item active: TIMER_RESET_ACTIVE
@end itemize
 
@item TIMER_CANCEL
@itemize -
@item inactive: TIMER_CANCEL_INACTIVE
@item active: TIMER_CANCEL_ACTIVE
@end itemize
 
@end itemize
@end ifinfo
@end ifset
 
@ifset use-html
@html
<CENTER>
<TABLE COLS=2 WIDTH="80%" BORDER=2>
<TR><TD ALIGN=left><STRONG>TIMER_CREATE</STRONG></TD>
<TD ALIGN=center>RTEMS_TIMER_CREATE_ONLY</TD></TR>
<TR><TD ALIGN=left><STRONG>TIMER_IDENT</STRONG></TD>
<TD ALIGN=center>RTEMS_TIMER_IDENT_ONLY</TD></TR>
<TR><TD ALIGN=left COLSPAN=2><STRONG>TIMER_DELETE</STRONG></TD></TR>
<TR><TD ALIGN=left><dd>inactive</TD>
<TD ALIGN=center>RTEMS_TIMER_DELETE_INACTIVE</TD></TR>
<TR><TD ALIGN=left><dd>active</TD>
<TD ALIGN=center>RTEMS_TIMER_DELETE_ACTIVE</TD></TR>
<TR><TD ALIGN=left COLSPAN=2><STRONG>TIMER_FIRE_AFTER</STRONG></TD></TR>
<TR><TD ALIGN=left><dd>inactive</TD>
<TD ALIGN=center>RTEMS_TIMER_FIRE_AFTER_INACTIVE</TD></TR>
<TR><TD ALIGN=left><dd>active</TD>
<TD ALIGN=center>RTEMS_TIMER_FIRE_AFTER_ACTIVE</TD></TR>
<TR><TD ALIGN=left COLSPAN=2><STRONG>TIMER_FIRE_WHEN</STRONG></TD></TR>
<TR><TD ALIGN=left><dd>inactive</TD>
<TD ALIGN=center>RTEMS_TIMER_FIRE_WHEN_INACTIVE</TD></TR>
<TR><TD ALIGN=left><dd>active</TD>
<TD ALIGN=center>RTEMS_TIMER_FIRE_WHEN_ACTIVE</TD></TR>
<TR><TD ALIGN=left COLSPAN=2><STRONG>TIMER_RESET</STRONG></TD></TR>
<TR><TD ALIGN=left><dd>inactive</TD>
<TD ALIGN=center>RTEMS_TIMER_RESET_INACTIVE</TD></TR>
<TR><TD ALIGN=left><dd>active</TD>
<TD ALIGN=center>RTEMS_TIMER_RESET_ACTIVE</TD></TR>
<TR><TD ALIGN=left COLSPAN=2><STRONG>TIMER_CANCEL</STRONG></TD></TR>
<TR><TD ALIGN=left><dd>inactive</TD>
<TD ALIGN=center>RTEMS_TIMER_CANCEL_INACTIVE</TD></TR>
<TR><TD ALIGN=left><dd>active</TD>
<TD ALIGN=center>RTEMS_TIMER_CANCEL_ACTIVE</TD></TR>
</TABLE>
</CENTER>
@end html
@end ifset
 
@page
@section Semaphore Manager
 
@ifset use-tex
@tex
\centerline{\vbox{\offinterlineskip\halign{
\span\rtemstimetable
\rtemsonecase{SEMAPHORE\_CREATE}{RTEMS_SEMAPHORE_CREATE_ONLY}
\rtemsonecase{SEMAPHORE\_IDENT}{RTEMS_SEMAPHORE_IDENT_ONLY}
\rtemsonecase{SEMAPHORE\_DELETE}{RTEMS_SEMAPHORE_DELETE_ONLY}
\rtemsdirective{SEMAPHORE\_OBTAIN}
\rtemscase{available}{RTEMS_SEMAPHORE_OBTAIN_AVAILABLE}
\rtemscase{not available -- NO\_WAIT}
{RTEMS_SEMAPHORE_OBTAIN_NOT_AVAILABLE_NO_WAIT}
\rtemscase{not available -- caller blocks}
{RTEMS_SEMAPHORE_OBTAIN_NOT_AVAILABLE_CALLER_BLOCKS}
\rtemsdirective{SEMAPHORE\_RELEASE}
\rtemscase{no waiting tasks}{RTEMS_SEMAPHORE_RELEASE_NO_WAITING_TASKS}
\rtemscase{task readied -- returns to caller}
{RTEMS_SEMAPHORE_RELEASE_TASK_READIED_RETURNS_TO_CALLER}
\rtemscase{task readied -- preempts caller}
{RTEMS_SEMAPHORE_RELEASE_TASK_READIED_PREEMPTS_CALLER}
\rtemsendtimetable
}}\hfil}
@end tex
@end ifset
 
@ifset use-ascii
@ifinfo
@itemize @bullet
 
@item SEMAPHORE_CREATE
@itemize -
@item only case: RTEMS_SEMAPHORE_CREATE_ONLY
@end itemize
 
@item SEMAPHORE_IDENT
@itemize -
@item only case: RTEMS_SEMAPHORE_IDENT_ONLY
@end itemize
 
@item SEMAPHORE_DELETE
@itemize -
@item only case: RTEMS_SEMAPHORE_DELETE_ONLY
@end itemize
 
@item SEMAPHORE_OBTAIN
@itemize -
@item available: RTEMS_SEMAPHORE_OBTAIN_AVAILABLE
@item not available -- NO_WAIT: RTEMS_SEMAPHORE_OBTAIN_NOT_AVAILABLE_NO_WAIT
@item not available -- caller blocks: RTEMS_SEMAPHORE_OBTAIN_NOT_AVAILABLE_CALLER_BLOCKS
@end itemize
 
@item SEMAPHORE_RELEASE
@itemize -
@item no waiting tasks: RTEMS_SEMAPHORE_RELEASE_NO_WAITING_TASKS
@item task readied -- returns to caller: RTEMS_SEMAPHORE_RELEASE_TASK_READIED_RETURNS_TO_CALLER
@item task readied -- preempts caller: RTEMS_SEMAPHORE_RELEASE_TASK_READIED_PREEMPTS_CALLER
@end itemize
 
@end itemize
@end ifinfo
@end ifset
 
@ifset use-html
@html
<CENTER>
<TABLE COLS=2 WIDTH="80%" BORDER=2>
<TR><TD ALIGN=left><STRONG>SEMAPHORE_CREATE</STRONG></TD>
<TD ALIGN=center>RTEMS_SEMAPHORE_CREATE_ONLY</TD></TR>
<TR><TD ALIGN=left><STRONG>SEMAPHORE_IDENT</STRONG></TD>
<TD ALIGN=center>RTEMS_SEMAPHORE_IDENT_ONLY</TD></TR>
<TR><TD ALIGN=left><STRONG>SEMAPHORE_DELETE</STRONG></TD>
<TD ALIGN=center>RTEMS_SEMAPHORE_DELETE_ONLY</TD></TR>
<TR><TD ALIGN=left COLSPAN=2><STRONG>SEMAPHORE_OBTAIN</STRONG></TD></TR>
<TR><TD ALIGN=left><dd>available</TD>
<TD ALIGN=center>RTEMS_SEMAPHORE_OBTAIN_AVAILABLE</TD></TR>
<TR><TD ALIGN=left><dd>not available -- NO_WAIT</TD>
<TD ALIGN=center>RTEMS_SEMAPHORE_OBTAIN_NOT_AVAILABLE_NO_WAIT</TD></TR>
<TR><TD ALIGN=left><dd>not available -- caller blocks</TD>
<TD ALIGN=center>RTEMS_SEMAPHORE_OBTAIN_NOT_AVAILABLE_CALLER_BLOCKS</TD></TR>
<TR><TD ALIGN=left COLSPAN=2><STRONG>SEMAPHORE_RELEASE</STRONG></TD></TR>
<TR><TD ALIGN=left><dd>no waiting tasks</TD>
<TD ALIGN=center>RTEMS_SEMAPHORE_RELEASE_NO_WAITING_TASKS</TD></TR>
<TR><TD ALIGN=left><dd>task readied -- returns to caller</TD>
<TD ALIGN=center>RTEMS_SEMAPHORE_RELEASE_TASK_READIED_RETURNS_TO_CALLER</TD></TR>
<TR><TD ALIGN=left><dd>task readied -- preempts caller</TD>
<TD ALIGN=center>RTEMS_SEMAPHORE_RELEASE_TASK_READIED_PREEMPTS_CALLER</TD></TR>
</TABLE>
</CENTER>
@end html
@end ifset
 
@section Message Manager
 
@ifset use-tex
@tex
\centerline{\vbox{\offinterlineskip\halign{
\span\rtemstimetable
\rtemsonecase{MESSAGE\_QUEUE\_CREATE}{RTEMS_MESSAGE_QUEUE_CREATE_ONLY}
\rtemsonecase{MESSAGE\_QUEUE\_IDENT}{RTEMS_MESSAGE_QUEUE_IDENT_ONLY}
\rtemsonecase{MESSAGE\_QUEUE\_DELETE}{RTEMS_MESSAGE_QUEUE_DELETE_ONLY}
\rtemsdirective{MESSAGE\_QUEUE\_SEND}
\rtemscase{no waiting tasks}
{RTEMS_MESSAGE_QUEUE_SEND_NO_WAITING_TASKS}
\rtemscase{task readied -- returns to caller}
{RTEMS_MESSAGE_QUEUE_SEND_TASK_READIED_RETURNS_TO_CALLER}
\rtemscase{task readied -- preempts caller}
{RTEMS_MESSAGE_QUEUE_SEND_TASK_READIED_PREEMPTS_CALLER}
\rtemsdirective{MESSAGE\_QUEUE\_URGENT}
\rtemscase{no waiting tasks}{RTEMS_MESSAGE_QUEUE_URGENT_NO_WAITING_TASKS}
\rtemscase{task readied -- returns to caller}
{RTEMS_MESSAGE_QUEUE_URGENT_TASK_READIED_RETURNS_TO_CALLER}
\rtemscase{task readied -- preempts caller}
{RTEMS_MESSAGE_QUEUE_URGENT_TASK_READIED_PREEMPTS_CALLER}
\rtemsdirective{MESSAGE\_QUEUE\_BROADCAST}
\rtemscase{no waiting tasks}{RTEMS_MESSAGE_QUEUE_BROADCAST_NO_WAITING_TASKS}
\rtemscase{task readied -- returns to caller}
{RTEMS_MESSAGE_QUEUE_BROADCAST_TASK_READIED_RETURNS_TO_CALLER}
\rtemscase{task readied -- preempts caller}
{RTEMS_MESSAGE_QUEUE_BROADCAST_TASK_READIED_PREEMPTS_CALLER}
\rtemsdirective{MESSAGE\_QUEUE\_RECEIVE}
\rtemscase{available}{RTEMS_MESSAGE_QUEUE_RECEIVE_AVAILABLE}
\rtemscase{not available -- NO\_WAIT}
{RTEMS_MESSAGE_QUEUE_RECEIVE_NOT_AVAILABLE_NO_WAIT}
\rtemscase{not available -- caller blocks}
{RTEMS_MESSAGE_QUEUE_RECEIVE_NOT_AVAILABLE_CALLER_BLOCKS}
\rtemsdirective{MESSAGE\_QUEUE\_FLUSH}
\rtemscase{no messages flushed}{RTEMS_MESSAGE_QUEUE_FLUSH_NO_MESSAGES_FLUSHED}
\rtemscase{messages flushed}{RTEMS_MESSAGE_QUEUE_FLUSH_MESSAGES_FLUSHED}
\rtemsendtimetable
}}\hfil}
@end tex
@end ifset
 
@ifset use-ascii
@ifinfo
@itemize @bullet
 
@item MESSAGE_QUEUE_CREATE
@itemize -
@item only case: RTEMS_MESSAGE_QUEUE_CREATE_ONLY
@end itemize
 
@item MESSAGE_QUEUE_IDENT
@itemize -
@item only case: RTEMS_MESSAGE_QUEUE_IDENT_ONLY
@end itemize
 
@item MESSAGE_QUEUE_DELETE
@itemize -
@item only case: RTEMS_MESSAGE_QUEUE_DELETE_ONLY
@end itemize
 
@item MESSAGE_QUEUE_SEND
@itemize -
@item no waiting tasks: RTEMS_MESSAGE_QUEUE_SEND_NO_WAITING_TASKS
@item task readied -- returns to caller: RTEMS_MESSAGE_QUEUE_SEND_TASK_READIED_RETURNS_TO_CALLER
@item task readied -- preempts caller: RTEMS_MESSAGE_QUEUE_SEND_TASK_READIED_PREEMPTS_CALLER
@end itemize
 
@item MESSAGE_QUEUE_URGENT
@itemize -
@item no waiting tasks: RTEMS_MESSAGE_QUEUE_URGENT_NO_WAITING_TASKS
@item task readied -- returns to caller: RTEMS_MESSAGE_QUEUE_URGENT_TASK_READIED_RETURNS_TO_CALLER
@item task readied -- preempts caller: RTEMS_MESSAGE_QUEUE_URGENT_TASK_READIED_PREEMPTS_CALLER
@end itemize
 
@item MESSAGE_QUEUE_BROADCAST
@itemize -
@item no waiting tasks: RTEMS_MESSAGE_QUEUE_BROADCAST_NO_WAITING_TASKS
@item task readied -- returns to caller: RTEMS_MESSAGE_QUEUE_BROADCAST_TASK_READIED_RETURNS_TO_CALLER
@item task readied -- preempts caller: RTEMS_MESSAGE_QUEUE_BROADCAST_TASK_READIED_PREEMPTS_CALLER
@end itemize
 
@item MESSAGE_QUEUE_RECEIVE
@itemize -
@item available: RTEMS_MESSAGE_QUEUE_RECEIVE_AVAILABLE
@item not available -- NO_WAIT: RTEMS_MESSAGE_QUEUE_RECEIVE_NOT_AVAILABLE_NO_WAIT
@item not available -- caller blocks: RTEMS_MESSAGE_QUEUE_RECEIVE_NOT_AVAILABLE_CALLER_BLOCKS
@end itemize
 
@item MESSAGE_QUEUE_FLUSH
@itemize -
@item no messages flushed: RTEMS_MESSAGE_QUEUE_FLUSH_NO_MESSAGES_FLUSHED
@item messages flushed: RTEMS_MESSAGE_QUEUE_FLUSH_MESSAGES_FLUSHED
@end itemize
 
@end itemize
@end ifinfo
@end ifset
 
@ifset use-html
@html
<CENTER>
<TABLE COLS=2 WIDTH="80%" BORDER=2>
<TR><TD ALIGN=left><STRONG>MESSAGE_QUEUE_CREATE</STRONG></TD>
<TD ALIGN=center>RTEMS_MESSAGE_QUEUE_CREATE_ONLY</TD></TR>
<TR><TD ALIGN=left><STRONG>MESSAGE_QUEUE_IDENT</STRONG></TD>
<TD ALIGN=center>RTEMS_MESSAGE_QUEUE_IDENT_ONLY</TD></TR>
<TR><TD ALIGN=left><STRONG>MESSAGE_QUEUE_DELETE</STRONG></TD>
<TD ALIGN=center>RTEMS_MESSAGE_QUEUE_DELETE_ONLY</TD></TR>
<TR><TD ALIGN=left COLSPAN=2><STRONG>MESSAGE_QUEUE_SEND</STRONG></TD></TR>
<TR><TD ALIGN=left><dd>no waiting tasks</TD>
<TD ALIGN=center>RTEMS_MESSAGE_QUEUE_SEND_NO_WAITING_TASKS</TD></TR>
<TR><TD ALIGN=left><dd>task readied -- returns to caller</TD>
<TD ALIGN=center>RTEMS_MESSAGE_QUEUE_SEND_TASK_READIED_RETURNS_TO_CALLER</TD></TR>
<TR><TD ALIGN=left><dd>task readied -- preempts caller</TD>
<TD ALIGN=center>RTEMS_MESSAGE_QUEUE_SEND_TASK_READIED_PREEMPTS_CALLER</TD></TR>
<TR><TD ALIGN=left COLSPAN=2><STRONG>MESSAGE_QUEUE_URGENT</STRONG></TD></TR>
<TR><TD ALIGN=left><dd>no waiting tasks</TD>
<TD ALIGN=center>RTEMS_MESSAGE_QUEUE_URGENT_NO_WAITING_TASKS</TD></TR>
<TR><TD ALIGN=left><dd>task readied -- returns to caller</TD>
<TD ALIGN=center>RTEMS_MESSAGE_QUEUE_URGENT_TASK_READIED_RETURNS_TO_CALLER</TD></TR>
<TR><TD ALIGN=left><dd>task readied -- preempts caller</TD>
<TD ALIGN=center>RTEMS_MESSAGE_QUEUE_URGENT_TASK_READIED_PREEMPTS_CALLER</TD></TR>
<TR><TD ALIGN=left COLSPAN=2><STRONG>MESSAGE_QUEUE_BROADCAST</STRONG></TD></TR>
<TR><TD ALIGN=left><dd>no waiting tasks</TD>
<TD ALIGN=center>RTEMS_MESSAGE_QUEUE_BROADCAST_NO_WAITING_TASKS</TD></TR>
<TR><TD ALIGN=left><dd>task readied -- returns to caller</TD>
<TD ALIGN=center>RTEMS_MESSAGE_QUEUE_BROADCAST_TASK_READIED_RETURNS_TO_CALLER</TD></TR>
<TR><TD ALIGN=left><dd>task readied -- preempts caller</TD>
<TD ALIGN=center>RTEMS_MESSAGE_QUEUE_BROADCAST_TASK_READIED_PREEMPTS_CALLER</TD></TR>
<TR><TD ALIGN=left COLSPAN=2><STRONG>MESSAGE_QUEUE_RECEIVE</STRONG></TD></TR>
<TR><TD ALIGN=left><dd>available</TD>
<TD ALIGN=center>RTEMS_MESSAGE_QUEUE_RECEIVE_AVAILABLE</TD></TR>
<TR><TD ALIGN=left><dd>not available -- NO_WAIT</TD>
<TD ALIGN=center>RTEMS_MESSAGE_QUEUE_RECEIVE_NOT_AVAILABLE_NO_WAIT</TD></TR>
<TR><TD ALIGN=left><dd>not available -- caller blocks</TD>
<TD ALIGN=center>RTEMS_MESSAGE_QUEUE_RECEIVE_NOT_AVAILABLE_CALLER_BLOCKS</TD></TR>
<TR><TD ALIGN=left COLSPAN=2><STRONG>MESSAGE_QUEUE_FLUSH</STRONG></TD></TR>
<TR><TD ALIGN=left><dd>no messages flushed</TD>
<TD ALIGN=center>RTEMS_MESSAGE_QUEUE_FLUSH_NO_MESSAGES_FLUSHED</TD></TR>
<TR><TD ALIGN=left><dd>messages flushed</TD>
<TD ALIGN=center>RTEMS_MESSAGE_QUEUE_FLUSH_MESSAGES_FLUSHED</TD></TR>
 
</TABLE>
</CENTER>
@end html
@end ifset
 
@page
@section Event Manager
 
@ifset use-tex
@tex
\centerline{\vbox{\offinterlineskip\halign{
\span\rtemstimetable
\rtemsdirective{EVENT\_SEND}
\rtemscase{no task readied}{RTEMS_EVENT_SEND_NO_TASK_READIED}
\rtemscase{task readied -- returns to caller}
{RTEMS_EVENT_SEND_TASK_READIED_RETURNS_TO_CALLER}
\rtemscase{task readied -- preempts caller}
{RTEMS_EVENT_SEND_TASK_READIED_PREEMPTS_CALLER}
\rtemsdirective{EVENT\_RECEIVE}
\rtemscase{obtain current events}{RTEMS_EVENT_RECEIVE_OBTAIN_CURRENT_EVENTS}
\rtemscase{available}{RTEMS_EVENT_RECEIVE_AVAILABLE}
\rtemscase{not available -- NO\_WAIT}{RTEMS_EVENT_RECEIVE_NOT_AVAILABLE_NO_WAIT}
\rtemscase{not available -- caller blocks}
{RTEMS_EVENT_RECEIVE_NOT_AVAILABLE_CALLER_BLOCKS}
\rtemsendtimetable
}}\hfil}
@end tex
@end ifset
 
@ifset use-ascii
@ifinfo
@itemize @bullet
 
@item EVENT_SEND
@itemize -
@item no task readied: RTEMS_EVENT_SEND_NO_TASK_READIED
@item task readied -- returns to caller: RTEMS_EVENT_SEND_TASK_READIED_RETURNS_TO_CALLER
@item task readied -- preempts caller: RTEMS_EVENT_SEND_TASK_READIED_PREEMPTS_CALLER
@end itemize
 
@item EVENT_RECEIVE
@itemize -
@item obtain current events: RTEMS_EVENT_RECEIVE_OBTAIN_CURRENT_EVENTS
@item available: RTEMS_EVENT_RECEIVE_AVAILABLE
@item not available -- NO_WAIT: RTEMS_EVENT_RECEIVE_NOT_AVAILABLE_NO_WAIT
@item not available -- caller blocks: RTEMS_EVENT_RECEIVE_NOT_AVAILABLE_CALLER_BLOCKS
@end itemize
 
@end itemize
@end ifinfo
@end ifset
 
@ifset use-html
@html
<CENTER>
<TABLE COLS=2 WIDTH="80%" BORDER=2>
<TR><TD ALIGN=left COLSPAN=2><STRONG>EVENT_SEND</STRONG></TD></TR>
<TR><TD ALIGN=left><dd>no task readied</TD>
<TD ALIGN=center>RTEMS_EVENT_SEND_NO_TASK_READIED</TD></TR>
<TR><TD ALIGN=left><dd>task readied -- returns to caller</TD>
<TD ALIGN=center>RTEMS_EVENT_SEND_TASK_READIED_RETURNS_TO_CALLER</TD></TR>
<TR><TD ALIGN=left><dd>task readied -- preempts caller</TD>
<TD ALIGN=center>RTEMS_EVENT_SEND_TASK_READIED_PREEMPTS_CALLER</TD></TR>
<TR><TD ALIGN=left COLSPAN=2><STRONG>EVENT_RECEIVE</STRONG></TD></TR>
<TR><TD ALIGN=left><dd>obtain current events</TD>
<TD ALIGN=center>RTEMS_EVENT_RECEIVE_OBTAIN_CURRENT_EVENTS</TD></TR>
<TR><TD ALIGN=left><dd>available</TD>
<TD ALIGN=center>RTEMS_EVENT_RECEIVE_AVAILABLE</TD></TR>
<TR><TD ALIGN=left><dd>not available -- NO_WAIT</TD>
<TD ALIGN=center>RTEMS_EVENT_RECEIVE_NOT_AVAILABLE_NO_WAIT</TD></TR>
<TR><TD ALIGN=left><dd>not available -- caller blocks</TD>
<TD ALIGN=center>RTEMS_EVENT_RECEIVE_NOT_AVAILABLE_CALLER_BLOCKS</TD></TR>
 
</TABLE>
</CENTER>
@end html
@end ifset
@section Signal Manager
 
@ifset use-tex
@tex
\centerline{\vbox{\offinterlineskip\halign{
\span\rtemstimetable
\rtemsonecase{SIGNAL\_CATCH}{RTEMS_SIGNAL_CATCH_ONLY}
\rtemsdirective{SIGNAL\_SEND}
\rtemscase{returns to caller}{RTEMS_SIGNAL_SEND_RETURNS_TO_CALLER}
\rtemscase{signal to self}{RTEMS_SIGNAL_SEND_SIGNAL_TO_SELF}
\rtemsdirective{EXIT ASR OVERHEAD}
\rtemscase{returns to calling task}
{RTEMS_SIGNAL_EXIT_ASR_OVERHEAD_RETURNS_TO_CALLING_TASK}
\rtemscase{returns to preempting task}
{RTEMS_SIGNAL_EXIT_ASR_OVERHEAD_RETURNS_TO_PREEMPTING_TASK}
\rtemsendtimetable
}}\hfil}
@end tex
@end ifset
 
@ifset use-ascii
@ifinfo
@itemize @bullet
@item SIGNAL_CATCH
@itemize -
@item only case: RTEMS_SIGNAL_CATCH_ONLY
@end itemize
 
@item SIGNAL_SEND
@itemize -
@item returns to caller: RTEMS_SIGNAL_SEND_RETURNS_TO_CALLER
@item signal to self: RTEMS_SIGNAL_SEND_SIGNAL_TO_SELF
@end itemize
 
@item EXIT ASR OVERHEAD
@itemize -
@item returns to calling task: RTEMS_SIGNAL_EXIT_ASR_OVERHEAD_RETURNS_TO_CALLING_TASK
@item returns to preempting task: RTEMS_SIGNAL_EXIT_ASR_OVERHEAD_RETURNS_TO_PREEMPTING_TASK
@end itemize
 
@end itemize
@end ifinfo
@end ifset
 
@ifset use-html
@html
<CENTER>
<TABLE COLS=2 WIDTH="80%" BORDER=2>
<TR><TD ALIGN=left><STRONG>SIGNAL_CATCH</STRONG></TD>
<TD ALIGN=center>RTEMS_SIGNAL_CATCH_ONLY</TD></TR>
<TR><TD ALIGN=left COLSPAN=2><STRONG>SIGNAL_SEND</TD></TR>
<TR><TD ALIGN=left><dd>returns to caller</TD>
<TD ALIGN=center>RTEMS_SIGNAL_SEND_RETURNS_TO_CALLER</TD></TR>
<TR><TD ALIGN=left><dd>signal to self</TD>
<TD ALIGN=center>RTEMS_SIGNAL_SEND_SIGNAL_TO_SELF</TD></TR>
<TR><TD ALIGN=left COLSPAN=2><STRONG>EXIT ASR OVERHEAD</TD></TR>
<TR><TD ALIGN=left><dd>returns to calling task</TD>
<TD ALIGN=center>
RTEMS_SIGNAL_EXIT_ASR_OVERHEAD_RETURNS_TO_CALLING_TASK</TD></TR>
<TR><TD ALIGN=left><dd>returns to preempting task</TD>
<TD ALIGN=center>
RTEMS_SIGNAL_EXIT_ASR_OVERHEAD_RETURNS_TO_PREEMPTING_TASK</TD></TR>
</TABLE>
</CENTER>
@end html
@end ifset
 
@section Partition Manager
 
@ifset use-tex
@tex
\centerline{\vbox{\offinterlineskip\halign{
\span\rtemstimetable
\rtemsonecase{PARTITION\_CREATE}{RTEMS_PARTITION_CREATE_ONLY}
\rtemsonecase{PARTITION\_IDENT}{RTEMS_PARTITION_IDENT_ONLY}
\rtemsonecase{PARTITION\_DELETE}{RTEMS_PARTITION_DELETE_ONLY}
\rtemsdirective{PARTITION\_GET\_BUFFER}
\rtemscase{available}{RTEMS_PARTITION_GET_BUFFER_AVAILABLE}
\rtemscase{not available}{RTEMS_PARTITION_GET_BUFFER_NOT_AVAILABLE}
\rtemsonecase{PARTITION\_RETURN\_BUFFER}
{RTEMS_PARTITION_GET_BUFFER_NOT_AVAILABLE}
\rtemsendtimetable
}}\hfil}
@end tex
@end ifset
 
@ifset use-ascii
@ifinfo
@itemize @bullet
 
@item PARTITION_CREATE
@itemize -
@item only case: RTEMS_PARTITION_CREATE_ONLY
@end itemize
 
@item PARTITION_IDENT
@itemize -
@item only case: RTEMS_PARTITION_IDENT_ONLY
@end itemize
 
@item PARTITION_DELETE
@itemize -
@item only case: RTEMS_PARTITION_DELETE_ONLY
@end itemize
 
@item PARTITION_GET_BUFFER
@itemize -
@item available: RTEMS_PARTITION_GET_BUFFER_AVAILABLE
@item not available: RTEMS_PARTITION_GET_BUFFER_NOT_AVAILABLE
@end itemize
 
@item PARTITION_RETURN_BUFFER
@itemize -
@item only case: RTEMS_PARTITION_RETURN_BUFFER_ONLY
@end itemize
 
@end itemize
@end ifinfo
@end ifset
 
@ifset use-html
@html
<CENTER>
<TABLE COLS=2 WIDTH="80%" BORDER=2>
<TR><TD ALIGN=left><STRONG>PARTITION_CREATE</STRONG></TD>
<TD ALIGN=center>RTEMS_PARTITION_CREATE_ONLY</TD></TR>
<TR><TD ALIGN=left><STRONG>PARTITION_IDENT</STRONG></TD>
<TD ALIGN=center>RTEMS_PARTITION_IDENT_ONLY</TD></TR>
<TR><TD ALIGN=left><STRONG>PARTITION_DELETE</STRONG></TD>
<TD ALIGN=center>RTEMS_PARTITION_DELETE_ONLY</TD></TR>
<TR><TD ALIGN=left COLSPAN=2><STRONG>PARTITION_GET_BUFFER</STRONG></TD></TR>
<TR><TD ALIGN=left><dd>available</TD>
<TD ALIGN=center>RTEMS_PARTITION_GET_BUFFER_AVAILABLE</TD></TR>
<TR><TD ALIGN=left><dd>not available</TD>
<TD ALIGN=center>RTEMS_PARTITION_GET_BUFFER_NOT_AVAILABLE</TD></TR>
<TR><TD ALIGN=left><STRONG>PARTITION_RETURN_BUFFER</STRONG></TD>
<TD ALIGN=center>RTEMS_PARTITION_GET_BUFFER_NOT_AVAILABLE</TD></TR>
</TABLE>
</CENTER>
@end html
@end ifset
 
@page
@section Region Manager
 
@ifset use-tex
@tex
\centerline{\vbox{\offinterlineskip\halign{
\span\rtemstimetable
\rtemsonecase{REGION\_CREATE}{RTEMS_REGION_CREATE_ONLY}
\rtemsonecase{REGION\_IDENT}{RTEMS_REGION_IDENT_ONLY}
\rtemsonecase{REGION\_DELETE}{RTEMS_REGION_DELETE_ONLY}
\rtemsdirective{REGION\_GET\_SEGMENT}
\rtemscase{available}{RTEMS_REGION_GET_SEGMENT_AVAILABLE}
\rtemscase{not available -- NO\_WAIT}
{RTEMS_REGION_GET_SEGMENT_NOT_AVAILABLE_NO_WAIT}
\rtemscase{not available -- caller blocks}
{RTEMS_REGION_GET_SEGMENT_NOT_AVAILABLE_CALLER_BLOCKS}
\rtemsdirective{REGION\_RETURN\_SEGMENT}
\rtemscase{no waiting tasks}{RTEMS_REGION_RETURN_SEGMENT_NO_WAITING_TASKS}
\rtemscase{task readied -- returns to caller}
{RTEMS_REGION_RETURN_SEGMENT_TASK_READIED_RETURNS_TO_CALLER}
\rtemscase{task readied -- preempts caller}
{RTEMS_REGION_RETURN_SEGMENT_TASK_READIED_PREEMPTS_CALLER}
\rtemsendtimetable
}}\hfil}
@end tex
@end ifset
 
@ifset use-ascii
@ifinfo
@itemize @bullet
 
@item REGION_CREATE
@itemize -
@item only case: RTEMS_REGION_CREATE_ONLY
@end itemize
 
@item REGION_IDENT
@itemize -
@item only case: RTEMS_REGION_IDENT_ONLY
@end itemize
 
@item REGION_DELETE
@itemize -
@item only case: RTEMS_REGION_DELETE_ONLY
@end itemize
 
@item REGION_GET_SEGMENT
@itemize -
@item available: RTEMS_REGION_GET_SEGMENT_AVAILABLE
@item not available -- NO_WAIT: RTEMS_REGION_GET_SEGMENT_NOT_AVAILABLE_NO_WAIT
@item not available -- caller blocks: RTEMS_REGION_GET_SEGMENT_NOT_AVAILABLE_CALLER_BLOCKS
@end itemize
 
@item REGION_RETURN_SEGMENT
@itemize -
@item no waiting tasks: RTEMS_REGION_RETURN_SEGMENT_NO_WAITING_TASKS
@item task readied -- returns to caller: RTEMS_REGION_RETURN_SEGMENT_TASK_READIED_RETURNS_TO_CALLER
@item task readied -- preempts caller: RTEMS_REGION_RETURN_SEGMENT_TASK_READIED_PREEMPTS_CALLER
@end itemize
 
@end itemize
@end ifinfo
@end ifset
 
@ifset use-html
@html
<CENTER>
<TABLE COLS=2 WIDTH="80%" BORDER=2>
<TR><TD ALIGN=left><STRONG>REGION_CREATE</STRONG></TD>
<TD ALIGN=center>RTEMS_REGION_CREATE_ONLY</TD></TR>
<TR><TD ALIGN=left><STRONG>REGION_IDENT</STRONG></TD>
<TD ALIGN=center>RTEMS_REGION_IDENT_ONLY</TD></TR>
<TR><TD ALIGN=left><STRONG>REGION_DELETE</STRONG></TD>
<TD ALIGN=center>RTEMS_REGION_DELETE_ONLY</TD></TR>
<TR><TD ALIGN=left COLSPAN=2><STRONG>REGION_GET_SEGMENT</TD></TR>
<TR><TD ALIGN=left><dd>available</TD>
<TD ALIGN=center>RTEMS_REGION_GET_SEGMENT_AVAILABLE</TD></TR>
<TR><TD ALIGN=left><dd>not available -- NO_WAIT</TD>
<TD ALIGN=center>
RTEMS_REGION_GET_SEGMENT_NOT_AVAILABLE_NO_WAIT</TD></TR>
<TR><TD ALIGN=left><dd>not available -- caller blocks</TD>
<TD ALIGN=center>
RTEMS_REGION_GET_SEGMENT_NOT_AVAILABLE_CALLER_BLOCKS</TD></TR>
<TR><TD ALIGN=left COLSPAN=2><STRONG>REGION_RETURN_SEGMENT</TD></TR>
<TR><TD ALIGN=left><dd>no waiting tasks</TD>
<TD ALIGN=center>RTEMS_REGION_RETURN_SEGMENT_NO_WAITING_TASKS</TD></TR>
<TR><TD ALIGN=left><dd>task readied -- returns to caller</TD>
<TD ALIGN=center>
RTEMS_REGION_RETURN_SEGMENT_TASK_READIED_RETURNS_TO_CALLER</TD></TR>
<TR><TD ALIGN=left><dd>task readied -- preempts caller</TD>
<TD ALIGN=center>
RTEMS_REGION_RETURN_SEGMENT_TASK_READIED_PREEMPTS_CALLER</TD></TR>
</TABLE>
</CENTER>
@end html
@end ifset
 
@section Dual-Ported Memory Manager
 
@ifset use-tex
@tex
\centerline{\vbox{\offinterlineskip\halign{
\span\rtemstimetable
\rtemsonecase{PORT\_CREATE}{RTEMS_PORT_CREATE_ONLY}
\rtemsonecase{PORT\_IDENT}{RTEMS_PORT_IDENT_ONLY}
\rtemsonecase{PORT\_DELETE}{RTEMS_PORT_DELETE_ONLY}
\rtemsonecase{PORT\_INTERNAL\_TO\_EXTERNAL}
{RTEMS_PORT_INTERNAL_TO_EXTERNAL_ONLY}
\rtemsonecase{PORT\_EXTERNAL\_TO\_INTERNAL}
{RTEMS_PORT_EXTERNAL_TO_INTERNAL_ONLY}
\rtemsendtimetable
}}\hfil}
@end tex
@end ifset
 
@ifset use-ascii
@ifinfo
@itemize @bullet
 
@item PORT_CREATE
@itemize -
@item only case: RTEMS_PORT_CREATE_ONLY
@end itemize
 
@item PORT_IDENT
@itemize -
@item only case: RTEMS_PORT_IDENT_ONLY
@end itemize
 
@item PORT_DELETE
@itemize -
@item only case: RTEMS_PORT_DELETE_ONLY
@end itemize
 
@item PORT_INTERNAL_TO_EXTERNAL
@itemize -
@item only case: RTEMS_PORT_INTERNAL_TO_EXTERNAL_ONLY
@end itemize
 
@item PORT_EXTERNAL_TO_INTERNAL
@itemize -
@item only case: RTEMS_PORT_EXTERNAL_TO_INTERNAL_ONLY
@end itemize
 
@end itemize
@end ifinfo
@end ifset
 
@ifset use-html
@html
<CENTER>
<TABLE COLS=2 WIDTH="80%" BORDER=2>
<TR><TD ALIGN=left><STRONG>PORT_CREATE</STRONG></TD>
<TD ALIGN=center>RTEMS_PORT_CREATE_ONLY</TD></TR>
<TR><TD ALIGN=left><STRONG>PORT_IDENT</STRONG></TD>
<TD ALIGN=center>RTEMS_PORT_IDENT_ONLY</TD></TR>
<TR><TD ALIGN=left><STRONG>PORT_DELETE</STRONG></TD>
<TD ALIGN=center>RTEMS_PORT_DELETE_ONLY</TD></TR>
<TR><TD ALIGN=left><STRONG>PORT_INTERNAL_TO_EXTERNAL</STRONG></TD>
<TD ALIGN=center>RTEMS_PORT_INTERNAL_TO_EXTERNAL_ONLY</TD></TR>
<TR><TD ALIGN=left><STRONG>PORT_EXTERNAL_TO_INTERNAL</STRONG></TD>
<TD ALIGN=center>RTEMS_PORT_EXTERNAL_TO_INTERNAL_ONLY</TD></TR>
 
</TABLE>
</CENTER>
@end html
@end ifset
 
@section I/O Manager
 
@ifset use-tex
@tex
\centerline{\vbox{\offinterlineskip\halign{
\span\rtemstimetable
\rtemsonecase{IO\_INITIALIZE}{RTEMS_IO_INITIALIZE_ONLY}
\rtemsonecase{IO\_OPEN}{RTEMS_IO_OPEN_ONLY}
\rtemsonecase{IO\_CLOSE}{RTEMS_IO_CLOSE_ONLY}
\rtemsonecase{IO\_READ}{RTEMS_IO_READ_ONLY}
\rtemsonecase{IO\_WRITE}{RTEMS_IO_WRITE_ONLY}
\rtemsonecase{IO\_CONTROL}{RTEMS_IO_CONTROL_ONLY}
\rtemsendtimetable
}}\hfil}
@end tex
@end ifset
 
@ifset use-ascii
@ifinfo
@itemize @bullet
 
@item IO_INITIALIZE
@itemize -
@item only case: RTEMS_IO_INITIALIZE_ONLY
@end itemize
 
@item IO_OPEN
@itemize -
@item only case: RTEMS_IO_OPEN_ONLY
@end itemize
 
@item IO_CLOSE
@itemize -
@item only case: RTEMS_IO_CLOSE_ONLY
@end itemize
 
@item IO_READ
@itemize -
@item only case: RTEMS_IO_READ_ONLY
@end itemize
 
@item IO_WRITE
@itemize -
@item only case: RTEMS_IO_WRITE_ONLY
@end itemize
 
@item IO_CONTROL
@itemize -
@item only case: RTEMS_IO_CONTROL_ONLY
@end itemize
 
@end itemize
@end ifinfo
@end ifset
 
@ifset use-html
@html
<CENTER>
<TABLE COLS=2 WIDTH="80%" BORDER=2>
<TR><TD ALIGN=left><STRONG>IO_INITIALIZE</STRONG></TD>
<TD ALIGN=center>RTEMS_IO_INITIALIZE_ONLY</TD></TR>
<TR><TD ALIGN=left><STRONG>IO_OPEN</STRONG></TD>
<TD ALIGN=center>RTEMS_IO_OPEN_ONLY</TD></TR>
<TR><TD ALIGN=left><STRONG>IO_CLOSE</STRONG></TD>
<TD ALIGN=center>RTEMS_IO_CLOSE_ONLY</TD></TR>
<TR><TD ALIGN=left><STRONG>IO_READ</STRONG></TD>
<TD ALIGN=center>RTEMS_IO_READ_ONLY</TD></TR>
<TR><TD ALIGN=left><STRONG>IO_WRITE</STRONG></TD>
<TD ALIGN=center>RTEMS_IO_WRITE_ONLY</TD></TR>
<TR><TD ALIGN=left><STRONG>IO_CONTROL</STRONG></TD>
<TD ALIGN=center>RTEMS_IO_CONTROL_ONLY</TD></TR>
</TABLE>
</CENTER>
@end html
@end ifset
 
@section Rate Monotonic Manager
 
@ifset use-tex
@tex
\centerline{\vbox{\offinterlineskip\halign{
\span\rtemstimetable
\rtemsonecase{RATE\_MONOTONIC\_CREATE}{RTEMS_RATE_MONOTONIC_CREATE_ONLY}
\rtemsonecase{RATE\_MONOTONIC\_IDENT}{RTEMS_RATE_MONOTONIC_IDENT_ONLY}
\rtemsonecase{RATE\_MONOTONIC\_CANCEL}{RTEMS_RATE_MONOTONIC_CANCEL_ONLY}
\rtemsdirective{RATE\_MONOTONIC\_DELETE}
\rtemscase{active}{RTEMS_RATE_MONOTONIC_DELETE_ACTIVE}
\rtemscase{inactive}{RTEMS_RATE_MONOTONIC_DELETE_INACTIVE}
\rtemsdirective{RATE\_MONOTONIC\_PERIOD}
\rtemscase{initiate period -- returns to caller}
{RTEMS_RATE_MONOTONIC_PERIOD_INITIATE_PERIOD_RETURNS_TO_CALLER}
\rtemscase{conclude period -- caller blocks}
{RTEMS_RATE_MONOTONIC_PERIOD_CONCLUDE_PERIOD_CALLER_BLOCKS}
\rtemscase{obtain status}{RTEMS_RATE_MONOTONIC_PERIOD_OBTAIN_STATUS}
\rtemsendtimetable
}}\hfil}
@end tex
@end ifset
 
@ifset use-ascii
@ifinfo
@itemize @bullet
 
@item RATE_MONOTONIC_CREATE
@itemize -
@item only case: RTEMS_RATE_MONOTONIC_CREATE_ONLY
@end itemize
 
@item RATE_MONOTONIC_IDENT
@itemize -
@item only case: RTEMS_RATE_MONOTONIC_IDENT_ONLY
@end itemize
 
@item RATE_MONOTONIC_CANCEL
@itemize -
@item only case: RTEMS_RATE_MONOTONIC_CANCEL_ONLY
@end itemize
 
@item RATE_MONOTONIC_DELETE
@itemize -
@item active: RTEMS_RATE_MONOTONIC_DELETE_ACTIVE
@item inactive: RTEMS_RATE_MONOTONIC_DELETE_INACTIVE
@end itemize
 
@item RATE_MONOTONIC_PERIOD
@itemize -
@item initiate period -- returns to caller: RTEMS_RATE_MONOTONIC_PERIOD_INITIATE_PERIOD_RETURNS_TO_CALLER
@item conclude period -- caller blocks: RTEMS_RATE_MONOTONIC_PERIOD_CONCLUDE_PERIOD_CALLER_BLOCKS
@item obtain status: RTEMS_RATE_MONOTONIC_PERIOD_OBTAIN_STATUS
@end itemize
 
@end itemize
@end ifinfo
@end ifset
 
@ifset use-html
@html
<CENTER>
<TABLE COLS=2 WIDTH="80%" BORDER=2>
<TR><TD ALIGN=left><STRONG>RATE_MONOTONIC_CREATE</STRONG></TD>
<TD ALIGN=center>RTEMS_RATE_MONOTONIC_CREATE_ONLY</TD></TR>
<TR><TD ALIGN=left><STRONG>RATE_MONOTONIC_IDENT</STRONG></TD>
<TD ALIGN=center>RTEMS_RATE_MONOTONIC_IDENT_ONLY</TD></TR>
<TR><TD ALIGN=left><STRONG>RATE_MONOTONIC_CANCEL</STRONG></TD>
<TD ALIGN=center>RTEMS_RATE_MONOTONIC_CANCEL_ONLY</TD></TR>
<TR><TD ALIGN=left COLSPAN=2><STRONG>RATE_MONOTONIC_DELETE</TD></TR>
<TR><TD ALIGN=left><dd>active</TD>
<TD ALIGN=center>RTEMS_RATE_MONOTONIC_DELETE_ACTIVE</TD></TR>
<TR><TD ALIGN=left><dd>inactive</TD>
<TD ALIGN=center>RTEMS_RATE_MONOTONIC_DELETE_INACTIVE</TD></TR>
<TR><TD ALIGN=left COLSPAN=2><STRONG>RATE_MONOTONIC_PERIOD</TD></TR>
<TR><TD ALIGN=left><dd>initiate period -- returns to caller</TD>
<TD ALIGN=center>
RTEMS_RATE_MONOTONIC_PERIOD_INITIATE_PERIOD_RETURNS_TO_CALLER</TD></TR>
<TR><TD ALIGN=left><dd>conclude period -- caller blocks</TD>
<TD ALIGN=center>
RTEMS_RATE_MONOTONIC_PERIOD_CONCLUDE_PERIOD_CALLER_BLOCKS</TD></TR>
<TR><TD ALIGN=left><dd>obtain status</TD>
<TD ALIGN=center>RTEMS_RATE_MONOTONIC_PERIOD_OBTAIN_STATUS</TD></TR>
</TABLE>
</CENTER>
@end html
@end ifset
 
@tex
\global\advance \smallskipamount by 4pt
@end tex
/ChangeLog
0,0 → 1,11
2002-03-27 Ralf Corsepius <corsepiu@faw.uni-ulm.de>
 
* Makefile.am: Remove AUTOMAKE_OPTIONS.
 
2002-01-18 Ralf Corsepius <corsepiu@faw.uni-ulm.de>
 
* Makefile.am: Require automake-1.5.
 
2000-08-10 Joel Sherrill <joel@OARcorp.com>
 
* ChangeLog: New file.
/timemac.texi
0,0 → 1,36
@c
@c COPYRIGHT (c) 1988-2002.
@c On-Line Applications Research Corporation (OAR).
@c All rights reserved.
@c
@c timemac.texi,v 1.5 2002/01/17 21:47:44 joel Exp
@c
@c
@c Macros to help with the tables in this file
@c
 
@tex
\global\advance \smallskipamount by -4pt
\global\def\rtemstimetable{
\vrule\strut##&
\hbox to 3.0in{\enskip##\hfil}&
\hbox to 0.75in{\enskip##\hfil}&
\vrule##\cr
\noalign{\hrule}
}
 
\global\def\rtemsendtimetable{}
\global\def\rtemsonecase#1#2{
& \bf #1\hfil& #2 & \cr\noalign{\hrule}
}
 
\global\def\rtemsdirective#1{
& \bf #1 \hfil& & \cr\noalign{\hrule}
}
 
\global\def\rtemscase#1#2{
& \hskip 0.3in #1\hfil& #2 & \cr\noalign{\hrule}
}
 
@end tex
/cpright.texi
0,0 → 1,47
@c
@c COPYRIGHT (c) 1988-2002.
@c On-Line Applications Research Corporation (OAR).
@c All rights reserved.
@c
@c cpright.texi,v 1.9 2002/01/17 21:47:44 joel Exp
@c
 
@c
@c The following puts a space somewhere on an otherwise empty page so we
@c can force the copyright description onto a left hand page.
@c
 
@tex
{\parskip=0pt \hfill On-Line Applications Research Corporation\par \hfill
\TeX{}info \texinfoversion\par }
@end tex
 
@vskip 0pt plus 1filll
COPYRIGHT @copyright{} 1988 - 2002.@*
On-Line Applications Research Corporation (OAR).@*
 
The authors have used their best efforts in preparing
this material. These efforts include the development, research,
and testing of the theories and programs to determine their
effectiveness. No warranty of any kind, expressed or implied,
with regard to the software or the material contained in this
document is provided. No liability arising out of the
application or use of any product described in this document is
assumed. The authors reserve the right to revise this material
and to make changes from time to time in the content hereof
without obligation to notify anyone of such revision or changes.
 
Any inquiries concerning RTEMS, its related support
components, its documentation, or any custom services
for RTEMS should be directed to:
 
@example
On-Line Applications Research Corporation
4910-L Corporate Drive
Huntsville, AL 35805
VOICE: (256) 722-9985
FAX: (256) 722-0985
EMAIL: rtems@@OARcorp.com
URL: http://www.oarcorp.com
@end example
 
/setup.texi
0,0 → 1,65
@c
@c COPYRIGHT (c) 1988-2002.
@c On-Line Applications Research Corporation (OAR).
@c All rights reserved.
@c
@c setup.texi,v 1.32 2002/01/17 21:47:44 joel Exp
@c
 
@c
@c The following determines which set of the tables and figures we will use.
@c We default to ASCII but if available TeX or HTML versions will
@c be used instead.
@c
 
@set use-ascii
@c @clear use-html
@c @clear use-tex
@iftex
@clear use-ascii
@clear use-html
@set use-tex
@end iftex
@ifhtml
@clear use-ascii
@clear use-tex
@set use-html
@end ifhtml
 
@c
@c The following variable says to use texinfo or html for the two column
@c texinfo tables. For somethings the format does not look good in html.
@c With our adjustment to the left column in TeX, it nearly always looks
@c good printed.
@c
@ifset use-ascii
@set use-texinfo-tables
@end ifset
@ifset use-tex
@set use-texinfo-tables
@end ifset
@ifset use-html
@clear use-texinfo-tables
@end ifset
 
@c
@c Custom whitespace adjustments. We could fiddle a bit more.
@c
@tex
\global\parindent 0in
\global\chapheadingskip = 15pt plus 4pt minus 2pt
\global\secheadingskip = 12pt plus 4pt minus 2pt
\global\subsecheadingskip = 9pt plus 4pt minus 2pt
\global\hbadness = 10000
\global\tolerance = 6000
\global\tableindent = 1.5in
\global\itemindent = 0.5in
 
@ifclear smallbook
\global\parskip 6pt plus 1pt
@end ifclear
@end tex
 
 
/Makefile.am
0,0 → 1,6
## Makefile.am,v 1.6 2002/03/28 00:52:43 joel Exp
 
 
EXTRA_DIST = cpright.texi setup.texi timemac.texi timetbl.t treedef.tex \
wksheets.t timing.t
 
/timing.t
0,0 → 1,396
@c
@c COPYRIGHT (c) 1988-2002.
@c On-Line Applications Research Corporation (OAR).
@c All rights reserved.
@c
@c timing.t,v 1.3 2002/01/17 21:47:44 joel Exp
@c
 
@chapter Timing Specification
 
@section Introduction
 
This chapter provides information pertaining to the
measurement of the performance of RTEMS, the methods of
gathering the timing data, and the usefulness of the data. Also
discussed are other time critical aspects of RTEMS that affect
an applications design and ultimate throughput. These aspects
include determinancy, interrupt latency and context switch times.
 
@section Philosophy
 
Benchmarks are commonly used to evaluate the
performance of software and hardware. Benchmarks can be an
effective tool when comparing systems. Unfortunately,
benchmarks can also be manipulated to justify virtually any
claim. Benchmarks of real-time executives are difficult to
evaluate for a variety of reasons. Executives vary in the
robustness of features and options provided. Even when
executives compare favorably in functionality, it is quite
likely that different methodologies were used to obtain the
timing data. Another problem is that some executives provide
times for only a small subset of directives, This is typically
justified by claiming that these are the only time-critical
directives. The performance of some executives is also very
sensitive to the number of objects in the system. To obtain any
measure of usefulness, the performance information provided for
an executive should address each of these issues.
 
When evaluating the performance of a real-time
executive, one typically considers the following areas:
determinancy, directive times, worst case interrupt latency, and
context switch time. Unfortunately, these areas do not have
standard measurement methodologies. This allows vendors to
manipulate the results such that their product is favorably
represented. We have attempted to provide useful and meaningful
timing information for RTEMS. To insure the usefulness of our
data, the methodology and definitions used to obtain and
describe the data are also documented.
 
@subsection Determinancy
 
The correctness of data in a real-time system must
always be judged by its timeliness. In many real-time systems,
obtaining the correct answer does not necessarily solve the
problem. For example, in a nuclear reactor it is not enough to
determine that the core is overheating. This situation must be
detected and acknowledged early enough that corrective action
can be taken and a meltdown avoided.
 
Consequently, a system designer must be able to
predict the worst-case behavior of the application running under
the selected executive. In this light, it is important that a
real-time system perform consistently regardless of the number
of tasks, semaphores, or other resources allocated. An
important design goal of a real-time executive is that all
internal algorithms be fixed-cost. Unfortunately, this goal is
difficult to completely meet without sacrificing the robustness
of the executive's feature set.
 
Many executives use the term deterministic to mean
that the execution times of their services can be predicted.
However, they often provide formulas to modify execution times
based upon the number of objects in the system. This usage is
in sharp contrast to the notion of deterministic meaning fixed
cost.
 
Almost all RTEMS directives execute in a fixed amount
of time regardless of the number of objects present in the
system. The primary exception occurs when a task blocks while
acquiring a resource and specifies a non-zero timeout interval.
 
Other exceptions are message queue broadcast,
obtaining a variable length memory block, object name to ID
translation, and deleting a resource upon which tasks are
waiting. In addition, the time required to service a clock tick
interrupt is based upon the number of timeouts and other
"events" which must be processed at that tick. This second
group is composed primarily of capabilities which are inherently
non-deterministic but are infrequently used in time critical
situations. The major exception is that of servicing a clock
tick. However, most applications have a very small number of
timeouts which expire at exactly the same millisecond (usually
none, but occasionally two or three).
 
@subsection Interrupt Latency
 
Interrupt latency is the delay between the CPU's
receipt of an interrupt request and the execution of the first
application-specific instruction in an interrupt service
routine. Interrupts are a critical component of most real-time
applications and it is critical that they be acted upon as
quickly as possible.
 
Knowledge of the worst case interrupt latency of an
executive aids the application designer in determining the
maximum period of time between the generation of an interrupt
and an interrupt handler responding to that interrupt. The
interrupt latency of an system is the greater of the executive's
and the applications's interrupt latency. If the application
disables interrupts longer than the executive, then the
application's interrupt latency is the system's worst case
interrupt disable period.
 
The worst case interrupt latency for a real-time
executive is based upon the following components:
 
@itemize @bullet
@item the longest period of time interrupts are disabled
by the executive,
 
@item the overhead required by the executive at the
beginning of each ISR,
 
@item the time required for the CPU to vector the
interrupt, and
 
@item for some microprocessors, the length of the longest
instruction.
@end itemize
 
The first component is irrelevant if an interrupt
occurs when interrupts are enabled, although it must be included
in a worst case analysis. The third and fourth components are
particular to a CPU implementation and are not dependent on the
executive. The fourth component is ignored by this document
because most applications use only a subset of a
microprocessor's instruction set. Because of this the longest
instruction actually executed is application dependent. The
worst case interrupt latency of an executive is typically
defined as the sum of components (1) and (2). The second
component includes the time necessry for RTEMS to save registers
and vector to the user-defined handler. RTEMS includes the
third component, the time required for the CPU to vector the
interrupt, because it is a required part of any interrupt.
 
Many executives report the maximum interrupt disable
period as their interrupt latency and ignore the other
components. This results in very low worst-case interrupt
latency times which are not indicative of actual application
performance. The definition used by RTEMS results in a higher
interrupt latency being reported, but accurately reflects the
longest delay between the CPU's receipt of an interrupt request
and the execution of the first application-specific instruction
in an interrupt service routine.
 
The actual interrupt latency times are reported in
the Timing Data chapter of this supplement.
 
@subsection Context Switch Time
 
An RTEMS context switch is defined as the act of
taking the CPU from the currently executing task and giving it
to another task. This process involves the following components:
 
@itemize @bullet
@item Saving the hardware state of the current task.
 
@item Optionally, invoking the TASK_SWITCH user extension.
 
@item Restoring the hardware state of the new task.
@end itemize
 
RTEMS defines the hardware state of a task to include
the CPU's data registers, address registers, and, optionally,
floating point registers.
 
Context switch time is often touted as a performance
measure of real-time executives. However, a context switch is
performed as part of a directive's actions and should be viewed
as such when designing an application. For example, if a task
is unable to acquire a semaphore and blocks, a context switch is
required to transfer control from the blocking task to a new
task. From the application's perspective, the context switch is
a direct result of not acquiring the semaphore. In this light,
the context switch time is no more relevant than the performance
of any other of the executive's subroutines which are not
directly accessible by the application.
 
In spite of the inappropriateness of using the
context switch time as a performance metric, RTEMS context
switch times for floating point and non-floating points tasks
are provided for comparison purposes. Of the executives which
actually support floating point operations, many do not report
context switch times for floating point context switch time.
This results in a reported context switch time which is
meaningless for an application with floating point tasks.
 
The actual context switch times are reported in the
Timing Data chapter of this supplement.
 
@subsection Directive Times
 
Directives are the application's interface to the
executive, and as such their execution times are critical in
determining the performance of the application. For example, an
application using a semaphore to protect a critical data
structure should be aware of the time required to acquire and
release a semaphore. In addition, the application designer can
utilize the directive execution times to evaluate the
performance of different synchronization and communication
mechanisms.
 
The actual directive execution times are reported in
the Timing Data chapter of this supplement.
 
@section Methodology
 
@subsection Software Platform
 
The RTEMS timing suite is written in C. The overhead
of passing arguments to RTEMS by C is not timed. The times
reported represent the amount of time from entering to exiting
RTEMS.
 
The tests are based upon one of two execution models:
(1) single invocation times, and (2) average times of repeated
invocations. Single invocation times are provided for
directives which cannot easily be invoked multiple times in the
same scenario. For example, the times reported for entering and
exiting an interrupt service routine are single invocation
times. The second model is used for directives which can easily
be invoked multiple times in the same scenario. For example,
the times reported for semaphore obtain and semaphore release
are averages of multiple invocations. At least 100 invocations
are used to obtain the average.
 
@subsection Hardware Platform
 
Since RTEMS supports a variety of processors, the
hardware platform used to gather the benchmark times must also
vary. Therefore, for each processor supported the hardware
platform must be defined. Each definition will include a brief
description of the target hardware platform including the clock
speed, memory wait states encountered, and any other pertinent
information. This definition may be found in the processor
dependent timing data chapter within this supplement.
 
@subsection What is measured?
 
An effort was made to provide execution times for a
large portion of RTEMS. Times were provided for most directives
regardless of whether or not they are typically used in time
critical code. For example, execution times are provided for
all object create and delete directives, even though these are
typically part of application initialization.
 
The times include all RTEMS actions necessary in a
particular scenario. For example, all times for blocking
directives include the context switch necessary to transfer
control to a new task. Under no circumstances is it necessary
to add context switch time to the reported times.
 
The following list describes the objects created by
the timing suite:
 
@itemize @bullet
@item All tasks are non-floating point.
 
@item All tasks are created as local objects.
 
@item No timeouts are used on blocking directives.
 
@item All tasks wait for objects in FIFO order.
 
@end itemize
 
In addition, no user extensions are configured.
 
@subsection What is not measured?
 
The times presented in this document are not intended
to represent best or worst case times, nor are all directives
included. For example, no times are provided for the initialize
executive and fatal_error_occurred directives. Other than the
exceptions detailed in the Determinancy section, all directives
will execute in the fixed length of time given.
 
Other than entering and exiting an interrupt service
routine, all directives were executed from tasks and not from
interrupt service routines. Directives invoked from ISRs, when
allowable, will execute in slightly less time than when invoked
from a task because rescheduling is delayed until the interrupt
exits.
 
@subsection Terminology
 
The following is a list of phrases which are used to
distinguish individual execution paths of the directives taken
during the RTEMS performance analysis:
 
@table @b
@item another task
The directive was performed
on a task other than the calling task.
 
@item available
A task attempted to obtain a resource and
immediately acquired it.
 
@item blocked task
The task operated upon by the
directive was blocked waiting for a resource.
 
@item caller blocks
The requested resoure was not
immediately available and the calling task chose to wait.
 
@item calling task
The task invoking the directive.
 
@item messages flushed
One or more messages was flushed
from the message queue.
 
@item no messages flushed
No messages were flushed from
the message queue.
 
@item not available
A task attempted to obtain a resource
and could not immediately acquire it.
 
@item no reschedule
The directive did not require a
rescheduling operation.
 
@item NO_WAIT
A resource was not available and the
calling task chose to return immediately via the NO_WAIT option
with an error.
 
@item obtain current
The current value of something was
requested by the calling task.
 
@item preempts caller
The release of a resource caused a
task of higher priority than the calling to be readied and it
became the executing task.
 
@item ready task
The task operated upon by the directive
was in the ready state.
 
@item reschedule
The actions of the directive
necessitated a rescheduling operation.
 
@item returns to caller
The directive succeeded and
immediately returned to the calling task.
 
@item returns to interrupted task
The instructions
executed immediately following this interrupt will be in the
interrupted task.
 
@item returns to nested interrupt
The instructions
executed immediately following this interrupt will be in a
previously interrupted ISR.
 
@item returns to preempting task
The instructions
executed immediately following this interrupt or signal handler
will be in a task other than the interrupted task.
 
@item signal to self
The signal set was sent to the
calling task and signal processing was enabled.
 
@item suspended task
The task operated upon by the
directive was in the suspended state.
 
@item task readied
The release of a resource caused a
task of lower or equal priority to be readied and the calling
task remained the executing task.
 
@item yield
The act of attempting to voluntarily release
the CPU.
 
@end table
 
/treedef.tex
0,0 → 1,317
% treedef.tex
%
% These definitions for tree macros are taken from "Trees in TeX",
% by David Eppstein, as published in TUGboat 6#1, March 1985.
% David Eppstein's address (as of 15 June 1988) is
% Computer Science Department
% Columbia University
% New York, NY 10027
% Eppstein@cs.Columbia.edu
%
% Tree -- a macro to make aligned (horizontal) trees in TeX
%
% Input is of the form
% \tree
% item
% \subtree
% \leaf{item}
% .
% .
% .
% \endsubtree
% \subtree
% .
% .
% .
% \endsubtree
% \endsubtree
% \endtree
%
% Nesting is to any level. \leaf is defined as a subtree of one item:
% \def\leaf#1{\subtree#1\endsubtree}.
%
% A structure:
% \subtree
% item_part1
% item_part2
% .
% .
% .
%
% will print item_part2 directly below item_part1 as a single item
% as if they were in a \box.
%
% The macro is a 3-pass macro. On the first pass it sets up a data
% structure from the \subtree ... \endsubtree definitions. On the second pass
% it recursively calculates the width of each level of the tree. On the third
% pass it sets up the boxes, glue and rules.
%
% By David Eppstein, TUGboat, vol. 6 (1985), no. 1, pp. 31--35.
% Transcribed by Margaret Kromer (peg), Feb., 1986.
%
% Pass 1
% At the end of pass 1, the tree is coded as a nested collection of \hboxes
% and \vboxes.
\newbox\treebox\newcount\treeboxcnt
\def\tree{\message{Begin tree}\treeboxcnt=1\global\setbox\treebox=\boxtree}
\def\subtree{\ettext \advance\treeboxcnt by 1 \boxtree}
\def\leaf#1{\subtree#1\endsubtree}
\def\endsubtree{\ettext \egroup \advance\treeboxcnt-1{}%
\ifnum\treeboxcnt=-1 \treeerrora\fi}
\def\endtree{\endsubtree \ifnum\treeboxcnt>0 \treeerrorb\fi%
\settreesizes \typesettree \message{-- end tree}}
% Error messages for unbalanced tree
\def\treeerrora{\errhelp=\treeerrorahelp%
\errmessage{Unbalanced tree -- too many endsubtrees}}
\newhelp\treeerrorahelp{There are more subtrees closed than opened}
\def\treeerrorb{\errhelp=\treeerrorbhelp%
\errmessage{Unbalanced tree -- not enough endsubtrees}}
\newhelp\treeerrorbhelp{Not all the subtrees of the tree are closed.
If you continue, you'll get some mysterious secondary errors.}
% Set up \vbox containing root of tree
\newif\iftreetext\treetextfalse % Whether still aligning text
\def\boxtree{\hbox\bgroup % Start outer box of tree or subtree
\baselineskip 2.5ex % Narrow line spacing slightly
\tabskip 0pt % No spurious glue in alignment
\vbox\bgroup % Start inner text \vbox
\treetexttrue % Remember for \ettext
\let\par\crcr \obeylines % New line breaks without explicit \cr
\halign\bgroup##\hfil\cr} % Start alignment with simple template
\def\ettext{\iftreetext % Are we still in inner text \vbox?
\crcr\egroup \egroup \fi} % Yes, end alignment and box
% Pass 2
% Recursively calculate widths of tree with \setsizes; keep results in
% \treesizes; \treewidth contains total width calculated so far. \treeworkbox
% is workspace containing subtree being sized.
\newbox\treeworkbox
\def\cons#1#2{\edef#2{\xmark #1#2}} % Add something to start of list
\def\car#1{\expandafter\docar#1\docar} % Take first element of list
\def\docar\xmark#1\xmark#2\docar{#1} % ..by ignoring rest in expansion
\def\cdr#1{\expandafter\docdr#1\docdr#1}% Similarly, drop first element
\def\docdr\xmark#1\xmark#2\docdr#3{\def#3{\xmark #2}}
\def\xmark{\noexpand\xmark} % List separator expands to self
\def\nil{\xmark} % Empty list is just separator
\def\settreesizes{\setbox\treeworkbox=\copy\treebox%
\global\let\treesizes\nil \setsizes}
\newdimen\treewidth % Width of this part of the tree
\def\setsizes{\setbox\treeworkbox=\hbox\bgroup% Get a horiz list as a workspace
\unhbox\treeworkbox\unskip % Take tree, unpack it into horiz list
\inittreewidth % Get old width at this level
\sizesubtrees % Recurse through all subtrees
\sizelevel % Now set width from remaining \vbox
\egroup} % All done, finish our \hbox
\def\inittreewidth{\ifx\treesizes\nil % If this is the first at this level
\treewidth=0pt % ..then we have no previous max width
\else \treewidth=\car\treesizes % Otherwise take old max level width
\global\cdr\treesizes % ..and advance level width storage
\fi} % ..in preparation for next level.
\def\sizesubtrees{\loop % For each box in horiz list (subtree)
\setbox\treeworkbox=\lastbox \unskip % ..pull it off list and flush glue
\ifhbox\treeworkbox \setsizes % If hbox, it's a subtree - recurse
\repeat} % ..and loop; end loop on tree text
\def\sizelevel{%
\ifdim\treewidth<\wd\treeworkbox % If greater than previous maximum
\treewidth=\wd\treeworkbox \fi % Then set max to new high
\global\cons{\the\treewidth}\treesizes}% In either case, put back on list
% Pass 3
% Recursively typeset tree with \maketree by adding an \hbox containing
% a subtree (in \treebox) to the horizontal list.
\newdimen\treeheight % Height of this part of the tree
\newif\ifleaf % Tree has no subtrees (is a leaf)
\newif\ifbotsub % Bottom subtree of parent
\newif\iftopsub % Top subtree of parent
\def\typesettree{\medskip\maketree\medskip} % Make whole tree
\def\maketree{\hbox{\treewidth=\car\treesizes % Get width at this level
\cdr\treesizes % Set up width list for recursion
\makesubtreebox\unskip % Set \treebox to text, make subtrees
\ifleaf \makeleaf % No subtrees, add glue
\else \makeparent \fi}} % Have subtrees, stick them at right
{\catcode`@=11 % Be able to use \voidb@x
\gdef\makesubtreebox{\unhbox\treebox % Open up tree or subtree
\unskip\global\setbox\treebox\lastbox % Pick up very last box
\ifvbox\treebox % If we're already at the \vbox
\global\leaftrue \let\next\relax % ..then this is a leaf
\else \botsubtrue % Otherwise, we have subtrees
\setbox\treeworkbox\box\voidb@x % Init stack of processed subs
\botsubtrue \let\next\makesubtree % ..and call \maketree on them
\fi \next}} % Finish up for whichever it was
\def\makesubtree{\setbox1\maketree % Call \maketree on this subtree
\unskip\global\setbox\treebox\lastbox % Pick up box before it
\treeheight=\ht1 % Get height of subtree we made
\advance\treeheight 2ex % Add some room around the edges
\ifhbox\treebox \topsubfalse % If picked up box is a \vbox,
\else \topsubtrue \fi % ..this is the top, otherwise not
\addsubtreebox % Stack subtree with the rest
\iftopsub \global\leaffalse % If top, remember not a leaf
\let\next\relax \else % ..(after recursion), set return
\botsubfalse \let\next\makesubtree % Otherwise, we have more subtrees
\fi \next} % Do tail recursion or return
\def\addsubtreebox{\setbox\treeworkbox=\vbox{\subtreebox\unvbox\treeworkbox}}
\def\subtreebox{\hbox\bgroup % Start \hbox of tree and lines
\vbox to \treeheight\bgroup % Start \vbox for vertical rules
\ifbotsub \iftopsub \vfil % If both bottom and top subtree
\hrule width 0.4pt % ..vertical rule is just a dot
\else \treehalfrule \fi \vfil % Bottom gets half-height rule
\else \iftopsub \vfil \treehalfrule % Top gets half-height the other way
\else \hrule width 0.4pt height \treeheight \fi\fi % Middle, full height
\egroup % Finish vertical rule \vbox
\treectrbox{\hrule width 1em}\hskip 0.2em\treectrbox{\box1}\egroup}
\def\treectrbox#1{\vbox to \treeheight{\vfil #1\vfil}}
\def\treehalfrule{\dimen\treeworkbox=\treeheight % Get total height
\divide\dimen\treeworkbox 2%
\advance\dimen\treeworkbox 0.2pt % Divide by two, add half horiz height
\hrule width 0.4pt height \dimen\treeworkbox}% Make a vertical rule that high
\def\makeleaf{\box\treebox} % Add leaf box to horiz list
\def\makeparent{\ifdim\ht\treebox>%
\ht\treeworkbox % If text is higher than subtrees
\treeheight=\ht\treebox % ..use that height
\else \treeheight=\ht\treeworkbox \fi % Otherwise use height of subtrees
\advance\treewidth-\wd\treebox % Take remainder of level width
\advance\treewidth 1em % ..after accounting for text and glue
\treectrbox{\box\treebox}\hskip 0.2em % Add text, space before connection
\treectrbox{\hrule width \treewidth}%
\treectrbox{\box\treeworkbox}} % Add \hrule, subs
 
************************************************
% Plain TeX driver for tree.tex
 
\def\uncatcodespecials{\catcode`@=12\def\do##1{\catcode`##1=12}\dospecials}
\def\setupverbatim{\tt\obeylines\uncatcodespecials\obeyspaces}
{\obeyspaces\global\let =\ }
\def\beginshowoff{\par\begingroup\setupverbatim\doverbatim}
{\catcode`\!=0 \catcode`\\=12
!obeylines!gdef!doverbatim^^M#1\endshowoff{#1!endgroup!medbreak!filbreak%
!smallskip}}
 
% see The TeXbook, exercise 22.14
%\input tree.tex
\centerline{\bf TREE TREE}
\bigskip
\tree
{Tree}
Uses
\subtree
Computer
Science
\subtree
Data
Structures
\leaf{Search Tree}
\leaf{Priority Queue}
\endsubtree
\subtree
Parsing
\leaf{Parse Tree}
\leaf{Symbol Table}
\endsubtree
\subtree
Structured
Programming
\endsubtree
\endsubtree
\subtree
Genealogy
\leaf{Ancestors}
\leaf{Descendants}
\endsubtree
\subtree
Electrical
Engineering
\subtree
Paper
\leaf{{\it Vitae}}
\leaf{Announcements}
\leaf{Proposals}
\leaf{\TeX{} Samples}
\endsubtree
\endsubtree
\subtree
Construction
\leaf{Fences}
\subtree
Buildings
\subtree
Houses
\leaf{Human}
\leaf{Dog}
\leaf{Bird}
\leaf{Tree}
\endsubtree
\leaf{Barns}
\leaf{Other}
\endsubtree
\leaf{\dots}
\endsubtree
\subtree
Taxonomies
\leaf{Tree Uses}
\endsubtree
\endtree
 
\vskip.5truein
\beginshowoff
% see The TeXbook, exercise 22.14
\input tree.tex
\centerline{TREE TREE}
\bigskip
\tree
Tree
Uses
\subtree
Computer
Science
\subtree
Data
Structures
\leaf{Search Tree}
\leaf{Priority Queue}
\endsubtree
\subtree
Parsing
\leaf{Parse Tree}
\leaf{Symbol Table}
\endsubtree
\subtree
Structured
Programming
\endsubtree
\endsubtree
\subtree
Genealogy
\leaf{Ancestors}
\leaf{Descendants}
\endsubtree
\subtree
Electrical
Engineering
\subtree
Paper
\leaf{{\it Vitae}}
\leaf{Announcements}
\leaf{Proposals}
\leaf{\TeX{} Samples}
\endsubtree
\endsubtree
\subtree
Construction
\leaf{Fences}
\subtree
Buildings
\subtree
Houses
\leaf{Human}
\leaf{Dog}
\leaf{Bird}
\leaf{Tree}
\endsubtree
\leaf{Barns}
\leaf{Other}
\endsubtree
\leaf{\dots}
\endsubtree
\subtree
Taxonomies
\leaf{Tree Uses}
\endsubtree
\endtree
\endshowoff
/.
. Property changes : Added: svn:ignore ## -0,0 +1,3 ## +Makefile +Makefile.in +setup.texi

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.