source: rtems/doc/user/userext.t @ a94c5a5d

4.104.114.84.95
Last change on this file since a94c5a5d was a94c5a5d, checked in by Joel Sherrill <joel.sherrill@…>, on 05/31/97 at 15:55:10

Changed bitwise OR's used to build up option and attribute sets
to be correct in either C or Ada.

Added the interrupt disable, enable, flash, and is in progress directives.

changed "97" to "1997"

  • Property mode set to 100644
File size: 25.4 KB
Line 
1@c
2@c  COPYRIGHT (c) 1996.
3@c  On-Line Applications Research Corporation (OAR).
4@c  All rights reserved.
5@c
6
7@ifinfo
8@node User Extensions Manager, User Extensions Manager Introduction, Heterogeneous Systems, Top
9@end ifinfo
10@chapter User Extensions Manager
11@ifinfo
12@menu
13* User Extensions Manager Introduction::
14* User Extensions Manager Background::
15* User Extensions Manager Operations::
16* User Extensions Manager Directives::
17@end menu
18@end ifinfo
19
20@ifinfo
21@node User Extensions Manager Introduction, User Extensions Manager Background, User Extensions Manager, User Extensions Manager
22@end ifinfo
23@section Introduction
24
25The RTEMS User Extensions Manager allows the
26application developer to augment the executive by allowing them
27to supply extension routines which are invoked at critical
28system events.  The directives provided by the user extensions
29manager are:
30
31@itemize @bullet
32@item @code{extension_create} - Create an extension set
33@item @code{extension_ident} - Get ID of an extension set
34@item @code{extension_delete} - Delete an extension set
35@end itemize
36
37@ifinfo
38@node User Extensions Manager Background, Extension Sets, User Extensions Manager Introduction, User Extensions Manager
39@end ifinfo
40@section Background
41@ifinfo
42@menu
43* Extension Sets::
44* TCB Extension Area::
45* Extensions::
46* TASK_CREATE Extension::
47* TASK_START Extension::
48* TASK_RESTART Extension::
49* TASK_DELETE Extension::
50* TASK_SWITCH Extension::
51* TASK_POST_SWITCH Extension::
52* TASK_BEGIN Extension::
53* TASK_EXITTED Extension::
54* FATAL Error Extension::
55* Order of Invocation::
56@end menu
57@end ifinfo
58
59User extension routines are invoked when the
60following system events occur:
61
62@itemize @bullet
63@item Task creation
64@item Task initiation
65@item Task reinitiation
66@item Task deletion
67@item Task context switch
68@item Post task context switch
69@item Task begin
70@item Task exits
71@item Fatal error detection
72@end itemize
73
74These extensions are invoked as a function with
75arguments that are appropriate to the system event.
76
77@ifinfo
78@node Extension Sets, TCB Extension Area, User Extensions Manager Background, User Extensions Manager Background
79@end ifinfo
80@subsection Extension Sets
81
82An extension set is defined as a set of routines
83which are invoked at each of the critical system events at which
84user extension routines are invoked.  Together a set of these
85routines typically perform a specific functionality such as
86performance monitoring or debugger support.  RTEMS is informed of
87the entry points which constitute an extension set via the
88following structure:
89
90@ifset is-C
91@example
92@group
93typedef struct @{
94  User_extensions_thread_create_extension      thread_create;
95  User_extensions_thread_start_extension       thread_start;
96  User_extensions_thread_restart_extension     thread_restart;
97  User_extensions_thread_delete_extension      thread_delete;
98  User_extensions_thread_switch_extension      thread_switch;
99  User_extensions_thread_post_switch_extension thread_post_switch;
100  User_extensions_thread_begin_extension       thread_begin;
101  User_extensions_thread_exitted_extension     thread_exitted;
102  User_extensions_fatal_error_extension        fatal;
103@} User_extensions_Table;
104@end group
105@end example
106@end ifset
107
108@ifset is-Ada
109@example
110type Extensions_Table is
111   record
112      Task_Create      : RTEMS.Task_Create_Extension;
113      Task_Start       : RTEMS.Task_Start_Extension;
114      Task_Restart     : RTEMS.Task_Restart_Extension;
115      Task_Delete      : RTEMS.Task_Delete_Extension;
116      Task_Switch      : RTEMS.Task_Switch_Extension;
117      Task_Post_Switch : RTEMS.Task_Post_Switch_Extension;
118      Task_Begin       : RTEMS.Task_Begin_Extension;
119      Task_Exitted     : RTEMS.Task_Exitted_Extension;
120      Fatal            : RTEMS.Fatal_Error_Extension;
121   end record;
122@end example
123@end ifset
124
125
126RTEMS allows the user to have multiple extension sets
127active at the same time.  First, a single static extension set
128may be defined as the application's User Extension Table which
129is included as part of the Configuration Table.  This extension
130set is active for the entire life of the system and may not be
131deleted.  This extension set is especially important because it
132is the only way the application can provided a FATAL error
133extension which is invoked if RTEMS fails during the
134initialize_executive directive.  The static extension set is
135optional and may be configured as NULL if no static extension
136set is required.
137
138Second, the user can install dynamic extensions using
139the extension_create directive.  These extensions are RTEMS
140objects in that they have a name, an ID, and can be dynamically
141created and deleted.  In contrast to the static extension set,
142these extensions can only be created and installed after the
143initialize_executive directive successfully completes execution.
144Dynamic extensions are useful for encapsulating the
145functionality of an extension set.  For example, the application
146could use extensions to manage a special coprocessor, do
147performance monitoring, and to do stack bounds checking.  Each
148of these extension sets could be written and installed
149independently of the others.
150
151All user extensions are optional and RTEMS places no
152naming  restrictions on the user.
153
154@ifinfo
155@node TCB Extension Area, Extensions, Extension Sets, User Extensions Manager Background
156@end ifinfo
157@subsection TCB Extension Area
158
159RTEMS provides for a pointer to a user-defined data
160area for each extension set to be linked to each task's control
161block.  This set of pointers is an extension of the TCB and can
162be used to store additional data required by the user's
163extension functions.  It is also possible for a user extension
164to utilize the notepad locations associated with each task
165although this may conflict with application usage of those
166particular notepads.
167
168The TCB extension is an array of pointers in the TCB.
169The number of pointers in the area is the same as the number of
170user extension sets configured.  This allows an application to
171augment the TCB with user-defined information.  For example, an
172application could implement task profiling by storing timing
173statistics in the TCB's extended memory area.  When a task
174context switch is being executed, the TASK_SWITCH extension
175could read a real-time clock to calculate how long the task
176being swapped out has run as well as timestamp the starting time
177for the task being swapped in.
178
179If used, the extended memory area for the TCB should
180be allocated and the TCB extension pointer should be set at the
181time the task is created or started by either the TASK_CREATE or
182TASK_START extension.  The application is responsible for
183managing this extended memory area for the TCBs.  The memory may
184be reinitialized by the TASK_RESTART extension and should be
185deallocated by the TASK_DELETE extension when the task is
186deleted.  Since the TCB extension buffers would most likely be
187of a fixed size, the RTEMS partition manager could be used to
188manage the application's extended memory area.  The application
189could create a partition of fixed size TCB extension buffers and
190use the partition manager's allocation and deallocation
191directives to obtain and release the extension buffers.
192
193@ifinfo
194@node Extensions, TASK_CREATE Extension, TCB Extension Area, User Extensions Manager Background
195@end ifinfo
196@subsection Extensions
197
198The sections that follow will contain a description
199of each extension.  Each section will contain a prototype of a
200function with the appropriate calling sequence for the
201corresponding extension.  The names given for the @value{LANGUAGE}
202@value{ROUTINE} and
203its arguments are all defined by the user.  The names used in
204the examples were arbitrarily chosen and impose no naming
205conventions on the user.
206
207@ifinfo
208@node TASK_CREATE Extension, TASK_START Extension, Extensions, User Extensions Manager Background
209@end ifinfo
210@subsection TASK_CREATE Extension
211
212The TASK_CREATE extension directly corresponds to the
213task_create directive.  If this extension is defined in any
214static or dynamic extension set and a task is being created,
215then the extension routine will automatically be invoked by
216RTEMS.  The extension should have a prototype similar to the
217following:
218
219@ifset is-C
220@example
221rtems_extension user_task_create(
222  rtems_tcb *current_task,
223  rtems_tcb *new_task
224);
225@end example
226@end ifset
227
228@ifset is-Ada
229@example
230procedure User_Task_Create (
231   Current_Task : in     RTEMS.TCB_Pointer;
232   New_Task     : in     RTEMS.TCB_Pointer
233);
234@end example
235@end ifset
236
237where current_task can be used to access the TCB for
238the currently executing task, and new_task can be used to access
239the TCB for the new task being created.  This extension is
240invoked from the task_create directive after new_task has been
241completely initialized, but before it is placed on a ready TCB
242chain.
243
244@ifinfo
245@node TASK_START Extension, TASK_RESTART Extension, TASK_CREATE Extension, User Extensions Manager Background
246@end ifinfo
247@subsection TASK_START Extension
248
249The TASK_START extension directly corresponds to the
250task_start directive.  If this extension is defined in any
251static or dynamic extension set and a task is being started,
252then the extension routine will automatically be invoked by
253RTEMS.  The extension should have a prototype similar to the
254following:
255
256@ifset is-C
257@example
258rtems_extension user_task_start(
259  rtems_tcb *current_task,
260  rtems_tcb *started_task
261);
262@end example
263@end ifset
264
265@ifset is-Ada
266@example
267procedure User_Task_Start (
268   Current_Task : in     RTEMS.TCB_Pointer;
269   Started_Task : in     RTEMS.TCB_Pointer
270);
271@end example
272@end ifset
273
274where current_task can be used to access the TCB for
275the currently executing task, and started_task can be used to
276access the TCB for the dormant task being started. This
277extension is invoked from the task_start directive after
278started_task has been made ready to start execution, but before
279it is placed on a ready TCB chain.
280
281@ifinfo
282@node TASK_RESTART Extension, TASK_DELETE Extension, TASK_START Extension, User Extensions Manager Background
283@end ifinfo
284@subsection TASK_RESTART Extension
285
286The TASK_RESTART extension directly corresponds to
287the task_restart directive.  If this extension is defined in any
288static or dynamic extension set and a task is being restarted,
289then the extension should have a prototype similar to the
290following:
291
292@ifset is-C
293@example
294rtems_extension user_task_restart(
295  rtems_tcb *current_task,
296  rtems_tcb *restarted_task
297);
298@end example
299@end ifset
300
301@ifset is-Ada
302@example
303procedure User_Task_Restart (
304   Current_Task   : in     RTEMS.TCB_Pointer;
305   Restarted_Task : in     RTEMS.TCB_Pointer
306);
307@end example
308@end ifset
309
310where current_task can be used to access the TCB for
311the currently executing task, and restarted_task can be used to
312access the TCB for the task being restarted. This extension is
313invoked from the task_restart directive after restarted_task has
314been made ready to start execution, but before it is placed on a
315ready TCB chain.
316
317@ifinfo
318@node TASK_DELETE Extension, TASK_SWITCH Extension, TASK_RESTART Extension, User Extensions Manager Background
319@end ifinfo
320@subsection TASK_DELETE Extension
321
322The TASK_DELETE extension is associated with the
323task_delete directive.  If this extension is defined in any
324static or dynamic extension set and a task is being deleted,
325then the extension routine will automatically be invoked by
326RTEMS.  The extension should have a prototype similar to the
327following:
328
329@ifset is-C
330@example
331rtems_extension user_task_delete(
332  rtems_tcb *current_task,
333  rtems_tcb *deleted_task
334);
335@end example
336@end ifset
337
338@ifset is-Ada
339@example
340procedure User_Task_Delete (
341   Current_Task : in     RTEMS.TCB_Pointer;
342   Deleted_Task : in     RTEMS.TCB_Pointer
343);
344@end example
345@end ifset
346
347where current_task can be used to access the TCB for
348the currently executing task, and deleted_task can be used to
349access the TCB for the task being deleted. This extension is
350invoked from the task_delete directive after the TCB has been
351removed from a ready TCB chain, but before all its resources
352including the TCB have been returned to their respective free
353pools.  This extension should not call any RTEMS directives if a
354task is deleting itself (current_task is equal to deleted_task).
355
356@ifinfo
357@node TASK_SWITCH Extension, TASK_POST_SWITCH Extension, TASK_DELETE Extension, User Extensions Manager Background
358@end ifinfo
359@subsection TASK_SWITCH Extension
360
361The TASK_SWITCH extension corresponds to a task
362context switch.  If this extension is defined in any static or
363dynamic extension set and a task context switch is in progress,
364then the extension routine will automatically be invoked by
365RTEMS.  The extension should have a prototype similar to the
366following:
367
368@ifset is-C
369@example
370rtems_extension user_task_switch(
371  rtems_tcb *current_task,
372  rtems_tcb *heir_task
373);
374@end example
375@end ifset
376
377@ifset is-Ada
378@example
379procedure User_Task_Switch (
380   Current_Task : in     RTEMS.TCB_Pointer;
381   Heir_Task    : in     RTEMS.TCB_Pointer
382);
383@end example
384@end ifset
385
386where current_task can be used to access the TCB for
387the task that is being swapped out, and heir_task can be used to
388access the TCB for the task being swapped in.  This extension is
389invoked from RTEMS' dispatcher routine after the current_task
390context has been saved, but before the heir_task context has
391been restored.  This extension should not call any RTEMS
392directives.
393
394@ifinfo
395@node TASK_POST_SWITCH Extension, TASK_BEGIN Extension, TASK_SWITCH Extension, User Extensions Manager Background
396@end ifinfo
397@subsection TASK_POST_SWITCH Extension
398
399The TASK_POST_SWITCH extension corresponds to a task
400context switch.  If this extension is defined in any static or
401dynamic extension set and a raw task context switch has been
402completed, then the extension routine will automatically be
403invoked by RTEMS.  The extension should have a prototype similar
404to the following:
405
406@ifset is-C
407@example
408rtems_extension user_task_post_switch(
409  rtems_tcb *current_task
410);
411@end example
412@end ifset
413
414@ifset is-Ada
415@example
416procedure User_Task_Post_Switch (
417   Current_Task : in     RTEMS.TCB_Pointer
418);
419@end example
420@end ifset
421
422where current_task can be used to access the TCB for
423the task that is being swapped out, and heir_task can be used to
424access the TCB for the task being swapped in.  This extension is
425invoked from RTEMS' dispatcher routine after the current_task
426context has been restored and the extension runs in the context
427of the current_task.
428
429@ifinfo
430@node TASK_BEGIN Extension, TASK_EXITTED Extension, TASK_POST_SWITCH Extension, User Extensions Manager Background
431@end ifinfo
432@subsection TASK_BEGIN Extension
433
434The TASK_BEGIN extension is invoked when a task
435begins execution.  It is invoked immediately before the body of
436the starting procedure and executes in the context in the task.
437This user extension have a prototype similar to the following:
438
439@ifset is-C
440@example
441rtems_extension user_task_begin(
442  rtems_tcb *current_task
443);
444@end example
445@end ifset
446
447@ifset is-Ada
448@example
449procedure User_Task_Begin (
450   Current_Task : in     RTEMS.TCB_Pointer
451);
452@end example
453@end ifset
454
455where current_task can be used to access the TCB for
456the currently executing task which has begun.  The distinction
457between the TASK_BEGIN and TASK_START extension is that the
458TASK_BEGIN extension is executed in the context of the actual
459task while the TASK_START extension is executed in the context
460of the task performing the task_start directive.  For most
461extensions, this is not a critical distinction.
462
463@ifinfo
464@node TASK_EXITTED Extension, FATAL Error Extension, TASK_BEGIN Extension, User Extensions Manager Background
465@end ifinfo
466@subsection TASK_EXITTED Extension
467
468The TASK_EXITTED extension is invoked when a task
469exits the body of the starting procedure by either an implicit
470or explicit return statement.  This user extension have a
471prototype similar to the following:
472
473@ifset is-C
474@example
475rtems_extension user_task_exitted(
476  rtems_tcb *current_task
477);
478@end example
479@end ifset
480
481@ifset is-Ada
482@example
483procedure User_Task_Exitted (
484   Current_Task : in     RTEMS.TCB_Pointer
485);
486@end example
487@end ifset
488
489where current_task can be used to access the TCB for
490the currently executing task which has just exitted.
491
492Although exiting of task is often considered to be a
493fatal error, this extension allows recovery by either restarting
494or deleting the exiting task.  If the user does not wish to
495recover, then a fatal error may be reported.  If the user does
496not provide a TASK_EXITTED extension or the provided handler
497returns control to RTEMS, then the RTEMS default handler will be
498used.  This default handler invokes the directive
499fatal_error_occurred with the @code{TASK_EXITTED} directive status.
500
501@lowersections
502
503@ifinfo
504@node FATAL Error Extension, Order of Invocation, TASK_EXITTED Extension, User Extensions Manager Background
505@end ifinfo
506@subsection FATAL Error Extension
507
508The FATAL error extension is associated with the
509fatal_error_occurred directive.  If this extension is defined in
510any static or dynamic extension set and the fatal_error_occurred
511directive has been invoked, then this extension will be called.
512This extension should have a prototype similar to the following:
513
514@ifset is-C
515@example
516rtems_extension user_fatal_error(
517  Internal_errors_Source  the_source,
518  rtems_boolean           is_internal,
519  rtems_unsigned32        the_error
520);
521@end example
522@end ifset
523
524@ifset is-Ada
525@example
526procedure User_Fatal_Error (
527   Error : in     RTEMS.Unsigned32
528);
529@end example
530@end ifset
531
532where the_error is the error code passed to the
533fatal_error_occurred directive. This extension is invoked from
534the fatal_error_occurred directive.
535
536If defined, the user's FATAL error extension is
537invoked before RTEMS' default fatal error routine is invoked and
538the processor is stopped.  For example, this extension could be
539used to pass control to a debugger when a fatal error occurs.
540This extension should not call any RTEMS directives.
541
542@raisesections
543
544@ifinfo
545@node Order of Invocation, User Extensions Manager Operations, FATAL Error Extension, User Extensions Manager Background
546@end ifinfo
547@subsection Order of Invocation
548
549When one of the critical system events occur, the
550user extensions are invoked in either "forward" or "reverse"
551order.  Forward order indicates that the static extension set is
552invoked followed by the dynamic extension sets in the order in
553which they were created.  Reverse order means that the dynamic
554extension sets are invoked in the opposite of the order in which
555they were created followed by the static extension set.  By
556invoking the extension sets in this order, extensions can be
557built upon one another.  At the following system events, the
558extensions are invoked in forward order:
559
560@itemize @bullet
561@item Task creation
562@item Task initiation
563@item Task reinitiation
564@item Task deletion
565@item Task context switch
566@item Post task context switch
567@item Task begins to execute
568@end itemize
569
570
571At the following system events, the extensions are
572invoked in reverse order:
573
574@itemize @bullet
575@item Task deletion
576@item Fatal error detection
577@end itemize
578
579At these system events, the extensions are invoked in
580reverse order to insure that if an extension set is built upon
581another, the more complicated extension is invoked before the
582extension set it is built upon.  For example, by invoking the
583static extension set last it is known that the "system" fatal
584error extension will be the last fatal error extension executed.
585Another example is use of the task delete extension by the
586Standard C Library.  Extension sets which are installed after
587the Standard C Library will operate correctly even if they
588utilize the C Library because the C Library's TASK_DELETE
589extension is invoked after that of the other extensions.
590
591@ifinfo
592@node User Extensions Manager Operations, Creating an Extension Set, Order of Invocation, User Extensions Manager
593@end ifinfo
594@section Operations
595@ifinfo
596@menu
597* Creating an Extension Set::
598* Obtaining Extension Set IDs::
599* Deleting an Extension Set::
600@end menu
601@end ifinfo
602
603@ifinfo
604@node Creating an Extension Set, Obtaining Extension Set IDs, User Extensions Manager Operations, User Extensions Manager Operations
605@end ifinfo
606@subsection Creating an Extension Set
607
608The extension_create directive creates and installs
609an extension set by allocating a Extension Set Control Block
610(ESCB), assigning the extension set a user-specified name, and
611assigning it an extension set ID.  Newly created extension sets
612are immediately installed and are invoked upon the next system
613even supporting an extension.
614
615@ifinfo
616@node Obtaining Extension Set IDs, Deleting an Extension Set, Creating an Extension Set, User Extensions Manager Operations
617@end ifinfo
618@subsection Obtaining Extension Set IDs
619
620When an extension set is created, RTEMS generates a
621unique extension set ID and assigns it to the created extension
622set until it is deleted.  The extension ID may be obtained by
623either of two methods.  First, as the result of an invocation of
624the extension_create directive, the extension set ID is stored
625in a user provided location.  Second, the extension set ID may
626be obtained later using the extension_ident directive.  The
627extension set ID is used by other directives to manipulate this
628extension set.
629
630@ifinfo
631@node Deleting an Extension Set, User Extensions Manager Directives, Obtaining Extension Set IDs, User Extensions Manager Operations
632@end ifinfo
633@subsection Deleting an Extension Set
634
635The extension_delete directive is used to delete an
636extension set.  The extension set's control block is returned to
637the ESCB free list when it is deleted.  An extension set can be
638deleted by a task other than the task which created the
639extension set.  Any subsequent references to the extension's
640name and ID are invalid.
641
642@ifinfo
643@node User Extensions Manager Directives, EXTENSION_CREATE - Create a extension set, Deleting an Extension Set, User Extensions Manager
644@end ifinfo
645@section Directives
646@ifinfo
647@menu
648* EXTENSION_CREATE - Create a extension set::
649* EXTENSION_IDENT - Get ID of a extension set::
650* EXTENSION_DELETE - Delete a extension set::
651@end menu
652@end ifinfo
653
654This section details the user extension manager's
655directives.  A subsection is dedicated to each of this manager's
656directives and describes the calling sequence, related
657constants, usage, and status codes.
658
659@page
660@ifinfo
661@node EXTENSION_CREATE - Create a extension set, EXTENSION_IDENT - Get ID of a extension set, User Extensions Manager Directives, User Extensions Manager Directives
662@end ifinfo
663@subsection EXTENSION_CREATE - Create a extension set
664
665@subheading CALLING SEQUENCE:
666
667@ifset is-C
668@example
669rtems_status_code rtems_extension_create(
670  rtems_name              name,
671  rtems_extensions_table *table,
672  rtems_id               *id
673);
674@end example
675@end ifset
676
677@ifset is-Ada
678@example
679procedure Extension_Create (
680   Name   : in     RTEMS.Name;
681   Table  : in     RTEMS.Extensions_Table_Pointer;
682   ID     :    out RTEMS.ID;
683   Result :    out RTEMS.Status_Codes
684);
685@end example
686@end ifset
687
688@subheading DIRECTIVE STATUS CODES:
689@code{SUCCESSFUL} -  extension set created successfully@*
690@code{INVALID_NAME} - invalid extension set name@*
691@code{TOO_MANY} - too many extension sets created
692
693@subheading DESCRIPTION:
694
695This directive creates a extension set.  The assigned
696extension set id is returned in id.  This id is used to access
697the extension set with other user extension manager directives.
698For control and maintenance of the extension set, RTEMS
699allocates an ESCB from the local ESCB free pool and initializes
700it.
701
702@subheading NOTES:
703
704This directive will not cause the calling task to be
705preempted.
706
707@page
708@ifinfo
709@node EXTENSION_IDENT - Get ID of a extension set, EXTENSION_DELETE - Delete a extension set, EXTENSION_CREATE - Create a extension set, User Extensions Manager Directives
710@end ifinfo
711@subsection EXTENSION_IDENT - Get ID of a extension set
712
713@subheading CALLING SEQUENCE:
714
715@ifset is-C
716@example
717rtems_status_code rtems_extension_ident(
718  rtems_name  name,
719  rtems_id   *id
720);
721@end example
722@end ifset
723
724@ifset is-Ada
725@example
726procedure Extension_Ident (
727   Name   : in     RTEMS.Name;
728   ID     :    out RTEMS.ID;
729   Result :    out RTEMS.Status_Codes
730);
731@end example
732@end ifset
733
734@subheading DIRECTIVE STATUS CODES:
735@code{SUCCESSFUL} -  extension set identified successfully@*
736@code{INVALID_NAME} - extension set name not found
737
738@subheading DESCRIPTION:
739
740This directive obtains the extension set id
741associated with the extension set name to be acquired.  If the
742extension set name is not unique, then the extension set id will
743match one of the extension sets with that name.  However, this
744extension set id is not guaranteed to correspond to the desired
745extension set.  The extension set id is used to access this
746extension set in other extension set related directives.
747
748@subheading NOTES:
749
750This directive will not cause the running task to be
751preempted.
752
753@page
754@ifinfo
755@node EXTENSION_DELETE - Delete a extension set, Configuring a System, EXTENSION_IDENT - Get ID of a extension set, User Extensions Manager Directives
756@end ifinfo
757@subsection EXTENSION_DELETE - Delete a extension set
758
759@subheading CALLING SEQUENCE:
760
761@ifset is-C
762@example
763rtems_status_code rtems_extension_delete(
764  rtems_id id
765);
766@end example
767@end ifset
768
769@ifset is-Ada
770@example
771procedure Extension_Delete (
772   ID     : in     RTEMS.ID;
773   Result :    out RTEMS.Status_Codes
774);
775@end example
776@end ifset
777
778@subheading DIRECTIVE STATUS CODES:
779@code{SUCCESSFUL} -  extension set deleted successfully@*
780@code{INVALID_ID} - invalid extension set id
781
782@subheading DESCRIPTION:
783
784This directive deletes the extension set specified by
785id.  If the extension set is running, it is automatically
786canceled.  The ESCB for the deleted extension set is reclaimed
787by RTEMS.
788
789@subheading NOTES:
790
791This directive will not cause the running task to be
792preempted.
793
794A extension set can be deleted by a task other than
795the task which created the extension set.
796
797@subheading NOTES:
798
799This directive will not cause the running task to be
800preempted.
Note: See TracBrowser for help on using the repository browser.