source: rtems/c/src/tests/sptests/sp28/init.c @ 01e0e43

Last change on this file since 01e0e43 was 01e0e43, checked in by Joel Sherrill <joel.sherrill@…>, on 05/16/00 at 18:44:03

Update from Eric Norum to fix dereference of zero and correct
test behavior. Based on report from Victor V. Vengerov <vvv@…>.

  • Property mode set to 100644
File size: 2.9 KB
Line 
1/*
2 *  $Id$
3 */
4
5#define TEST_INIT
6#include <tmacros.h>
7
8rtems_task Init(rtems_task_argument argument);
9
10#define CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER
11#define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER
12#define CONFIGURE_MAXIMUM_USER_EXTENSIONS    2
13
14#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
15#define CONFIGURE_MICROSECONDS_PER_TICK       52429
16
17#define CONFIGURE_MICROSECONDS_INIT
18
19#include <confdefs.h>
20
21#include <bsp.h>
22#include <rtems/error.h>
23#include <stdio.h>
24
25volatile void *taskvar;
26volatile int nRunning;
27volatile int nDeleted;
28
29rtems_task
30subtask (rtems_task_argument arg)
31{
32        int localvar = arg;
33        int i;
34        rtems_status_code sc;
35
36        nRunning++;
37        while (nRunning != 3)
38                rtems_task_wake_after (0);
39        sc = rtems_task_variable_add (RTEMS_SELF, &taskvar, NULL);
40        if (sc != RTEMS_SUCCESSFUL) {
41                printf ("Can't add task variable: %s\n", rtems_status_text (sc));
42                rtems_task_suspend (RTEMS_SELF);
43        }
44        taskvar = (void *)localvar;
45        while (localvar < 1000) {
46                localvar++;
47                rtems_task_wake_after (0);
48                taskvar = (void *)((int)taskvar + 1);
49                rtems_task_wake_after (0);
50                if ((int)taskvar != localvar) {
51                        printf ("Task:%d taskvar:%d localvar:%d\n", arg, (int)taskvar, localvar);
52                        rtems_task_suspend (RTEMS_SELF);
53                }
54        }
55        sc = rtems_task_variable_delete (RTEMS_SELF, &taskvar);
56        nDeleted++;
57        if (sc != RTEMS_SUCCESSFUL) {
58                printf ("Can't delete task variable: %s\n", rtems_status_text (sc));
59                nRunning--;
60                rtems_task_suspend (RTEMS_SELF);
61        }
62        if ((int)taskvar == localvar) {
63                printf ("Task:%d deleted taskvar:%d localvar:%d\n", arg, (int)taskvar, localvar);
64                nRunning--;
65                rtems_task_suspend (RTEMS_SELF);
66        }
67        while (nDeleted != 3)
68                rtems_task_wake_after (0);
69        for (i = 0 ; i < 1000 ; i++) {
70                taskvar = (void *)(localvar = 100 * arg);
71                rtems_task_wake_after (0);
72                if (nRunning <= 1)
73                        break;
74                if ((int)taskvar == localvar) {
75                        printf ("Task:%d taskvar:%d localvar:%d\n", arg, (int)taskvar, localvar);
76                        nRunning--;
77                        rtems_task_suspend (RTEMS_SELF);
78                }
79        }
80        nRunning--;
81        while (nRunning)
82                rtems_task_wake_after (0);
83        printf ("Task variables test complete.\n");
84        exit (0);
85}
86
87void
88starttask (int arg)
89{
90        rtems_id tid;
91        rtems_status_code sc;
92
93        sc = rtems_task_create (rtems_build_name ('S', 'R', 'V', arg + 'A'),
94                100,
95                10000,
96                RTEMS_PREEMPT|RTEMS_NO_TIMESLICE|RTEMS_NO_ASR|RTEMS_INTERRUPT_LEVEL(0),
97                RTEMS_NO_FLOATING_POINT|RTEMS_LOCAL,
98                &tid);
99        if (sc != RTEMS_SUCCESSFUL) {
100                printf ("Can't create task: %s\n", rtems_status_text (sc));
101                rtems_task_suspend (RTEMS_SELF);
102        }
103        sc = rtems_task_start (tid, subtask, arg);
104        if (sc != RTEMS_SUCCESSFUL) {
105                printf ("Can't start task: %s\n", rtems_status_text (sc));
106                rtems_task_suspend (RTEMS_SELF);
107        }
108}
109
110rtems_task
111Init (rtems_task_argument ignored)
112{
113        printf ("Task variables test begins.  Any output between\n");
114        printf ("this line and the `Task variables test complete' line indicates an error.\n");
115        starttask (1);
116        starttask (2);
117        starttask (3);
118        rtems_task_suspend (RTEMS_SELF);
119}
Note: See TracBrowser for help on using the repository browser.