Back to home page

LXR

 
 

    


File indexing completed on 2025-05-11 08:24:45

0001 /* SPDX-License-Identifier: BSD-2-Clause */
0002 
0003 /*
0004  *  COPYRIGHT (c) 1989-2009.
0005  *  On-Line Applications Research Corporation (OAR).
0006  *
0007  * Redistribution and use in source and binary forms, with or without
0008  * modification, are permitted provided that the following conditions
0009  * are met:
0010  * 1. Redistributions of source code must retain the above copyright
0011  *    notice, this list of conditions and the following disclaimer.
0012  * 2. Redistributions in binary form must reproduce the above copyright
0013  *    notice, this list of conditions and the following disclaimer in the
0014  *    documentation and/or other materials provided with the distribution.
0015  *
0016  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
0017  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
0018  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
0019  * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
0020  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
0021  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
0022  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
0023  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
0024  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
0025  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
0026  * POSSIBILITY OF SUCH DAMAGE.
0027  */
0028 
0029 #ifdef HAVE_CONFIG_H
0030 #include "config.h"
0031 #endif
0032 
0033 #include <tmacros.h>
0034 #include <rtems/cpuuse.h>
0035 
0036 const char rtems_test_name[] = "SP 46";
0037 
0038 rtems_task Periodic_Task(
0039   rtems_task_argument argument
0040 );
0041 rtems_task Init(
0042   rtems_task_argument argument
0043 );
0044 
0045 volatile int partial_loop = 0;
0046 
0047 rtems_task Periodic_Task(
0048   rtems_task_argument argument
0049 )
0050 {
0051   rtems_status_code  status;
0052   rtems_name         period_name = rtems_build_name('P','E','R','a');
0053   rtems_id           period_id;
0054   rtems_interval     start;
0055   rtems_interval     end;
0056 
0057   puts( "Periodic - Create Period" );
0058   /* create period */
0059   status = rtems_rate_monotonic_create( period_name, &period_id );
0060   directive_failed(status, "rate_monotonic_create");
0061 
0062   partial_loop = 0;
0063   while (1) {
0064     /* start period with initial value */
0065     status = rtems_rate_monotonic_period( period_id, 25 );
0066     directive_failed(status, "rate_monotonic_period");
0067     partial_loop = 0;
0068 
0069     start = rtems_clock_get_ticks_since_boot();
0070     end   = start + 5;
0071     while ( end <= rtems_clock_get_ticks_since_boot() )
0072       ;
0073 
0074     partial_loop = 1;
0075 
0076     rtems_task_wake_after( 5 );
0077   }
0078 
0079   puts( "Periodic - Deleting self" );
0080   rtems_task_exit();
0081 }
0082 
0083 rtems_task Init(
0084   rtems_task_argument argument
0085 )
0086 {
0087   rtems_status_code  status;
0088   rtems_id           task_id;
0089 
0090   TEST_BEGIN();
0091 
0092   /*
0093    * Initialize Tasks
0094    */
0095 
0096 
0097   puts( "INIT - rtems_task_create - creating task 1" );
0098   status = rtems_task_create(
0099     rtems_build_name( 'T', 'A', '1', ' ' ),
0100     1,
0101     RTEMS_MINIMUM_STACK_SIZE,
0102     RTEMS_DEFAULT_MODES,
0103     RTEMS_DEFAULT_ATTRIBUTES,
0104     &task_id
0105   );
0106   directive_failed( status, "rtems_task_create of TA1" );
0107 
0108   puts( "INIT - rtems_task_start - TA1 " );
0109   status = rtems_task_start( task_id, Periodic_Task, 0 );
0110   directive_failed( status, "rtems_task_start of TA1" );
0111 
0112   while ( !partial_loop ) {
0113     status = rtems_task_wake_after( 2 );
0114     directive_failed( status, "rtems_task_wake_after" );
0115   }
0116 
0117   rtems_cpu_usage_reset();
0118 
0119   status = rtems_task_wake_after( rtems_clock_get_ticks_per_second() );
0120   directive_failed( status, "rtems_task_wake_after" );
0121 
0122   /*
0123    *  Exit test
0124    */
0125   TEST_END();
0126   rtems_test_exit( 0 );
0127 }
0128 
0129 #define CONFIGURE_INIT
0130 /* configuration information */
0131 
0132 #define CONFIGURE_APPLICATION_NEEDS_SIMPLE_CONSOLE_DRIVER
0133 #define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER
0134 
0135 /* Two Tasks: Init and Timer Server */
0136 #define CONFIGURE_MAXIMUM_TASKS           2
0137 #define CONFIGURE_MAXIMUM_PERIODS         1
0138 #define CONFIGURE_INIT_TASK_STACK_SIZE    (RTEMS_MINIMUM_STACK_SIZE * 2)
0139 #define CONFIGURE_INIT_TASK_PRIORITY      10
0140 #define CONFIGURE_INIT_TASK_INITIAL_MODES RTEMS_DEFAULT_MODES
0141 
0142 #define CONFIGURE_INITIAL_EXTENSIONS RTEMS_TEST_INITIAL_EXTENSION
0143 
0144 #define CONFIGURE_RTEMS_INIT_TASKS_TABLE
0145 
0146 #define CONFIGURE_EXTRA_TASK_STACKS       (1 * RTEMS_MINIMUM_STACK_SIZE)
0147 
0148 #include <rtems/confdefs.h>
0149