summaryrefslogtreecommitdiffstats
path: root/testsuites/sptests/spintrcritical17/init.c
diff options
context:
space:
mode:
authorJoel Sherrill <joel.sherrill@OARcorp.com>2009-12-04 14:08:51 +0000
committerJoel Sherrill <joel.sherrill@OARcorp.com>2009-12-04 14:08:51 +0000
commitbb14405df298451374683a127c9219aaa63a84b3 (patch)
treeed03c6a1ee4431095432e2618d0a797046c6febe /testsuites/sptests/spintrcritical17/init.c
parent2009-12-04 Ralf Corsépius <ralf.corsepius@rtems.org> (diff)
downloadrtems-bb14405df298451374683a127c9219aaa63a84b3.tar.bz2
2009-12-04 Sebastian Huber <Sebastian.Huber@embedded-brains.de>
* sp31/sp31.scn, sp31/task1.c, spintrcritical17/init.c: New test cases. Updated copyright notice.
Diffstat (limited to 'testsuites/sptests/spintrcritical17/init.c')
-rw-r--r--testsuites/sptests/spintrcritical17/init.c93
1 files changed, 59 insertions, 34 deletions
diff --git a/testsuites/sptests/spintrcritical17/init.c b/testsuites/sptests/spintrcritical17/init.c
index ff55caf839..41752c5851 100644
--- a/testsuites/sptests/spintrcritical17/init.c
+++ b/testsuites/sptests/spintrcritical17/init.c
@@ -1,44 +1,70 @@
/*
- * COPYRIGHT (c) 1989-2009.
- * On-Line Applications Research Corporation (OAR).
+ * Copyright (c) 2009
+ * embedded brains GmbH
+ * Obere Lagerstr. 30
+ * D-82178 Puchheim
+ * Germany
+ * <rtems@embedded-brains.de>
*
- * The license and distribution terms for this file may be
- * found in the file LICENSE in this distribution or at
- * http://www.rtems.com/license/LICENSE.
+ * The license and distribution terms for this file may be
+ * found in the file LICENSE in this distribution or at
+ * http://www.rtems.com/license/LICENSE.
*
- * $Id$
+ * $Id$
*/
#include <tmacros.h>
#include <intrcritical.h>
-static rtems_id timer_0;
-static rtems_id timer_1;
-static rtems_id timer_2;
+#define TIMER_COUNT 4
-volatile bool case_hit;
+#define TIMER_TRIGGER 0
+#define TIMER_RESET 1
+#define TIMER_NEVER_INTERVAL 2
+#define TIMER_NEVER_TOD 3
+
+static rtems_id timer [TIMER_COUNT];
+
+static rtems_time_of_day tod;
+
+static volatile bool case_hit;
static void never_callback(rtems_id timer, void *arg)
{
rtems_test_assert(false);
}
-static void reset_callback(rtems_id timer, void *arg)
+static void reset_tod_timer(void)
{
rtems_status_code sc = RTEMS_SUCCESSFUL;
- sc = rtems_timer_reset(timer_0);
+ sc = rtems_timer_server_fire_when(
+ timer [TIMER_NEVER_TOD],
+ &tod,
+ never_callback,
+ NULL
+ );
+ directive_failed_with_level(sc, "rtems_timer_server_fire_after", -1);
+}
+
+static void reset_callback(rtems_id timer_id, void *arg)
+{
+ rtems_status_code sc = RTEMS_SUCCESSFUL;
+
+ sc = rtems_timer_reset(timer [TIMER_RESET]);
directive_failed_with_level(sc, "rtems_timer_reset", -1);
- sc = rtems_timer_reset(timer_1);
+ sc = rtems_timer_reset(timer [TIMER_NEVER_INTERVAL]);
directive_failed_with_level(sc, "rtems_timer_reset", -1);
+ reset_tod_timer();
+
if (!case_hit) {
case_hit = _Timer_server->insert_chain != NULL;
}
}
-static void trigger_callback(rtems_id timer, void *arg)
+static void trigger_callback(rtems_id timer_id, void *arg)
{
rtems_status_code sc = RTEMS_SUCCESSFUL;
@@ -52,33 +78,30 @@ static void trigger_callback(rtems_id timer, void *arg)
rtems_test_exit(0);
}
- sc = rtems_timer_reset(timer_2);
+ sc = rtems_timer_reset(timer [TIMER_TRIGGER]);
directive_failed(sc, "rtems_timer_reset");
}
rtems_task Init( rtems_task_argument ignored )
{
rtems_status_code sc = RTEMS_SUCCESSFUL;
+ size_t i = 0;
puts("\n\n*** TEST INTERRUPT CRITICAL SECTION 17 ***");
- sc = rtems_timer_create(
- rtems_build_name('T', 'I', 'M', '0'),
- &timer_0
- );
- directive_failed(sc, "rtems_timer_create");
+ build_time(&tod, 4, 12, 2009, 9, 34, 11, 0);
+ sc = rtems_clock_set(&tod);
+ directive_failed(sc, "rtems_clock_set");
- sc = rtems_timer_create(
- rtems_build_name('T', 'I', 'M', '1'),
- &timer_1
- );
- directive_failed(sc, "rtems_timer_create");
+ ++tod.year;
- sc = rtems_timer_create(
- rtems_build_name('T', 'I', 'M', '2'),
- &timer_2
- );
- directive_failed(sc, "rtems_timer_create");
+ for (i = 0; i < TIMER_COUNT; ++i) {
+ sc = rtems_timer_create(
+ rtems_build_name('T', 'I', 'M', '0' + i),
+ &timer [i]
+ );
+ directive_failed(sc, "rtems_timer_create");
+ }
sc = rtems_timer_initiate_server(
RTEMS_MINIMUM_PRIORITY,
@@ -88,15 +111,17 @@ rtems_task Init( rtems_task_argument ignored )
directive_failed(sc, "rtems_timer_initiate_server");
sc = rtems_timer_server_fire_after(
- timer_0,
+ timer [TIMER_NEVER_INTERVAL],
2,
never_callback,
NULL
);
directive_failed(sc, "rtems_timer_server_fire_after");
+ reset_tod_timer();
+
sc = rtems_timer_fire_after(
- timer_1,
+ timer [TIMER_RESET],
1,
reset_callback,
NULL
@@ -104,7 +129,7 @@ rtems_task Init( rtems_task_argument ignored )
directive_failed(sc, "rtems_timer_fire_after");
sc = rtems_timer_server_fire_after(
- timer_2,
+ timer [TIMER_TRIGGER],
1,
trigger_callback,
NULL
@@ -122,7 +147,7 @@ rtems_task Init( rtems_task_argument ignored )
#define CONFIGURE_MICROSECONDS_PER_TICK 1000
#define CONFIGURE_MAXIMUM_TASKS 2
-#define CONFIGURE_MAXIMUM_TIMERS 3
+#define CONFIGURE_MAXIMUM_TIMERS 4
#define CONFIGURE_RTEMS_INIT_TASKS_TABLE