An RTEMS based application is initiated or re-initiated when the processor is reset. This initialization code is responsible for preparing the target platform for the RTEMS application. Although the exact actions performed by the initialization code are highly processor and target dependent, the logical functionality of these actions are similar across a variety of processors and target platforms.
Normally, the application's initialization is
performed at two separate times: before the call to
rtems.initialize_executive
(reset application initialization) and
after rtems.initialize_executive
in the user's initialization tasks
(local and global application initialization). The order of the
startup procedure is as follows:
rtems.initialize_executive
The reset application initialization code is executed first when the processor is reset. All of the hardware must be initialized to a quiescent state by this software before initializing RTEMS. When in quiescent state, devices do not generate any interrupts or require any servicing by the application. Some of the hardware components may be initialized in this code as well as any application initialization that does not involve calls to RTEMS directives.
The processor's Interrupt Vector Table which will be
used by the application may need to be set to the required value
by the reset application initialization code. Because
interrupts are enabled automatically by RTEMS as part of the
rtems.initialize_executive
directive,
the Interrupt Vector Table MUST
be set before this directive is invoked to insure correct
interrupt vectoring. The processor's Interrupt Vector Table
must be accessible by RTEMS as it will be modified by the
rtems.interrupt_catch
directive.
On some CPUs, RTEMS installs it's
own Interrupt Vector Table as part of initialization and thus
these requirements are met automatically. The reset code which
is executed before the call to rtems.initialize_executive
has the following requirements:
RTEMS.MINIMUM_STACK_SIZE
bytes and initialize the stack pointer for the
rtems.initialize_executive
directive.
The rtems.initialize_executive
directive does not return to
the initialization code, but causes the highest priority
initialization task to begin execution. Initialization tasks
are used to perform both local and global application
initialization which is dependent on RTEMS facilities. The user
initialization task facility is typically used to create the
application's set of tasks.
Copyright © 1988-2007OAR Corporation