source: rtems/testsuites/sptests/sp28/init.c @ 458d4e66

4.104.114.84.95
Last change on this file since 458d4e66 was 458d4e66, checked in by Joel Sherrill <joel.sherrill@…>, on 11/11/99 at 02:23:04

Added new test sp28 to test the task variable directives.

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