source: rtems/c/src/tests/itrontests/itrontask02/init.c @ 0f88857

4.104.114.84.95
Last change on this file since 0f88857 was 0f88857, checked in by Jennifer Averett <Jennifer.Averett@…>, on 11/15/99 at 21:19:58

+ Changed preempt routine into two dummy tasks one that is in dormant

state and one that is in non-dormant state.

+ Increased the priority of the Init task to force the dummy tasks to

run first.

+ Added calls to ref_tsk to verify the state of the dummy tasks and

test ref_tsk.

  • Property mode set to 100644
File size: 15.2 KB
Line 
1/*  Init
2 *
3 *  This routine is the initialization task for this test program.
4 *  It is called from init_exec and has the responsibility for creating
5 *  and starting the tasks that make up the test.  If the time of day
6 *  clock is required for the test, it should also be set to a known
7 *  value by this function.
8 *
9 *  Input parameters:  NONE
10 *
11 *  Output parameters:  NONE
12 *
13 *  The license and distribution terms for this file may be
14 *  found in the file LICENSE in this distribution or at
15 *  http://www.OARcorp.com/rtems/license.html.
16 *
17 *  $Id$
18 */
19
20#define TEST_INIT
21#include "system.h"
22#include <stdio.h>
23#include <assert.h>
24
25void ITRON_Init( void )
26{
27
28  /*
29   *  Status Codes for these errors
30   *
31   *
32   *  E_OK - Normal Completion
33   *
34   *  E_NOMEM - Insufficient memory (Memory for control block and/or user
35   *            stack cannot be allocated)
36   *
37   *  E_ID - Invalid ID Number (tskid was invalid or could not be used)
38   *
39   *  E_RSATR - Reserved attribute (tskatr was invalid or could not be used)
40   *
41   *  E_OBJ - Invalid object state (a task of the same ID already exists)
42   *
43   *  E_OACV - Object access violation (A tskid less than -4 was specified
44   *           from a user task. This is implementation dependent.)
45   *
46   *  E_PAR - Parameter error (pk_ctsk, task, itskpri and/or stksz is invalid)
47   *
48   *  E_NOEXS - Object does not exist (the task specified by tskid does not
49   *            exist)
50   *
51   *  E_CTX - Context error (issued from task-independent portions or a task
52   *          in dispatch disabled state)
53   *
54   *
55   *
56   *  Network Specific Errors  (ITRON calls these Connection Function Errors)
57   *
58   *  EN_OBJNO - An object number which could not be accessed on the target
59   *             node is specified.
60   *
61   *  EN_CTXID - Specified an object on another node when the system call
62   *             was issued from a task in dispatch disabled state or from
63   *             a task-independent portion
64   *
65   *  EN_PAR - A value outside the range supported by the target node and/or
66   *           transmission packet format was specified as a parameter
67   *           (a value outside supported range was specified for exinf,
68   *           tskatr, task, itskpri and/or stksz)
69   *
70   *  EN_RPAR - A value outside the range supported by the requesting node
71   *            and/or transmission packet format was returned as a return
72   *            parameter (a value outside supported range was returned for
73   *            exinf, tskpri and/or tskstat)
74   *
75   */
76
77
78  rtems_time_of_day  time;
79  ER                 status;
80  T_CTSK             pk_ctsk;
81  T_RTSK             pk_rtsk;   /* Reference Task Packet */
82
83
84  puts( "\n\n*** ITRON TASK TEST 2 ***\n" );
85
86  build_time( &time, 12, 31, 1988, 9, 0, 0, 0 );
87  status = rtems_clock_set( &time );
88  directive_failed( status, "rtems_clock_set" );
89
90
91  /*
92   * Set My priority to 8 so that dummy tasks will be
93   * forced to run when started.
94   */
95 
96  status = chg_pri( TSK_SELF, 8 );
97  assert( status == E_OK );
98  status = ref_tsk( &pk_rtsk, TSK_SELF );
99  assert( status == E_OK );
100  assert( pk_rtsk.tskpri == 8 );
101 
102  /*
103   * Create and verify a DORMANT task.
104   */
105
106  pk_ctsk.exinf    = NULL;
107  pk_ctsk.tskatr   = TA_HLNG;
108  pk_ctsk.itskpri  = 1;
109  pk_ctsk.task     = Dormant_task;
110  pk_ctsk.stksz    = RTEMS_MINIMUM_STACK_SIZE;
111
112  puts( "Init - cre_tsk - Dormant Task" );
113  status = cre_tsk( DORMANT_TASK_ID, &pk_ctsk );
114  assert( status == E_OK );
115  status = ref_tsk( &pk_rtsk, DORMANT_TASK_ID );
116  assert( status == E_OK );
117  assert( pk_rtsk.tskstat == TTS_DMT );
118
119  /*
120   * Create, Start and verify a not DORMANT task.
121   */
122 
123  pk_ctsk.task     = Non_Dormant_task;
124  puts( "Init - cre_tsk - Non-Dormant Task" );
125  status = cre_tsk( NON_DORMANT_TASK_ID, &pk_ctsk );
126  assert( status == E_OK );
127  status = sta_tsk( NON_DORMANT_TASK_ID, 1 );
128  status = ref_tsk( &pk_rtsk, NON_DORMANT_TASK_ID );
129  assert( status == E_OK );
130  assert( pk_rtsk.tskstat == TTS_WAI);
131   
132 
133  /*
134   *  Bad ID errors
135   */
136
137  puts( "\n*** Create Task Errors ***" );
138
139  puts( "Init - cre_tsk - access violation ( id less than -4) - E_OACV" );
140  status = cre_tsk( -5, &pk_ctsk );
141  assert( status == E_OACV );
142
143  puts( "Init - cre_tsk - bad id (between 0 and -4) - E_ID" );
144  status = cre_tsk( -2, &pk_ctsk );
145  assert( status == E_ID );
146
147  puts( "Init - cre_tsk - cannot create TSK_SELF  - E_ID" );
148  status = cre_tsk( TSK_SELF, &pk_ctsk );
149  assert( status == E_ID );
150
151  puts( "Init - cre_tsk - invalid id; id already exists  - E_OBJ" );
152  status = cre_tsk( 1, &pk_ctsk );
153  assert( status == E_OBJ );
154
155  /*
156   *  Bad task attribute errors
157   */
158
159  pk_ctsk.tskatr = -1;
160  puts( "Init - cre_tsk - tskatr is invalid - E_RSATR" );
161  status = cre_tsk( 5, &pk_ctsk );
162  assert( status == E_RSATR );
163
164  puts( "Init - cre_tsk - pk_ctsk is invalid - E_PAR" );
165  status = cre_tsk( 5, NULL );
166  assert( status == E_PAR );
167
168  pk_ctsk.tskatr = TA_HLNG;
169  pk_ctsk.itskpri = 0;
170  puts( "Init - cre_tsk - itskpri is 0 - E_PAR" );
171  status = cre_tsk( 5, &pk_ctsk );
172  assert( status == E_PAR );
173  pk_ctsk.itskpri = 257;         /* XXX Design parameter not requirement. */
174  puts( "Init - cre_tsk - itskpri is 257 - E_PAR" );
175  status = cre_tsk( 5, &pk_ctsk );
176  assert( status == E_PAR );
177
178  pk_ctsk.stksz = -1;
179  puts( "Init - cre_tsk - stksz is invalid - E_PAR" );
180  status = cre_tsk( 5, &pk_ctsk );
181  assert( status == E_PAR );
182
183  pk_ctsk.task = NULL;
184  puts( "Init - cre_tsk - task is invalid - E_PAR" );
185  status = cre_tsk( 5, &pk_ctsk );
186  assert( status == E_PAR );
187
188
189#if (0)
190  /* these errors can not be generated for cre_tsk at this time */
191  assert( status == E_NOMEM );
192  assert( status == EN_OBJNO );
193  assert( status == EN_CTXID );
194  assert( status == EN_PAR );
195#endif
196
197  puts( "\n\n*** Delete Task Errors ***" );
198
199  /*
200   *  Reset structure
201   */
202
203  pk_ctsk.exinf    = NULL;
204  pk_ctsk.tskatr   = TA_HLNG;
205  pk_ctsk.itskpri  = 1;
206  pk_ctsk.task     = Dormant_task;
207  pk_ctsk.stksz    = RTEMS_MINIMUM_STACK_SIZE;
208
209
210  puts( "Init - del_tsk - cannot delete TSK_SELF - E_OBJ" );
211  status = del_tsk( TSK_SELF );
212  assert( status == E_OBJ );
213
214  puts( "Init - del_tsk - task is not DORMANT - E_OBJ" );
215  status = del_tsk( NON_DORMANT_TASK_ID );
216  assert( status == E_OBJ );
217
218  puts( "Init - del_tsk - task does not exist - E_NOEXS" );
219  status = del_tsk( 5 );
220  assert( status == E_NOEXS );
221
222  puts( "Init - del_tsk - access violation ( id less than -4) - E_OACV" );
223  status =  del_tsk( -5 );
224  assert( status == E_OACV );
225
226  puts( "Init - del_tsk - cannot delete TSK_SELF - E_OBJ" );
227  status = del_tsk( TSK_SELF );
228  assert( status == E_OBJ );
229
230  puts( "Init - del_tsk - bad id (between 0 and -4) - E_ID" );
231  status = del_tsk( -3 );
232  assert( status == E_ID );
233
234#if (0)
235  /* these errors can not be generated for del_tsk at this time */
236  assert( status == EN_OBJNO );
237  assert( status == EN_CTXID );
238#endif
239
240
241  puts( "\n\n*** Start Task Errors ***" );
242
243  puts( "Init - sta_tsk - access violation ( id less than -4) - E_OACV" );
244  status = sta_tsk( -5, 1 );
245  assert( status == E_OACV );
246
247  puts( "Init - sta_tsk - bad id (between 0 and -4) - E_ID" );
248  status = sta_tsk( -2, 1 );
249  assert( status == E_ID );
250
251  puts( "Init - sta_tsk - cannot start TSK_SELF - E_OBJ" );
252  status = sta_tsk( TSK_SELF, 1 );
253  assert( status == E_OBJ );
254
255  puts( "Init - sta_tsk - task is not DORMANT  - E_OBJ" );
256  status = sta_tsk( NON_DORMANT_TASK_ID, 1 );
257  assert( status == E_OBJ );
258
259  puts( "Init - sta_tsk - task does not exist  - E_NOEXS" );
260  status = sta_tsk( 5, 1 );
261  assert( status == E_NOEXS );
262
263#if (0)
264  /* these errors can not be generated for sta_tsk at this time */
265  assert( status == EN_OBJNO );
266  assert( status == EN_CTXID );
267  assert( status == EN_PAR );
268#endif
269
270
271#if (0)
272  /* these errors can not be tested at this time */
273  puts( "\n\n*** Exit Task Errors ***" );
274  puts( "Init - ext_tsk - context error - E_CTX" );
275  status = ext_tsk(  );
276  assert( status == E_CTX );
277
278  puts( "\n\n*** Exit and Delete Task Errors ***" );
279  puts( "Init - exd_tsk - context error - E_CTX" );
280  status = exd_tsk(  );
281  assert( status == E_CTX );
282#endif
283
284
285  puts( "\n\n*** Terminate Other Task Errors ***" );
286
287  puts( "Init - ter_tsk - bad id (between 0 and -4) - E_ID" );
288  status = ter_tsk( -2 );
289  assert( status == E_ID );
290
291  puts( "Init - ter_tsk - cannot terminate TSK_SELF (0) - E_OBJ" );
292  status = ter_tsk( TSK_SELF );
293  assert( status == E_OBJ );
294
295  puts( "Init - ter_tsk - task is not DORMANT - E_OBJ" );
296  status = ter_tsk( DORMANT_TASK_ID );
297  assert( status == E_OBJ );
298
299  puts( "Init - ter_tsk - task does not exist - E_NOEXS" );
300  status = ter_tsk( 5 );
301  assert( status == E_NOEXS );
302
303  puts( "Init - ter_tsk - access violation ( id less than -4) - E_OACV" );
304  status = ter_tsk( -5 );
305  assert( status == E_OACV );
306
307#if (0)
308  /* these errors can not be generated for ter_tsk at this time */
309  assert( status == EN_OBJNO );
310  assert( status == EN_CTXID );
311#endif
312
313
314#if (0)
315  status = dis_dsp( );
316  assert( status == E_CTX );
317
318  status = ena_dsp( );
319  assert( status == E_CTX );
320#endif
321
322
323  puts( "\n\n*** Change Priority Task Errors ***" );
324
325  puts( "Init - chg_pri - bad id (between 0 and -4) - E_ID" );
326  status = chg_pri( -2, 1 );
327  assert( status == E_ID );
328
329  /*  Call from task independent portion to cause E_OBJ
330  puts( "Init - chg_pri - change priority of TSK_SELF - E_OBJ" );
331  status = chg_pri( TSK_SELF, 1 );
332  assert( status == E_OBJ );
333  */
334
335  /*  Need a dormant task to call */
336  puts( "Init - chg_pri - task is not DORMANT - E_OBJ" );
337  status = chg_pri( DORMANT_TASK_ID, 1 );
338  assert( status == E_OBJ );
339
340  puts( "Init - chg_pri - task does not exist - E_NOEXS" );
341  status = chg_pri( 5, 1 );
342  assert( status == E_NOEXS );
343
344  puts( "Init - chg_pri - access violation ( id less than -4) - E_OACV" );
345  status =  chg_pri( -5, 1 );
346  assert( status == E_OACV );
347
348  puts( "Init - chg_pri - invalid priority - E_PAR" );
349  status =  chg_pri( 1, -1 );
350  assert( status == E_PAR );
351
352#if (0)
353  /* these errors can not be generated for chg_pri at this time */
354  assert( status == EN_OBJNO );
355  assert( status == EN_CTXID );
356  assert( status == EN_PAR );
357#endif
358
359  /*  This gave me a nasty-gram
360   *  "core_find_mapping() - access to unmaped address, attach a default map
361   *   to handle this - addr=0x80002098 nr_bytes=0x4 processor=0x40134008
362   *   cia=0xc744"
363   */
364 
365   puts( "\n\n*** Rotate Ready Queue Errors ***" );
366   puts( "Init - rot_rdq - priority  -1 - E_PAR" );
367   status = rot_rdq( -1 );
368   assert( status == E_PAR );
369   puts( "Init - rot_rdq - priority  257 - E_PAR" );
370   status = rot_rdq( 257 );
371   assert( status == E_PAR );
372
373#if (0)
374  /* This routine is not coded */
375  rel_wai( ID );
376  assert( status == E_OK );
377  assert( status == E_ID );
378  assert( status == E_NOEXS );
379  assert( status == E_OACV );
380  assert( status == E_OBJ );
381  assert( status == EN_OBJNO );
382  assert( status == EN_CTXID );
383#endif
384
385
386#if (0)
387  get_tid( ID );
388  assert( status == E_OK );
389#endif
390
391  puts( "\n\n*** Reference Task Status Errors ***" );
392  puts( "Init - ref_tsk - bad id (between 0 and -4) - E_ID" );
393  status = ref_tsk( &pk_rtsk, -2 );
394  assert( status == E_ID );
395
396  /*  Call from task independent portion to cause E_ID
397  puts( "Init - ref_tsk - reference SELF - E_ID" );
398  status = ref_tsk( &pk_rtsk, TSK_SELF );
399  assert( status == E_ID );
400  */
401
402  puts( "Init - ref_tsk - task does not exist - E_NOEXS" );
403  status = ref_tsk( &pk_rtsk, 5 );
404  assert( status == E_NOEXS );
405
406  puts( "Init - ref_tsk - access violation ( id less than -4) - E_OACV" );
407  status =  ref_tsk( &pk_rtsk, -5 );
408  assert( status == E_OACV );
409
410  puts( "Init - ref_tsk - packet address is bad - E_PAR" );
411  status =  ref_tsk( NULL, 1 );
412  assert( status == E_PAR );
413
414
415#if (0)
416  /*  these errors can not be generated for ref_tsk at this time */
417  assert( status == EN_OBJNO );
418  assert( status == EN_CTXID );
419  assert( status == EN_RPAR );
420#endif
421
422
423  puts( "\n\n*** Suspend Task Errors ***" );
424
425  puts( "Init - sus_tsk - access violation ( id less than -4) - E_OACV" );
426  status = sus_tsk( -5 );
427  assert( status == E_OACV );
428
429  puts( "Init - sus_tsk - bad id (between 0 and -4) - E_ID" );
430  status = sus_tsk( -2 );
431  assert( status == E_ID );
432
433  puts( "Init - sus_tsk - cannot suspend SELF - E_OBJ" );
434  status = sus_tsk( TSK_SELF );
435  assert( status == E_OBJ );
436
437  puts( "Init - sus_tsk - task does not exist - E_NOEXS" );
438  status = sus_tsk( 5 );
439  assert( status == E_NOEXS );
440#if (0)
441  puts( "Init - sus_tsk - no support for nested SUSPENDS - E_QOVR" );
442  status = sus_tsk( 1 );
443  assert( status == E_QOVR );
444
445  puts( "Init - sus_tsk - exceeded limit for nested SUSPENDS - E_QOVR" );
446  status = sus_tsk( 1 );
447  assert( status == E_QOVR );
448#endif
449
450#if (0)
451  /* these errors can not be generated for sus_tsk at this time */
452  assert( status == EN_OBJNO );
453  assert( status == EN_CTXID );
454#endif
455
456
457  puts( "\n\n*** Resume Task Errors ***" );
458
459  puts( "Init - rsm_tsk - access violation ( id less than -4) - E_OACV" );
460  status = rsm_tsk( -5 );
461  assert( status == E_OACV );
462
463  puts( "Init - rsm_tsk - bad id (between 0 and -4) - E_ID" );
464  status = rsm_tsk( -2 );
465  assert( status == E_ID );
466
467  puts( "Init - rsm_tsk - cannot resume SELF - E_OBJ" );
468  status = rsm_tsk( TSK_SELF );
469  assert( status == E_OBJ );
470
471  puts( "Init - rsm_tsk - task is DORMANT - E_OBJ" );
472  status = rsm_tsk( DORMANT_TASK_ID );
473  assert( status == E_OBJ );
474
475  puts( "Init - rsm_tsk - task does not exist - E_NOEXS" );
476  status = rsm_tsk( 5 );
477  assert( status == E_NOEXS );
478
479#if (0)
480  /* these errors can not be generated for rsm_tsk at this time */
481  assert( status == EN_OBJNO );
482  assert( status == EN_CTXID );
483#endif
484
485
486  puts( "\n\n*** Forcibly Resume Task Errors ***" );
487
488  puts( "Init - frsm_tsk - access violation ( id less than -4) - E_OACV" );
489  status = frsm_tsk( -5 );
490  assert( status == E_OACV );
491
492  puts( "Init - frsm_tsk - bad id (between 0 and -4) - E_ID" );
493  status = frsm_tsk( -2 );
494  assert( status == E_ID );
495
496  puts( "Init - frsm_tsk - cannot forcibly resume SELF - E_OBJ" );
497  status = frsm_tsk( TSK_SELF );
498  assert( status == E_OBJ );
499
500  puts( "Init - frsm_tsk - task is DORMANT - E_OBJ" );
501  status = frsm_tsk( DORMANT_TASK_ID );
502  assert( status == E_OBJ );
503
504  puts( "Init - frsm_tsk - task does not exist - E_NOEXS" );
505  status = frsm_tsk( 5 );
506  assert( status == E_NOEXS );
507
508#if (0)
509  /* these errors can not be generated for frsm_tsk at this time */
510  assert( status == EN_OBJNO );
511  assert( status == EN_CTXID );
512#endif
513
514
515#if (0)
516  /* these directives are not coded */
517  slp_tsk( );
518  assert( status == E_OK );
519  assert( status == E_PAR );
520  assert( status == E_RLWAI );
521  assert( status == E_TMOUT );
522  assert( status == E_CTX );
523
524
525  tslp_tsk( TMO );
526  assert( status == E_OK );
527  assert( status == E_PAR );
528  assert( status == E_RLWAI );
529  assert( status == E_TMOUT );
530  assert( status == E_CTX );
531
532
533  wup_tsk( ID );
534  assert( status == E_OK );
535  assert( status == E_ID );
536  assert( status == E_NOEXS );
537  assert( status == E_OACV );
538  assert( status == E_OBJ );
539  assert( status == E_QOVR );
540  assert( status == EN_OBJNO );
541  assert( status == EN_CTXID );
542
543
544  can_tsk( INT, ID );
545  assert( status == E_OK );
546  assert( status == E_ID );
547  assert( status == E_NOEXS );
548  assert( status == E_OACV );
549  assert( status == E_OBJ );
550  assert( status == EN_OBJNO );
551  assert( status == EN_CTXID );
552  assert( status == EN_RPAR );
553#endif
554
555  puts( "*** ITRON TASK TEST 2 ***" );
556  exit( 0 );
557}
Note: See TracBrowser for help on using the repository browser.