source: rtems/c/src/ada/rtems-tasks.adb @ e1eeb883

5
Last change on this file since e1eeb883 was d5154d0f, checked in by Aun-Ali Zaidi <admin@…>, on 12/23/15 at 20:44:02

api: Remove deprecated Notepads

Notepads where a feature of RTEMS' tasks that simply functioned in
the same way as POSIX keys or threaded local storage (TLS). They were
introduced well before per task variables, which are also deprecated,
and were barely used in favor of their POSIX alternatives.

In addition to their scarce usage, Notepads took up unnecessary memory.
For each task:

  • 16 32-bit integers were allocated.
  • A total of 64 bytes per task per thread.

This is especially critical in low memory and safety-critical applications.

They are also defined as uint32_t, and therefore are not guaranteed to
hold a pointer.

Lastly, they are not portable solutions for SMP and uniprocessor systems,
like POSIX keys and TLS.

updates #2493.

  • Property mode set to 100644
File size: 8.0 KB
Line 
1--
2--  RTEMS / Body
3--
4--  DESCRIPTION:
5--
6--  This package provides the interface to the RTEMS API.
7--
8--
9--  DEPENDENCIES:
10--
11--
12--
13--  COPYRIGHT (c) 1997-2008.
14--  On-Line Applications Research Corporation (OAR).
15--
16--  The license and distribution terms for this file may in
17--  the file LICENSE in this distribution or at
18--  http://www.rtems.org/license/LICENSE.
19--
20
21package body RTEMS.Tasks is
22
23   --
24   --  Task Manager
25   --
26
27   procedure Create
28     (Name             : in RTEMS.Name;
29      Initial_Priority : in Priority;
30      Stack_Size       : in RTEMS.Unsigned32;
31      Initial_Modes    : in RTEMS.Mode;
32      Attribute_Set    : in RTEMS.Attribute;
33      ID               : out RTEMS.ID;
34      Result           : out RTEMS.Status_Codes)
35   is
36      function Create_Base
37        (Name             : RTEMS.Name;
38         Initial_Priority : Priority;
39         Stack_Size       : RTEMS.Unsigned32;
40         Initial_Modes    : RTEMS.Mode;
41         Attribute_Set    : RTEMS.Attribute;
42         ID               : access RTEMS.ID)
43         return             RTEMS.Status_Codes;
44      pragma Import (C, Create_Base, "rtems_task_create");
45      ID_Base : aliased RTEMS.ID;
46   begin
47      Result :=
48         Create_Base
49           (Name,
50            Initial_Priority,
51            Stack_Size,
52            Initial_Modes,
53            Attribute_Set,
54            ID_Base'Access);
55      ID     := ID_Base;
56   end Create;
57
58   procedure Ident
59     (Name   : in RTEMS.Name;
60      Node   : in RTEMS.Node;
61      ID     : out RTEMS.ID;
62      Result : out RTEMS.Status_Codes)
63   is
64
65      function Ident_Base
66        (Name : RTEMS.Name;
67         Node : RTEMS.Node;
68         ID   : access RTEMS.ID)
69         return RTEMS.Status_Codes;
70      pragma Import (C, Ident_Base, "rtems_task_ident");
71      ID_Base : aliased RTEMS.ID;
72
73   begin
74
75      Result := Ident_Base (Name, Node, ID_Base'Access);
76      ID     := ID_Base;
77
78   end Ident;
79
80   procedure Start
81     (ID          : in RTEMS.ID;
82      Entry_Point : in RTEMS.Tasks.Entry_Point;
83      Argument    : in RTEMS.Tasks.Argument;
84      Result      : out RTEMS.Status_Codes)
85   is
86      function Start_Base
87        (ID          : RTEMS.ID;
88         Entry_Point : RTEMS.Tasks.Entry_Point;
89         Argument    : RTEMS.Tasks.Argument)
90         return        RTEMS.Status_Codes;
91      pragma Import (C, Start_Base, "rtems_task_start");
92   begin
93
94      Result := Start_Base (ID, Entry_Point, Argument);
95
96   end Start;
97
98   procedure Restart
99     (ID       : in RTEMS.ID;
100      Argument : in RTEMS.Tasks.Argument;
101      Result   : out RTEMS.Status_Codes)
102   is
103      function Restart_Base
104        (ID       : RTEMS.ID;
105         Argument : RTEMS.Tasks.Argument)
106         return     RTEMS.Status_Codes;
107      pragma Import (C, Restart_Base, "rtems_task_restart");
108   begin
109
110      Result := Restart_Base (ID, Argument);
111
112   end Restart;
113
114   procedure Delete
115     (ID     : in RTEMS.ID;
116      Result : out RTEMS.Status_Codes)
117   is
118      function Delete_Base (ID : RTEMS.ID) return RTEMS.Status_Codes;
119      pragma Import (C, Delete_Base, "rtems_task_delete");
120   begin
121
122      Result := Delete_Base (ID);
123
124   end Delete;
125
126   procedure Suspend
127     (ID     : in RTEMS.ID;
128      Result : out RTEMS.Status_Codes)
129   is
130      function Suspend_Base (ID : RTEMS.ID) return RTEMS.Status_Codes;
131      pragma Import (C, Suspend_Base, "rtems_task_suspend");
132   begin
133
134      Result := Suspend_Base (ID);
135
136   end Suspend;
137
138   procedure Resume
139     (ID     : in RTEMS.ID;
140      Result : out RTEMS.Status_Codes)
141   is
142      function Resume_Base (ID : RTEMS.ID) return RTEMS.Status_Codes;
143      pragma Import (C, Resume_Base, "rtems_task_resume");
144   begin
145
146      Result := Resume_Base (ID);
147
148   end Resume;
149
150   procedure Is_Suspended
151     (ID     : in RTEMS.ID;
152      Result : out RTEMS.Status_Codes)
153   is
154      function Is_Suspended_Base
155        (ID   : RTEMS.ID)
156         return RTEMS.Status_Codes;
157      pragma Import (C, Is_Suspended_Base, "rtems_task_is_suspended");
158   begin
159
160      Result := Is_Suspended_Base (ID);
161
162   end Is_Suspended;
163
164   procedure Set_Priority
165     (ID           : in RTEMS.ID;
166      New_Priority : in Priority;
167      Old_Priority : out Priority;
168      Result       : out RTEMS.Status_Codes)
169   is
170      function Set_Priority_Base
171        (ID           : RTEMS.ID;
172         New_Priority : Priority;
173         Old_Priority : access Priority)
174         return         RTEMS.Status_Codes;
175      pragma Import (C, Set_Priority_Base, "rtems_task_set_priority");
176      Old_Priority_Base : aliased Priority;
177   begin
178
179      Result       :=
180         Set_Priority_Base (ID, New_Priority, Old_Priority_Base'Access);
181      Old_Priority := Old_Priority_Base;
182
183   end Set_Priority;
184
185   procedure Mode
186     (Mode_Set          : in RTEMS.Mode;
187      Mask              : in RTEMS.Mode;
188      Previous_Mode_Set : out RTEMS.Mode;
189      Result            : out RTEMS.Status_Codes)
190   is
191      function Mode_Base
192        (Mode_Set          : RTEMS.Mode;
193         Mask              : RTEMS.Mode;
194         Previous_Mode_Set : access RTEMS.Mode)
195         return              RTEMS.Status_Codes;
196      pragma Import (C, Mode_Base, "rtems_task_mode");
197      Previous_Mode_Set_Base : aliased RTEMS.Mode;
198   begin
199
200      Result            :=
201         Mode_Base (Mode_Set, Mask, Previous_Mode_Set_Base'Access);
202      Previous_Mode_Set := Previous_Mode_Set_Base;
203
204   end Mode;
205
206   procedure Variable_Add
207     (ID            : in RTEMS.ID;
208      Task_Variable : in RTEMS.Address;
209      Dtor          : in Variable_Dtor;
210      Result        : out RTEMS.Status_Codes)
211   is
212      function Variable_Add_Base
213        (ID            : RTEMS.ID;
214         Task_Variable : RTEMS.Address;
215         Dtor          : Variable_Dtor)
216         return          RTEMS.Status_Codes;
217      pragma Import (C, Variable_Add_Base, "rtems_task_variable_add");
218   begin
219
220      Result := Variable_Add_Base (ID, Task_Variable, Dtor);
221
222   end Variable_Add;
223
224   procedure Variable_Get
225     (ID                  : in RTEMS.ID;
226      Task_Variable       : out RTEMS.Address;
227      Task_Variable_Value : out RTEMS.Address;
228      Result              : out RTEMS.Status_Codes)
229   is
230      function Variable_Get_Base
231        (ID                  : RTEMS.ID;
232         Task_Variable       : access RTEMS.Address;
233         Task_Variable_Value : access RTEMS.Address)
234         return                RTEMS.Status_Codes;
235      pragma Import (C, Variable_Get_Base, "rtems_task_variable_get");
236      Task_Variable_Base       : aliased RTEMS.Address;
237      Task_Variable_Value_Base : aliased RTEMS.Address;
238   begin
239
240      Result              :=
241         Variable_Get_Base
242           (ID,
243            Task_Variable_Base'Access,
244            Task_Variable_Value_Base'Access);
245      Task_Variable       := Task_Variable_Base;
246      Task_Variable_Value := Task_Variable_Value_Base;
247
248   end Variable_Get;
249
250   procedure Variable_Delete
251     (ID            : in RTEMS.ID;
252      Task_Variable : out RTEMS.Address;
253      Result        : out RTEMS.Status_Codes)
254   is
255      function Variable_Delete_Base
256        (ID            : RTEMS.ID;
257         Task_Variable : access RTEMS.Address)
258         return          RTEMS.Status_Codes;
259      pragma Import
260        (C,
261         Variable_Delete_Base,
262         "rtems_task_variable_delete");
263      Task_Variable_Base : aliased RTEMS.Address;
264   begin
265
266      Result        := Variable_Delete_Base (ID, Task_Variable_Base'Access);
267      Task_Variable := Task_Variable_Base;
268
269   end Variable_Delete;
270
271   procedure Wake_When
272     (Time_Buffer : in RTEMS.Time_Of_Day;
273      Result      : out RTEMS.Status_Codes)
274   is
275      function Wake_When_Base
276        (Time_Buffer : RTEMS.Time_Of_Day)
277         return        RTEMS.Status_Codes;
278      pragma Import (C, Wake_When_Base, "rtems_task_wake_when");
279   begin
280
281      Result := Wake_When_Base (Time_Buffer);
282
283   end Wake_When;
284
285   procedure Wake_After
286     (Ticks  : in RTEMS.Interval;
287      Result : out RTEMS.Status_Codes)
288   is
289      function Wake_After_Base
290        (Ticks : RTEMS.Interval)
291         return  RTEMS.Status_Codes;
292      pragma Import (C, Wake_After_Base, "rtems_task_wake_after");
293   begin
294
295      Result := Wake_After_Base (Ticks);
296
297   end Wake_After;
298
299end RTEMS.Tasks;
Note: See TracBrowser for help on using the repository browser.