1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
|
/*
* COPYRIGHT (c) 2014.
* On-Line Applications Research Corporation (OAR).
*
* The license and distribution terms for this file may be
* found in the file LICENSE in this distribution or at
* http://www.rtems.org/license/LICENSE.
*/
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
#include <rtems.h>
#include "tmacros.h"
const char rtems_test_name[] = "SMPSCHEDSEM 01";
#define NUM_CPUS 1
#define TASK_COUNT 2
#define TASK_PRIORITY 8
#define SEM_PRIORITY 5
/*
* Test verifies priority,
* Changes priority by obtaining a higher priority semaphore
* Releases semaphore to return priority
*/
static void test(void)
{
rtems_status_code sc;
rtems_task_priority priority;
rtems_id task_sem;
sc = rtems_semaphore_create(
rtems_build_name('S', 'E', 'M', '0'),
1,
RTEMS_BINARY_SEMAPHORE |
RTEMS_PRIORITY |
RTEMS_PRIORITY_CEILING,
5,
&task_sem
);
rtems_test_assert(sc == RTEMS_SUCCESSFUL);
rtems_task_set_priority(RTEMS_SELF, RTEMS_CURRENT_PRIORITY, &priority);
printf("Init: priority %d expected %d\n",(int)priority, TASK_PRIORITY );
rtems_test_assert( priority == TASK_PRIORITY );
printf("Init: Obtain Semaphore\n");
sc = rtems_semaphore_obtain (task_sem, RTEMS_WAIT, RTEMS_NO_TIMEOUT);
rtems_test_assert(sc == RTEMS_SUCCESSFUL);
rtems_task_set_priority(RTEMS_SELF, RTEMS_CURRENT_PRIORITY, &priority);
printf("Init: priority %d expected %d\n",(int)priority, SEM_PRIORITY );
rtems_test_assert( priority == SEM_PRIORITY );
printf("Init: Release Semaphore\n");
rtems_semaphore_release(task_sem);
rtems_task_set_priority(RTEMS_SELF, RTEMS_CURRENT_PRIORITY, &priority);
printf("Init: priority %d expected %d\n",(int)priority, TASK_PRIORITY );
rtems_test_assert( priority == TASK_PRIORITY );
}
static void Init(rtems_task_argument arg)
{
TEST_BEGIN();
test();
TEST_END();
rtems_test_exit(0);
}
#define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER
#define CONFIGURE_APPLICATION_NEEDS_SIMPLE_CONSOLE_DRIVER
#define CONFIGURE_SCHEDULER_PRIORITY_AFFINITY_SMP
#define CONFIGURE_MAXIMUM_PROCESSORS NUM_CPUS
#define CONFIGURE_MAXIMUM_TASKS TASK_COUNT
#define CONFIGURE_INITIAL_EXTENSIONS RTEMS_TEST_INITIAL_EXTENSION
#define CONFIGURE_INIT_TASK_PRIORITY TASK_PRIORITY
#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
#define CONFIGURE_INIT
#include <rtems/confdefs.h>
|