Pragma Profile (Ravenscar)
pragma Profile (Ravenscar);
A configuration pragma that establishes the following set of configuration
plus the following set of restrictions:
- [RM D.2.2] Tasks are dispatched following a preemptive
priority-ordered scheduling policy.
- [RM D.3] While tasks and interrupts execute a protected action, they inherit
the ceiling priority of the corresponding protected object.
Max_Entry_Queue_Length = 1
- Defines the maximum number of calls that are queued on a (protected) entry.
Note that this restrictions is checked at run time. Violation of this
restriction results in the raising of Program_Error exception at the point of
the call. For the Profile (Ravenscar) the value of Max_Entry_Queue_Length is
always 1 and hence no task can be queued on a protected entry.
Max_Protected_Entries = 1
- [RM D.7] Specifies the maximum number of entries per protected type. The
bounds of every entry family of a protected unit shall be static, or shall be
defined by a discriminant of a subtype whose corresponding bound is static.
For the Profile (Ravenscar) the value of Max_Protected_Entries is always 1.
Max_Task_Entries = 0
- [RM D.7] Specifies the maximum number of entries
per task. The bounds of every entry family
of a task unit shall be static, or shall be
defined by a discriminant of a subtype whose
corresponding bound is static. A value of zero
indicates that no rendezvous are possible. For
the Profile (Ravenscar), the value of Max_Task_Entries is always
- [RM D.7] There are no abort_statements, and there are
no calls to Task_Identification.Abort_Task.
- There are no semantic dependences on the package
- There are no semantic dependencies on the package Ada.Calendar.
- There is no call to any of the operations defined in package Ada.Interrupts
(Is_Reserved, Is_Attached, Current_Handler, Attach_Handler, Exchange_Handler,
Detach_Handler, and Reference).
- [RM D.7] There are no semantic dependencies on the package Dynamic_Priorities.
- [RM D.7] No constructs are allowed to cause implicit heap allocation.
- Protected objects and access types that designate
such objects shall be declared only at library level.
- [RM D.7] All objects of type Ada.Timing_Events.Timing_Event are
declared at the library level.
- There are no allocators for protected types or
types containing protected subcomponents.
- There are no delay_relative statements.
- Requeue statements are not allowed.
- There are no select_statements.
- [RM D.7] There are no calls to Ada.Task_Termination.Set_Specific_Handler
or to Ada.Task_Termination.Specific_Handler.
- [RM D.7] There are no allocators for task types
or types containing task subcomponents.
- There are no semantic dependencies on the Ada.Task_Attributes package.
- [RM D.7] All (non-environment) tasks depend
directly on the environment task of the partition.
- Tasks which terminate are erroneous.
- There are no semantic dependencies on the Ada.Unchecked_Conversion package.
- There are no semantic dependencies on the Ada.Unchecked_Deallocation package.
- Entry barrier condition expressions shall be either static
boolean expressions or boolean objects which are declared in
the protected type which contains the entry.
This set of configuration pragmas and restrictions correspond to the
definition of the “Ravenscar Profile” for limited tasking, devised and
published by the International Real-Time Ada Workshop, 1997,
and whose most recent description is available at
The original definition of the profile was revised at subsequent IRTAW
meetings. It has been included in the ISO
Guide for the Use of the Ada Programming Language in High
Integrity Systems, and has been approved by ISO/IEC/SC22/WG9 for inclusion in
the next revision of the standard. The formal definition given by
the Ada Rapporteur Group (ARG) can be found in two Ada Issues (AI-249 and
AI-305) available at
The above set is a superset of the restrictions provided by pragma
Profile (Restricted), it includes six additional restrictions
No_Task_Termination). This means
Profile (Ravenscar), like the pragma
automatically causes the use of a simplified,
more efficient version of the tasking run-time system.