source: rtems/testsuites/sptests/spnsext01/init.c @ c955f99

4.115
Last change on this file since c955f99 was c955f99, checked in by Sebastian Huber <sebastian.huber@…>, on 08/26/13 at 14:46:53

sptests/spnsext01: Add SMP support

  • Property mode set to 100644
File size: 2.2 KB
Line 
1/*
2 * Copyright (c) 2011 embedded brains GmbH.  All rights reserved.
3 *
4 *  embedded brains GmbH
5 *  Obere Lagerstr. 30
6 *  82178 Puchheim
7 *  Germany
8 *  <rtems@embedded-brains.de>
9 *
10 * The license and distribution terms for this file may be
11 * found in the file LICENSE in this distribution or at
12 * http://www.rtems.com/license/LICENSE.
13 */
14
15#ifdef HAVE_CONFIG_H
16#include "config.h"
17#endif
18
19#include <tmacros.h>
20
21static rtems_task Init(rtems_task_argument argument)
22{
23  rtems_status_code sc = RTEMS_SUCCESSFUL;
24  rtems_interrupt_lock lock = RTEMS_INTERRUPT_LOCK_INITIALIZER;
25  rtems_interrupt_level level;
26  rtems_interval t0 = 0;
27  rtems_interval t1 = 0;
28  int i = 0;
29  int n = 0;
30  struct timespec uptime;
31  struct timespec new_uptime;
32
33  puts("\n\n*** TEST NANO SECONDS EXTENSION 1 ***");
34
35  /* Align with clock tick */
36  t0 = rtems_clock_get_ticks_since_boot();
37  while ((t1 = rtems_clock_get_ticks_since_boot()) == t0) {
38    /* Do nothing */
39  }
40
41  t0 = t1;
42  sc = rtems_clock_get_uptime(&uptime);
43  rtems_test_assert(sc == RTEMS_SUCCESSFUL);
44  while ((t1 = rtems_clock_get_ticks_since_boot()) == t0) {
45    ++n;
46    sc = rtems_clock_get_uptime(&new_uptime);
47    rtems_test_assert(sc == RTEMS_SUCCESSFUL);
48    rtems_test_assert(!_Timespec_Less_than(&new_uptime, &uptime));
49    uptime = new_uptime;
50  }
51
52  n = (3 * n) / 2;
53
54  rtems_interrupt_lock_acquire(&lock, level);
55  sc = rtems_clock_get_uptime(&uptime);
56  rtems_test_assert(sc == RTEMS_SUCCESSFUL);
57  for (i = 0; i < n; ++i) {
58    /* Preserve execution time of previous loop */
59    rtems_clock_get_ticks_since_boot();
60
61    sc = rtems_clock_get_uptime(&new_uptime);
62    rtems_test_assert(sc == RTEMS_SUCCESSFUL);
63    rtems_test_assert(!_Timespec_Less_than(&new_uptime, &uptime));
64    uptime = new_uptime;
65  }
66  rtems_interrupt_lock_release(&lock, level);
67
68  puts("*** END OF TEST NANO SECONDS EXTENSION 1 ***");
69
70  rtems_test_exit(0);
71}
72
73#define CONFIGURE_INIT
74
75#define CONFIGURE_MICROSECONDS_PER_TICK 100000
76
77#define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER
78#define CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER
79
80#define CONFIGURE_USE_IMFS_AS_BASE_FILESYSTEM
81
82#define CONFIGURE_MAXIMUM_TASKS 1
83#define CONFIGURE_MAXIMUM_DRIVERS 2
84
85#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
86
87#include <rtems/confdefs.h>
Note: See TracBrowser for help on using the repository browser.