forked from Imagelibrary/rtems
133 lines
3.3 KiB
C
133 lines
3.3 KiB
C
/*
|
|
* Based upon test code posted on the RTEMS User's Mailing List
|
|
* by Sergio Faustino <sergio.faustino@edisoft.pt>:
|
|
*
|
|
* http://www.rtems.org/pipermail/rtems-users/2009-June/005540.html
|
|
*
|
|
* 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.
|
|
*/
|
|
|
|
#if defined(USE_TIMER_SERVER)
|
|
#define TEST_NUMBER "53"
|
|
#define TSR_MODE "Server"
|
|
#define FIRE_WHEN rtems_timer_server_fire_when
|
|
#define FIRE_WHEN_STRING "rtems_timer_server_fire_when"
|
|
#else
|
|
#define TEST_NUMBER "52"
|
|
#define TSR_MODE "Interrupt"
|
|
#define FIRE_WHEN rtems_timer_fire_when
|
|
#define FIRE_WHEN_STRING "rtems_timer_fire_when"
|
|
#endif
|
|
|
|
#ifdef HAVE_CONFIG_H
|
|
#include "config.h"
|
|
#endif
|
|
|
|
#include <tmacros.h>
|
|
|
|
const char rtems_test_name[] = "SP " TEST_NUMBER;
|
|
|
|
/* forward declarations to avoid warnings */
|
|
rtems_task Init(rtems_task_argument argument);
|
|
rtems_timer_service_routine TIMER_service_routine(
|
|
rtems_id ignored_id,
|
|
void *user_data
|
|
);
|
|
|
|
#define INITIAL_SECOND 10
|
|
volatile bool _timer_passage = FALSE;
|
|
|
|
/*timer Routine*/
|
|
rtems_timer_service_routine TIMER_service_routine(
|
|
rtems_id ignored_id,
|
|
void *user_data
|
|
)
|
|
{
|
|
_timer_passage = TRUE;
|
|
}
|
|
|
|
rtems_task Init(
|
|
rtems_task_argument argument
|
|
)
|
|
{
|
|
rtems_status_code status;
|
|
rtems_id timer_id;
|
|
rtems_name timer_name;
|
|
|
|
rtems_time_of_day global_time;
|
|
rtems_time_of_day time_to_fire;
|
|
|
|
TEST_BEGIN();
|
|
|
|
/* build timer name*/
|
|
timer_name = rtems_build_name('T', 'M', '1', ' ');
|
|
|
|
/* create Timer */
|
|
status = rtems_timer_create(timer_name, &timer_id);
|
|
directive_failed( status, "rtems_timer_create" );
|
|
|
|
#if defined(USE_TIMER_SERVER)
|
|
/* initiate timer server */
|
|
status = rtems_timer_initiate_server(
|
|
RTEMS_MINIMUM_PRIORITY,
|
|
RTEMS_MINIMUM_STACK_SIZE,
|
|
RTEMS_DEFAULT_ATTRIBUTES
|
|
);
|
|
directive_failed( status, "rtems_timer_initiate_server" );
|
|
#endif
|
|
|
|
/* Set system clock */
|
|
build_time(&global_time, 6, 8, 2009, 16, 5, INITIAL_SECOND, 0);
|
|
status = rtems_clock_set(&global_time);
|
|
directive_failed( status, "rtems_clock_set" );
|
|
|
|
/* Set Timer to Fire */
|
|
/* build fire times */
|
|
time_to_fire = global_time;
|
|
|
|
/* only diferent second */
|
|
time_to_fire.second = INITIAL_SECOND + 5;
|
|
|
|
status = FIRE_WHEN(
|
|
timer_id,
|
|
&time_to_fire,
|
|
TIMER_service_routine,
|
|
(void*) NULL
|
|
);
|
|
directive_failed( status, FIRE_WHEN_STRING );
|
|
|
|
/* Set system clock FORWARD */
|
|
global_time.second = INITIAL_SECOND + 10;
|
|
status = rtems_clock_set(&global_time);
|
|
|
|
if (!_timer_passage) {
|
|
puts( TSR_MODE " Timer FAILED to fire after setting time forward");
|
|
rtems_test_exit(0);
|
|
}
|
|
|
|
puts( TSR_MODE " Timer fired after setting time forward -- OK");
|
|
|
|
TEST_END();
|
|
rtems_test_exit(0);
|
|
}
|
|
|
|
/* configuration stuff */
|
|
|
|
#define CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER
|
|
#define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER
|
|
|
|
#define CONFIGURE_MAXIMUM_TASKS 2
|
|
#define CONFIGURE_MAXIMUM_TIMERS 1
|
|
|
|
#define CONFIGURE_INITIAL_EXTENSIONS RTEMS_TEST_INITIAL_EXTENSION
|
|
|
|
#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
|
|
|
|
#define CONFIGURE_INIT_TASK_PRIORITY (RTEMS_MINIMUM_PRIORITY + 1)
|
|
#define CONFIGURE_INIT_TASK_INITIAL_MODES RTEMS_DEFAULT_MODES
|
|
|
|
#define CONFIGURE_INIT
|
|
#include <rtems/confdefs.h>
|