diff options
author | Joel Sherrill <joel.sherrill@OARcorp.com> | 2009-12-04 14:08:51 +0000 |
---|---|---|
committer | Joel Sherrill <joel.sherrill@OARcorp.com> | 2009-12-04 14:08:51 +0000 |
commit | bb14405df298451374683a127c9219aaa63a84b3 (patch) | |
tree | ed03c6a1ee4431095432e2618d0a797046c6febe /testsuites/sptests/spintrcritical17/init.c | |
parent | 2009-12-04 Ralf Corsépius <ralf.corsepius@rtems.org> (diff) | |
download | rtems-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.c | 93 |
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 |