forked from Imagelibrary/rtems
2011-09-15 Petr Benes <benesp16@fel.cvut.cz>
PR 1907/testing * Makefile.am, configure.ac: Add tests for the CBS (Constant Bandwidth Server) scheduler. * spcbssched01/.cvsignore, spcbssched01/Makefile.am, spcbssched01/init.c, spcbssched01/spcbssched01.doc, spcbssched01/spcbssched01.scn, spcbssched01/system.h, spcbssched01/task1.c, spcbssched02/.cvsignore, spcbssched02/Makefile.am, spcbssched02/init.c, spcbssched02/spcbssched02.doc, spcbssched02/spcbssched02.scn, spcbssched02/system.h, spcbssched02/task_periodic.c, spcbssched03/.cvsignore, spcbssched03/Makefile.am, spcbssched03/cbsparams.h, spcbssched03/init.c, spcbssched03/spcbssched03.doc, spcbssched03/spcbssched03.scn, spcbssched03/system.h, spcbssched03/tasks_aperiodic.c, spcbssched03/tasks_periodic.c: New files.
This commit is contained in:
@@ -1,3 +1,21 @@
|
||||
2011-09-15 Petr Benes <benesp16@fel.cvut.cz>
|
||||
|
||||
PR 1907/testing
|
||||
* Makefile.am, configure.ac: Add tests for the CBS (Constant Bandwidth
|
||||
Server) scheduler.
|
||||
* spcbssched01/.cvsignore, spcbssched01/Makefile.am,
|
||||
spcbssched01/init.c, spcbssched01/spcbssched01.doc,
|
||||
spcbssched01/spcbssched01.scn, spcbssched01/system.h,
|
||||
spcbssched01/task1.c, spcbssched02/.cvsignore,
|
||||
spcbssched02/Makefile.am, spcbssched02/init.c,
|
||||
spcbssched02/spcbssched02.doc, spcbssched02/spcbssched02.scn,
|
||||
spcbssched02/system.h, spcbssched02/task_periodic.c,
|
||||
spcbssched03/.cvsignore, spcbssched03/Makefile.am,
|
||||
spcbssched03/cbsparams.h, spcbssched03/init.c,
|
||||
spcbssched03/spcbssched03.doc, spcbssched03/spcbssched03.scn,
|
||||
spcbssched03/system.h, spcbssched03/tasks_aperiodic.c,
|
||||
spcbssched03/tasks_periodic.c: New files.
|
||||
|
||||
2011-09-14 Sebastian Huber <sebastian.huber@embedded-brains.de>
|
||||
|
||||
* spnsext01/init.c: Use correct API.
|
||||
|
||||
@@ -30,7 +30,8 @@ SUBDIRS = \
|
||||
spintrcritical13 spintrcritical14 spintrcritical15 spintrcritical16 \
|
||||
spintrcritical17 spmkdir spmountmgr01 spheapprot \
|
||||
spsimplesched01 spsimplesched02 spsimplesched03 spnsext01 \
|
||||
spedfsched01 spedfsched02 spedfsched03
|
||||
spedfsched01 spedfsched02 spedfsched03 \
|
||||
spcbssched01 spcbssched02 spcbssched03
|
||||
|
||||
include $(top_srcdir)/../automake/subdirs.am
|
||||
include $(top_srcdir)/../automake/local.am
|
||||
|
||||
@@ -103,6 +103,9 @@ sp74/Makefile
|
||||
sp75/Makefile
|
||||
sp76/Makefile
|
||||
spassoc01/Makefile
|
||||
spcbssched01/Makefile
|
||||
spcbssched02/Makefile
|
||||
spcbssched03/Makefile
|
||||
spchain/Makefile
|
||||
spclockget/Makefile
|
||||
spcoverage/Makefile
|
||||
|
||||
2
testsuites/sptests/spcbssched01/.cvsignore
Normal file
2
testsuites/sptests/spcbssched01/.cvsignore
Normal file
@@ -0,0 +1,2 @@
|
||||
Makefile
|
||||
Makefile.in
|
||||
28
testsuites/sptests/spcbssched01/Makefile.am
Normal file
28
testsuites/sptests/spcbssched01/Makefile.am
Normal file
@@ -0,0 +1,28 @@
|
||||
##
|
||||
## $Id$
|
||||
##
|
||||
|
||||
MANAGERS = io semaphore clock
|
||||
|
||||
rtems_tests_PROGRAMS = spcbssched01
|
||||
spcbssched01_SOURCES = init.c task1.c system.h
|
||||
|
||||
dist_rtems_tests_DATA = spcbssched01.scn
|
||||
dist_rtems_tests_DATA += spcbssched01.doc
|
||||
|
||||
include $(RTEMS_ROOT)/make/custom/@RTEMS_BSP@.cfg
|
||||
include $(top_srcdir)/../automake/compile.am
|
||||
include $(top_srcdir)/../automake/leaf.am
|
||||
|
||||
spcbssched01_LDADD = $(MANAGERS_NOT_WANTED:%=$(PROJECT_LIB)/no-%.rel)
|
||||
|
||||
AM_CPPFLAGS += -I$(top_srcdir)/../support/include
|
||||
|
||||
LINK_OBJS = $(spcbssched01_OBJECTS) $(spcbssched01_LDADD)
|
||||
LINK_LIBS = $(spcbssched01_LDLIBS)
|
||||
|
||||
spcbssched01$(EXEEXT): $(spcbssched01_OBJECTS) $(spcbssched01_DEPENDENCIES)
|
||||
@rm -f spcbssched01$(EXEEXT)
|
||||
$(make-exe)
|
||||
|
||||
include $(top_srcdir)/../automake/local.am
|
||||
85
testsuites/sptests/spcbssched01/init.c
Normal file
85
testsuites/sptests/spcbssched01/init.c
Normal file
@@ -0,0 +1,85 @@
|
||||
/* Init
|
||||
*
|
||||
* This routine is the initialization task for this test program.
|
||||
* It is a user initialization task and has the responsibility for creating
|
||||
* and starting the tasks that make up the test. If the time of day
|
||||
* clock is required for the test, it should also be set to a known
|
||||
* value by this function.
|
||||
*
|
||||
* Input parameters:
|
||||
* argument - task argument
|
||||
*
|
||||
* Output parameters: NONE
|
||||
*
|
||||
* COPYRIGHT (c) 1989-1999.
|
||||
* On-Line Applications Research Corporation (OAR).
|
||||
*
|
||||
* 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$
|
||||
*/
|
||||
|
||||
#define CONFIGURE_INIT
|
||||
#include "system.h"
|
||||
|
||||
rtems_task Init(
|
||||
rtems_task_argument argument
|
||||
)
|
||||
{
|
||||
rtems_time_of_day time;
|
||||
rtems_status_code status;
|
||||
|
||||
puts( "\n\n*** CBS SCHEDULER TEST 1 ***" );
|
||||
|
||||
build_time( &time, 12, 31, 1988, 9, 0, 0, 0 );
|
||||
status = rtems_clock_set( &time );
|
||||
directive_failed( status, "rtems_clock_set" );
|
||||
|
||||
Task_name[ 1 ] = rtems_build_name( 'T', 'A', '1', ' ' );
|
||||
Task_name[ 2 ] = rtems_build_name( 'T', 'A', '2', ' ' );
|
||||
Task_name[ 3 ] = rtems_build_name( 'T', 'A', '3', ' ' );
|
||||
|
||||
status = rtems_task_create(
|
||||
Task_name[ 1 ],
|
||||
1,
|
||||
RTEMS_MINIMUM_STACK_SIZE * 2,
|
||||
RTEMS_INTERRUPT_LEVEL(31),
|
||||
RTEMS_DEFAULT_ATTRIBUTES,
|
||||
&Task_id[ 1 ]
|
||||
);
|
||||
directive_failed( status, "rtems_task_create of TA1" );
|
||||
|
||||
status = rtems_task_create(
|
||||
Task_name[ 2 ],
|
||||
1,
|
||||
RTEMS_MINIMUM_STACK_SIZE * 2,
|
||||
RTEMS_DEFAULT_MODES,
|
||||
RTEMS_DEFAULT_ATTRIBUTES,
|
||||
&Task_id[ 2 ]
|
||||
);
|
||||
directive_failed( status, "rtems_task_create of TA2" );
|
||||
|
||||
status = rtems_task_create(
|
||||
Task_name[ 3 ],
|
||||
1,
|
||||
RTEMS_MINIMUM_STACK_SIZE * 3,
|
||||
RTEMS_DEFAULT_MODES,
|
||||
RTEMS_DEFAULT_ATTRIBUTES,
|
||||
&Task_id[ 3 ]
|
||||
);
|
||||
directive_failed( status, "rtems_task_create of TA3" );
|
||||
|
||||
status = rtems_task_start( Task_id[ 1 ], Task_1_through_3, 0 );
|
||||
directive_failed( status, "rtems_task_start of TA1" );
|
||||
|
||||
status = rtems_task_start( Task_id[ 2 ], Task_1_through_3, 0 );
|
||||
directive_failed( status, "rtems_task_start of TA2" );
|
||||
|
||||
status = rtems_task_start( Task_id[ 3 ], Task_1_through_3, 0 );
|
||||
directive_failed( status, "rtems_task_start of TA3" );
|
||||
|
||||
status = rtems_task_delete( RTEMS_SELF );
|
||||
directive_failed( status, "rtems_task_delete of RTEMS_SELF" );
|
||||
}
|
||||
47
testsuites/sptests/spcbssched01/spcbssched01.doc
Normal file
47
testsuites/sptests/spcbssched01/spcbssched01.doc
Normal file
@@ -0,0 +1,47 @@
|
||||
#
|
||||
# $Id$
|
||||
#
|
||||
# COPYRIGHT (c) 1989-1999.
|
||||
# On-Line Applications Research Corporation (OAR).
|
||||
#
|
||||
# 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.
|
||||
#
|
||||
|
||||
This file describes the directives and concepts tested by this test set.
|
||||
|
||||
test set name: spcbssched01
|
||||
|
||||
directives:
|
||||
ex_init, ex_start, t_create, t_start, tm_tick, i_return, t_ident,
|
||||
tm_set, tm_get, tm_wkafter
|
||||
|
||||
concepts:
|
||||
|
||||
This test is identical to sp01 but for CBS-based scheduling:
|
||||
|
||||
a. Verifies system can create and start both the executive's system
|
||||
initialization and idle task.
|
||||
|
||||
b. Verifies executive can swap between three application tasks at the
|
||||
same priority and the executive's internal idle task.
|
||||
|
||||
c. Verifies can print strings to the CRT on port 2 of the mvme136 board
|
||||
using Print and Println in the board support package.
|
||||
|
||||
d. Verifies interrupt handler can handle a task switch from an interrupt
|
||||
as specified with the i_return directive.
|
||||
|
||||
e. Verifies executive initialization performed correctly.
|
||||
|
||||
f. Verifies the executive trap handler except for the halt function.
|
||||
|
||||
g. Verifies that a task can get the task identification number of itself.
|
||||
|
||||
h. Verifies implementation of SuperCore TOD_MILLISECONDS_TO_TICKS. Normal
|
||||
computation in applications is via a macro at the Classic API level.
|
||||
|
||||
output:
|
||||
"TA1" is printed once every 5 seconds. "TA2" is printed once
|
||||
every 10 seconds. "TA3" is printed once every 15 seconds.
|
||||
16
testsuites/sptests/spcbssched01/spcbssched01.scn
Normal file
16
testsuites/sptests/spcbssched01/spcbssched01.scn
Normal file
@@ -0,0 +1,16 @@
|
||||
*** CBS SCHEDULER TEST 1 ***
|
||||
TA1 - rtems_clock_get_tod - 09:00:00 12/31/1988
|
||||
TA2 - rtems_clock_get_tod - 09:00:00 12/31/1988
|
||||
TA3 - rtems_clock_get_tod - 09:00:00 12/31/1988
|
||||
TA1 - rtems_clock_get_tod - 09:00:05 12/31/1988
|
||||
TA1 - rtems_clock_get_tod - 09:00:10 12/31/1988
|
||||
TA2 - rtems_clock_get_tod - 09:00:10 12/31/1988
|
||||
TA1 - rtems_clock_get_tod - 09:00:15 12/31/1988
|
||||
TA3 - rtems_clock_get_tod - 09:00:15 12/31/1988
|
||||
TA1 - rtems_clock_get_tod - 09:00:20 12/31/1988
|
||||
TA2 - rtems_clock_get_tod - 09:00:20 12/31/1988
|
||||
TA1 - rtems_clock_get_tod - 09:00:25 12/31/1988
|
||||
TA1 - rtems_clock_get_tod - 09:00:30 12/31/1988
|
||||
TA3 - rtems_clock_get_tod - 09:00:30 12/31/1988
|
||||
TA2 - rtems_clock_get_tod - 09:00:30 12/31/1988
|
||||
*** END OF CBS SCHEDULER TEST 1 ***
|
||||
47
testsuites/sptests/spcbssched01/system.h
Normal file
47
testsuites/sptests/spcbssched01/system.h
Normal file
@@ -0,0 +1,47 @@
|
||||
/* system.h
|
||||
*
|
||||
* This include file contains information that is included in every
|
||||
* function in the test set.
|
||||
*
|
||||
* COPYRIGHT (c) 1989-1999.
|
||||
* On-Line Applications Research Corporation (OAR).
|
||||
*
|
||||
* 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$
|
||||
*/
|
||||
|
||||
#include <tmacros.h>
|
||||
|
||||
/* functions */
|
||||
|
||||
rtems_task Init(
|
||||
rtems_task_argument argument
|
||||
);
|
||||
|
||||
rtems_task Task_1_through_3(
|
||||
rtems_task_argument argument
|
||||
);
|
||||
|
||||
/* configuration information */
|
||||
|
||||
#define CONFIGURE_SCHEDULER_CBS
|
||||
|
||||
#define CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER
|
||||
#define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER
|
||||
|
||||
#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
|
||||
|
||||
#define CONFIGURE_EXTRA_TASK_STACKS (4 * RTEMS_MINIMUM_STACK_SIZE)
|
||||
#define CONFIGURE_MAXIMUM_TASKS 4
|
||||
|
||||
#include <rtems/confdefs.h>
|
||||
|
||||
/* global variables */
|
||||
|
||||
TEST_EXTERN rtems_id Task_id[ 4 ]; /* array of task ids */
|
||||
TEST_EXTERN rtems_name Task_name[ 4 ]; /* array of task names */
|
||||
|
||||
/* end of include file */
|
||||
57
testsuites/sptests/spcbssched01/task1.c
Normal file
57
testsuites/sptests/spcbssched01/task1.c
Normal file
@@ -0,0 +1,57 @@
|
||||
/* Task_1_through_3
|
||||
*
|
||||
* This routine serves as a test task. It verifies the basic task
|
||||
* switching capabilities of the executive.
|
||||
*
|
||||
* Input parameters:
|
||||
* argument - task argument
|
||||
*
|
||||
* Output parameters: NONE
|
||||
*
|
||||
* COPYRIGHT (c) 1989-1999.
|
||||
* On-Line Applications Research Corporation (OAR).
|
||||
*
|
||||
* 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$
|
||||
*/
|
||||
|
||||
#include "system.h"
|
||||
|
||||
rtems_task Task_1_through_3(
|
||||
rtems_task_argument argument
|
||||
)
|
||||
{
|
||||
rtems_id tid;
|
||||
rtems_time_of_day time;
|
||||
rtems_status_code status;
|
||||
rtems_interval ticks;
|
||||
|
||||
status = rtems_task_ident( RTEMS_SELF, RTEMS_SEARCH_ALL_NODES, &tid );
|
||||
directive_failed( status, "rtems_task_ident" );
|
||||
|
||||
/*
|
||||
* Use TOD_MILLISECONDS_TO_TICKS not RTEMS_MILLISECONDS_TO_TICKS to
|
||||
* test C implementation in SuperCore -- not macro version used
|
||||
* everywhere else.
|
||||
*/
|
||||
ticks = TOD_MILLISECONDS_TO_TICKS( task_number( tid ) * 5 * 1000 );
|
||||
|
||||
while( FOREVER ) {
|
||||
status = rtems_clock_get_tod( &time );
|
||||
directive_failed( status, "rtems_clock_get_tod" );
|
||||
|
||||
if ( time.second >= 35 ) {
|
||||
puts( "*** END OF CBS SCHEDULER TEST 1 ***" );
|
||||
rtems_test_exit( 0 );
|
||||
}
|
||||
|
||||
put_name( Task_name[ task_number( tid ) ], FALSE );
|
||||
print_time( " - rtems_clock_get_tod - ", &time, "\n" );
|
||||
|
||||
status = rtems_task_wake_after( ticks );
|
||||
directive_failed( status, "rtems_task_wake_after" );
|
||||
}
|
||||
}
|
||||
2
testsuites/sptests/spcbssched02/.cvsignore
Normal file
2
testsuites/sptests/spcbssched02/.cvsignore
Normal file
@@ -0,0 +1,2 @@
|
||||
Makefile
|
||||
Makefile.in
|
||||
28
testsuites/sptests/spcbssched02/Makefile.am
Normal file
28
testsuites/sptests/spcbssched02/Makefile.am
Normal file
@@ -0,0 +1,28 @@
|
||||
##
|
||||
## $Id$
|
||||
##
|
||||
|
||||
MANAGERS = io rate_monotonic semaphore clock
|
||||
|
||||
rtems_tests_PROGRAMS = spcbssched02
|
||||
spcbssched02_SOURCES = init.c task_periodic.c system.h
|
||||
|
||||
dist_rtems_tests_DATA = spcbssched02.scn
|
||||
dist_rtems_tests_DATA += spcbssched02.doc
|
||||
|
||||
include $(RTEMS_ROOT)/make/custom/@RTEMS_BSP@.cfg
|
||||
include $(top_srcdir)/../automake/compile.am
|
||||
include $(top_srcdir)/../automake/leaf.am
|
||||
|
||||
spcbssched02_LDADD = $(MANAGERS_NOT_WANTED:%=$(PROJECT_LIB)/no-%.rel)
|
||||
|
||||
AM_CPPFLAGS += -I$(top_srcdir)/../support/include
|
||||
|
||||
LINK_OBJS = $(spcbssched02_OBJECTS) $(spcbssched02_LDADD)
|
||||
LINK_LIBS = $(spcbssched02_LDLIBS)
|
||||
|
||||
spcbssched02$(EXEEXT): $(spcbssched02_OBJECTS) $(spcbssched02_DEPENDENCIES)
|
||||
@rm -f spcbssched02$(EXEEXT)
|
||||
$(make-exe)
|
||||
|
||||
include $(top_srcdir)/../automake/local.am
|
||||
227
testsuites/sptests/spcbssched02/init.c
Normal file
227
testsuites/sptests/spcbssched02/init.c
Normal file
@@ -0,0 +1,227 @@
|
||||
/* Init
|
||||
*
|
||||
* This routine is the initialization task for this test program.
|
||||
* It is a user initialization task and has the responsibility for creating
|
||||
* and starting the tasks that make up the test. If the time of day
|
||||
* clock is required for the test, it should also be set to a known
|
||||
* value by this function.
|
||||
*
|
||||
* Input parameters:
|
||||
* argument - task argument
|
||||
*
|
||||
* Output parameters: NONE
|
||||
*
|
||||
* 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$
|
||||
*/
|
||||
|
||||
#define CONFIGURE_INIT
|
||||
#include "system.h"
|
||||
|
||||
rtems_task Init(
|
||||
rtems_task_argument argument
|
||||
)
|
||||
{
|
||||
rtems_status_code status;
|
||||
rtems_cbs_server_id server_id, server_id2;
|
||||
time_t approved_budget, exec_time, abs_time, remaining_budget;
|
||||
rtems_cbs_parameters params, params1, params2, params3, params4;
|
||||
|
||||
Priority = 30;
|
||||
Period = 30;
|
||||
Execution = 10;
|
||||
Phase = 0;
|
||||
|
||||
params.deadline = 1;
|
||||
params.budget = 1;
|
||||
|
||||
params1 = params2 = params3 = params4 = params;
|
||||
params1.budget = -1;
|
||||
params2.budget = SCHEDULER_EDF_PRIO_MSB + 1;
|
||||
params3.deadline = -1;
|
||||
params4.deadline = SCHEDULER_EDF_PRIO_MSB + 1;
|
||||
|
||||
puts( "\n\n*** TEST CBS SCHEDULER 2 ***" );
|
||||
|
||||
Task_name = rtems_build_name( 'P', 'T', '1', ' ' );
|
||||
|
||||
status = rtems_task_create(
|
||||
Task_name,
|
||||
Priority,
|
||||
RTEMS_MINIMUM_STACK_SIZE * 4,
|
||||
RTEMS_DEFAULT_MODES,
|
||||
RTEMS_DEFAULT_ATTRIBUTES,
|
||||
&Task_id
|
||||
);
|
||||
directive_failed( status, "rtems_task_create loop" );
|
||||
|
||||
printf( "Init: Initializing the CBS\n" );
|
||||
if ( rtems_cbs_initialize() )
|
||||
printf( "ERROR: CBS INITIALIZATION FAILED\n" );
|
||||
|
||||
/* Error checks for Create server and Destroy server */
|
||||
printf( "Init: Create server and Destroy server\n" );
|
||||
if ( rtems_cbs_destroy_server( -5 ) !=
|
||||
SCHEDULER_CBS_ERROR_INVALID_PARAMETER )
|
||||
printf( "ERROR: DESTROY SERVER PASSED UNEXPECTEDLY\n" );
|
||||
if ( rtems_cbs_destroy_server( 5 ) !=
|
||||
SCHEDULER_CBS_ERROR_INVALID_PARAMETER )
|
||||
printf( "ERROR: DESTROY SERVER PASSED UNEXPECTEDLY\n" );
|
||||
if ( rtems_cbs_destroy_server( 0 ) != SCHEDULER_CBS_ERROR_NOSERVER )
|
||||
printf( "ERROR: DESTROY SERVER PASSED UNEXPECTEDLY\n" );
|
||||
if ( rtems_cbs_create_server( ¶ms1, NULL, &server_id ) !=
|
||||
SCHEDULER_CBS_ERROR_INVALID_PARAMETER )
|
||||
printf( "ERROR: CREATE SERVER PASSED UNEXPECTEDLY\n" );
|
||||
if ( rtems_cbs_create_server( ¶ms2, NULL, &server_id ) !=
|
||||
SCHEDULER_CBS_ERROR_INVALID_PARAMETER )
|
||||
printf( "ERROR: CREATE SERVER PASSED UNEXPECTEDLY\n" );
|
||||
if ( rtems_cbs_create_server( ¶ms3, NULL, &server_id ) !=
|
||||
SCHEDULER_CBS_ERROR_INVALID_PARAMETER )
|
||||
printf( "ERROR: CREATE SERVER PASSED UNEXPECTEDLY\n" );
|
||||
if ( rtems_cbs_create_server( ¶ms4, NULL, &server_id ) !=
|
||||
SCHEDULER_CBS_ERROR_INVALID_PARAMETER )
|
||||
printf( "ERROR: CREATE SERVER PASSED UNEXPECTEDLY\n" );
|
||||
if ( rtems_cbs_create_server( ¶ms, NULL, &server_id2 ) )
|
||||
printf( "ERROR: CREATE SERVER FAILED\n" );
|
||||
if ( rtems_cbs_create_server( ¶ms, NULL, &server_id ) )
|
||||
printf( "ERROR: CREATE SERVER FAILED\n" );
|
||||
if ( rtems_cbs_create_server( ¶ms, NULL, &server_id ) !=
|
||||
SCHEDULER_CBS_ERROR_FULL )
|
||||
printf( "ERROR: CREATE SERVER PASSED UNEXPECTEDLY\n" );
|
||||
|
||||
/* Error checks for Attach thread and Detach thread */
|
||||
printf( "Init: Attach thread\n" );
|
||||
if ( rtems_cbs_attach_thread( -5, RTEMS_SELF ) !=
|
||||
SCHEDULER_CBS_ERROR_INVALID_PARAMETER )
|
||||
printf( "ERROR: ATTACH THREAD PASSED UNEXPECTEDLY\n" );
|
||||
if ( rtems_cbs_attach_thread( 5, RTEMS_SELF ) !=
|
||||
SCHEDULER_CBS_ERROR_INVALID_PARAMETER )
|
||||
printf( "ERROR: ATTACH THREAD PASSED UNEXPECTEDLY\n" );
|
||||
if ( rtems_cbs_attach_thread( server_id, 1234 ) !=
|
||||
SCHEDULER_CBS_ERROR_INVALID_PARAMETER )
|
||||
printf( "ERROR: ATTACH THREAD PASSED UNEXPECTEDLY\n" );
|
||||
if ( rtems_cbs_attach_thread( server_id, RTEMS_SELF ) )
|
||||
printf( "ERROR: ATTACH THREAD FAILED\n" );
|
||||
if ( rtems_cbs_attach_thread( server_id, RTEMS_SELF ) !=
|
||||
SCHEDULER_CBS_ERROR_FULL )
|
||||
printf( "ERROR: ATTACH THREAD AGAIN PASSED UNEXPECTEDLY\n" );
|
||||
if ( rtems_cbs_attach_thread( server_id, Task_id ) !=
|
||||
SCHEDULER_CBS_ERROR_FULL )
|
||||
printf( "ERROR: ATTACH THREAD TO FULL SERVER PASSED UNEXPECTEDLY \n" );
|
||||
if ( rtems_cbs_destroy_server( server_id ) )
|
||||
printf( "ERROR: DESTROY SERVER WITH THREAD ATTACHED FAILED\n" );
|
||||
if ( rtems_cbs_attach_thread( server_id, RTEMS_SELF ) !=
|
||||
SCHEDULER_CBS_ERROR_NOSERVER )
|
||||
printf( "ERROR: ATTACH THREAD PASSED UNEXPECTEDLY\n" );
|
||||
|
||||
printf( "Init: Detach thread\n" );
|
||||
if ( rtems_cbs_detach_thread( -5, RTEMS_SELF ) !=
|
||||
SCHEDULER_CBS_ERROR_INVALID_PARAMETER )
|
||||
printf( "ERROR: DETACH THREAD PASSED UNEXPECTEDLY\n" );
|
||||
if ( rtems_cbs_detach_thread( 5, RTEMS_SELF ) !=
|
||||
SCHEDULER_CBS_ERROR_INVALID_PARAMETER )
|
||||
printf( "ERROR: DETACH THREAD PASSED UNEXPECTEDLY\n" );
|
||||
if ( rtems_cbs_detach_thread( server_id2, 1234 ) !=
|
||||
SCHEDULER_CBS_ERROR_INVALID_PARAMETER )
|
||||
printf( "ERROR: DETACH THREAD PASSED UNEXPECTEDLY \n" );
|
||||
if ( rtems_cbs_detach_thread( server_id, RTEMS_SELF ) !=
|
||||
SCHEDULER_CBS_ERROR_NOSERVER )
|
||||
printf( "ERROR: DETACH THREAD PASSED UNEXPECTEDLY4\n" );
|
||||
rtems_cbs_destroy_server( server_id2 );
|
||||
|
||||
/* Error checks for Set parameters and Get parameters */
|
||||
printf( "Init: Set parameters and Get parameters\n" );
|
||||
if ( rtems_cbs_set_parameters( -5, ¶ms ) !=
|
||||
SCHEDULER_CBS_ERROR_INVALID_PARAMETER )
|
||||
printf( "ERROR: SET PARAMETERS PASSED UNEXPECTEDLY\n" );
|
||||
if ( rtems_cbs_set_parameters( 5, ¶ms ) !=
|
||||
SCHEDULER_CBS_ERROR_INVALID_PARAMETER )
|
||||
printf( "ERROR: SET PARAMETERS PASSED UNEXPECTEDLY\n" );
|
||||
if ( rtems_cbs_set_parameters( server_id, ¶ms ) !=
|
||||
SCHEDULER_CBS_ERROR_NOSERVER )
|
||||
printf( "ERROR: SET PARAMETERS PASSED UNEXPECTEDLY\n" );
|
||||
|
||||
if ( rtems_cbs_get_parameters( -5, ¶ms ) !=
|
||||
SCHEDULER_CBS_ERROR_INVALID_PARAMETER )
|
||||
printf( "ERROR: GET PARAMETERS PASSED UNEXPECTEDLY\n" );
|
||||
if ( rtems_cbs_get_parameters( 5, ¶ms ) !=
|
||||
SCHEDULER_CBS_ERROR_INVALID_PARAMETER )
|
||||
printf( "ERROR: GET PARAMETERS PASSED UNEXPECTEDLY\n" );
|
||||
if ( rtems_cbs_get_parameters( server_id, ¶ms ) !=
|
||||
SCHEDULER_CBS_ERROR_NOSERVER )
|
||||
printf( "ERROR: GET PARAMETERS PASSED UNEXPECTEDLY\n" );
|
||||
|
||||
if ( rtems_cbs_set_parameters( server_id, ¶ms1 ) !=
|
||||
SCHEDULER_CBS_ERROR_INVALID_PARAMETER )
|
||||
printf( "ERROR: SET PARAMETERS PASSED UNEXPECTEDLY\n" );
|
||||
if ( rtems_cbs_set_parameters( server_id, ¶ms2 ) !=
|
||||
SCHEDULER_CBS_ERROR_INVALID_PARAMETER )
|
||||
printf( "ERROR: SET PARAMETERS PASSED UNEXPECTEDLY\n" );
|
||||
if ( rtems_cbs_set_parameters( server_id, ¶ms3 ) !=
|
||||
SCHEDULER_CBS_ERROR_INVALID_PARAMETER )
|
||||
printf( "ERROR: SET PARAMETERS PASSED UNEXPECTEDLY\n" );
|
||||
if ( rtems_cbs_set_parameters( server_id, ¶ms4 ) !=
|
||||
SCHEDULER_CBS_ERROR_INVALID_PARAMETER )
|
||||
printf( "ERROR: SET PARAMETERS PASSED UNEXPECTEDLY\n" );
|
||||
|
||||
/* Error checks for Get server id */
|
||||
printf( "Init: Get server id\n" );
|
||||
if ( rtems_cbs_get_server_id( RTEMS_SELF, &server_id ) !=
|
||||
SCHEDULER_CBS_ERROR_NOSERVER )
|
||||
printf( "ERROR: GET SERVER ID PASSED UNEXPECTEDLY\n" );
|
||||
|
||||
/* Error checks for Get approved budget */
|
||||
printf( "Init: Get approved budget\n" );
|
||||
if ( rtems_cbs_get_approved_budget( -5, &approved_budget ) !=
|
||||
SCHEDULER_CBS_ERROR_INVALID_PARAMETER )
|
||||
printf( "ERROR: GET APPROVED BUDGET PASSED UNEXPECTEDLY\n" );
|
||||
if ( rtems_cbs_get_approved_budget( 5, &approved_budget ) !=
|
||||
SCHEDULER_CBS_ERROR_INVALID_PARAMETER )
|
||||
printf( "ERROR: GET APPROVED BUDGET PASSED UNEXPECTEDLY\n" );
|
||||
if ( rtems_cbs_get_approved_budget( server_id, &approved_budget ) !=
|
||||
SCHEDULER_CBS_ERROR_NOSERVER )
|
||||
printf( "ERROR: GET APPROVED BUDGET PASSED UNEXPECTEDLY\n" );
|
||||
|
||||
/* Error checks for Get remaining budget */
|
||||
printf( "Init: Get remaining budget\n" );
|
||||
if ( rtems_cbs_get_remaining_budget( -5, &remaining_budget ) !=
|
||||
SCHEDULER_CBS_ERROR_INVALID_PARAMETER )
|
||||
printf( "ERROR: GET REMAINING BUDGET PASSED UNEXPECTEDLY\n" );
|
||||
if ( rtems_cbs_get_remaining_budget( 5, &remaining_budget ) !=
|
||||
SCHEDULER_CBS_ERROR_INVALID_PARAMETER )
|
||||
printf( "ERROR: GET REMAINING BUDGET PASSED UNEXPECTEDLY\n" );
|
||||
if ( rtems_cbs_get_remaining_budget( server_id, &remaining_budget ) !=
|
||||
SCHEDULER_CBS_ERROR_NOSERVER )
|
||||
printf( "ERROR: GET REMAINING BUDGET PASSED UNEXPECTEDLY\n" );
|
||||
|
||||
/* Error checks for Get execution time */
|
||||
printf( "Init: Get execution time\n" );
|
||||
if ( rtems_cbs_get_execution_time( -5, &exec_time, &abs_time ) !=
|
||||
SCHEDULER_CBS_ERROR_INVALID_PARAMETER )
|
||||
printf( "ERROR: GET EXECUTION TIME PASSED UNEXPECTEDLY\n" );
|
||||
if ( rtems_cbs_get_execution_time( 5, &exec_time, &abs_time ) !=
|
||||
SCHEDULER_CBS_ERROR_INVALID_PARAMETER )
|
||||
printf( "ERROR: GET EXECUTION TIME PASSED UNEXPECTEDLY\n" );
|
||||
if ( rtems_cbs_get_execution_time( server_id, &exec_time, &abs_time ) !=
|
||||
SCHEDULER_CBS_ERROR_NOSERVER )
|
||||
printf( "ERROR: GET EXECUTION TIME PASSED UNEXPECTEDLY\n" );
|
||||
|
||||
/* Restart CBS library */
|
||||
printf( "Init: Cleaning up CBS\n" );
|
||||
if ( rtems_cbs_cleanup() )
|
||||
printf( "ERROR: CBS CLEANUP FAILED\n" );
|
||||
printf( "Init: Initializing the CBS\n" );
|
||||
if ( rtems_cbs_initialize() )
|
||||
printf( "ERROR: CBS INITIALIZATION FAILED\n" );
|
||||
|
||||
/* Start periodic task */
|
||||
printf( "Init: Starting periodic task\n" );
|
||||
status = rtems_task_start( Task_id, Task_Periodic, 1 );
|
||||
directive_failed( status, "rtems_task_start periodic" );
|
||||
|
||||
status = rtems_task_delete( RTEMS_SELF );
|
||||
directive_failed( status, "rtems_task_delete of RTEMS_SELF" );
|
||||
}
|
||||
22
testsuites/sptests/spcbssched02/spcbssched02.doc
Normal file
22
testsuites/sptests/spcbssched02/spcbssched02.doc
Normal file
@@ -0,0 +1,22 @@
|
||||
#
|
||||
# $Id$
|
||||
#
|
||||
# COPYRIGHT (c) 1989-1999.
|
||||
# On-Line Applications Research Corporation (OAR).
|
||||
#
|
||||
# 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.
|
||||
#
|
||||
|
||||
|
||||
This file describes the directives and concepts tested by this test set.
|
||||
|
||||
test set name: spcbssched02
|
||||
|
||||
directives:
|
||||
|
||||
|
||||
concepts:
|
||||
|
||||
a. Verifies CBS library functionality.
|
||||
30
testsuites/sptests/spcbssched02/spcbssched02.scn
Normal file
30
testsuites/sptests/spcbssched02/spcbssched02.scn
Normal file
@@ -0,0 +1,30 @@
|
||||
*** TEST CBS SCHEDULER 2 ***
|
||||
Init: Initializing the CBS
|
||||
Init: Create server and Destroy server
|
||||
Init: Attach thread
|
||||
Init: Detach thread
|
||||
Init: Set parameters and Get parameters
|
||||
Init: Get server id
|
||||
Init: Get approved budget
|
||||
Init: Get remaining budget
|
||||
Init: Get execution time
|
||||
Init: Cleaning up CBS
|
||||
Init: Initializing the CBS
|
||||
Init: Starting periodic task
|
||||
Periodic task: Create server and Attach thread
|
||||
Periodic task: ID and Get parameters
|
||||
Periodic task: Detach thread and Destroy server
|
||||
Periodic task: Remaining budget and Execution time
|
||||
Periodic task: Set parameters
|
||||
Periodic task: Approved budget
|
||||
Periodic task: Starting periodic behavior
|
||||
P1-S ticks:1
|
||||
P1-F ticks:11
|
||||
P1-S ticks:31
|
||||
P1-F ticks:41
|
||||
P1-S ticks:61
|
||||
P1-F ticks:71
|
||||
P1-S ticks:91
|
||||
P1-F ticks:101
|
||||
P1-S ticks:121
|
||||
*** END OF TEST CBS SCHEDULER 2 ***
|
||||
62
testsuites/sptests/spcbssched02/system.h
Normal file
62
testsuites/sptests/spcbssched02/system.h
Normal file
@@ -0,0 +1,62 @@
|
||||
/* system.h
|
||||
*
|
||||
* This include file contains information that is included in every
|
||||
* function in the test set.
|
||||
*
|
||||
* COPYRIGHT (c) 1989-1999.
|
||||
* On-Line Applications Research Corporation (OAR).
|
||||
*
|
||||
* 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$
|
||||
*/
|
||||
|
||||
#include <tmacros.h>
|
||||
|
||||
/* functions */
|
||||
|
||||
rtems_task Init(
|
||||
rtems_task_argument argument
|
||||
);
|
||||
|
||||
rtems_task Task_Periodic(
|
||||
rtems_task_argument argument
|
||||
);
|
||||
|
||||
/* configuration information */
|
||||
|
||||
#define CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER
|
||||
#define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER
|
||||
|
||||
#define CONFIGURE_MICROSECONDS_PER_TICK 100000
|
||||
|
||||
#define CONFIGURE_MAXIMUM_TASKS 2
|
||||
#define CONFIGURE_MAXIMUM_PERIODS 10
|
||||
|
||||
#define CONFIGURE_INIT_TASK_PRIORITY 100
|
||||
#define CONFIGURE_INIT_TASK_INITIAL_MODES RTEMS_DEFAULT_MODES
|
||||
#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
|
||||
|
||||
#define CONFIGURE_EXTRA_TASK_STACKS (6 * 4 * RTEMS_MINIMUM_STACK_SIZE)
|
||||
|
||||
#define CONFIGURE_SCHEDULER_CBS
|
||||
|
||||
#include <rtems/confdefs.h>
|
||||
|
||||
#include <rtems/rtems/clock.h>
|
||||
#include <rtems/score/isr.h>
|
||||
#include <rtems/rtems/intr.h>
|
||||
#include <rtems/cbs.h>
|
||||
|
||||
/* global variables */
|
||||
|
||||
rtems_id Task_id;
|
||||
rtems_name Task_name;
|
||||
rtems_task_priority Priority;
|
||||
time_t Period;
|
||||
time_t Execution;
|
||||
time_t Phase;
|
||||
|
||||
/* end of include file */
|
||||
138
testsuites/sptests/spcbssched02/task_periodic.c
Normal file
138
testsuites/sptests/spcbssched02/task_periodic.c
Normal file
@@ -0,0 +1,138 @@
|
||||
/* Tasks_Periodic
|
||||
*
|
||||
* This routine serves as a test task for the CBS scheduler
|
||||
* implementation.
|
||||
*
|
||||
* Input parameters:
|
||||
* argument - task argument
|
||||
*
|
||||
* Output parameters: NONE
|
||||
*
|
||||
* 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$
|
||||
*/
|
||||
|
||||
#include "system.h"
|
||||
|
||||
rtems_task Task_Periodic(
|
||||
rtems_task_argument argument
|
||||
)
|
||||
{
|
||||
rtems_id rmid;
|
||||
rtems_status_code status;
|
||||
|
||||
time_t approved_budget, exec_time, abs_time, remaining_budget;
|
||||
|
||||
int start, stop, now;
|
||||
|
||||
rtems_cbs_server_id server_id, tsid;
|
||||
rtems_cbs_parameters params, tparams;
|
||||
|
||||
params.deadline = Period;
|
||||
params.budget = Execution+1;
|
||||
|
||||
printf( "Periodic task: Create server and Attach thread\n" );
|
||||
if ( rtems_cbs_create_server( ¶ms, NULL, &server_id ) )
|
||||
printf( "ERROR: CREATE SERVER FAILED\n" );
|
||||
if ( rtems_cbs_attach_thread( server_id, Task_id ) )
|
||||
printf( "ERROR: ATTACH THREAD FAILED\n" );
|
||||
|
||||
printf( "Periodic task: ID and Get parameters\n" );
|
||||
if ( rtems_cbs_get_server_id( Task_id, &tsid ) )
|
||||
printf( "ERROR: GET SERVER ID FAILED\n" );
|
||||
if ( tsid != server_id )
|
||||
printf( "ERROR: SERVER ID MISMATCH\n" );
|
||||
if ( rtems_cbs_get_parameters( server_id, &tparams ) )
|
||||
printf( "ERROR: GET PARAMETERS FAILED\n" );
|
||||
if ( params.deadline != tparams.deadline ||
|
||||
params.budget != tparams.budget )
|
||||
printf( "ERROR: PARAMETERS MISMATCH\n" );
|
||||
|
||||
printf( "Periodic task: Detach thread and Destroy server\n" );
|
||||
if ( rtems_cbs_detach_thread( server_id, Task_id ) )
|
||||
printf( "ERROR: DETACH THREAD FAILED\n" );
|
||||
if ( rtems_cbs_destroy_server( server_id ) )
|
||||
printf( "ERROR: DESTROY SERVER FAILED\n" );
|
||||
if ( rtems_cbs_create_server( ¶ms, NULL, &server_id ) )
|
||||
printf( "ERROR: CREATE SERVER FAILED\n" );
|
||||
|
||||
printf( "Periodic task: Remaining budget and Execution time\n" );
|
||||
if ( rtems_cbs_get_remaining_budget( server_id, &remaining_budget ) )
|
||||
printf( "ERROR: GET REMAINING BUDGET FAILED\n" );
|
||||
if ( remaining_budget != params.budget )
|
||||
printf( "ERROR: REMAINING BUDGET MISMATCH\n" );
|
||||
if ( rtems_cbs_get_execution_time( server_id, &exec_time, &abs_time ) )
|
||||
printf( "ERROR: GET EXECUTION TIME FAILED\n" );
|
||||
|
||||
printf( "Periodic task: Set parameters\n" );
|
||||
if ( rtems_cbs_attach_thread( server_id, Task_id ) )
|
||||
printf( "ERROR: ATTACH THREAD FAILED\n" );
|
||||
params.deadline = Period * 2;
|
||||
params.budget = Execution * 2 +1;
|
||||
if ( rtems_cbs_set_parameters( server_id, ¶ms ) )
|
||||
printf( "ERROR: SET PARAMS FAILED\n" );
|
||||
if ( rtems_cbs_get_parameters( server_id, &tparams ) )
|
||||
printf( "ERROR: GET PARAMS FAILED\n" );
|
||||
if ( params.deadline != tparams.deadline ||
|
||||
params.budget != tparams.budget )
|
||||
printf( "ERROR: PARAMS MISMATCH\n" );
|
||||
params.deadline = Period;
|
||||
params.budget = Execution+1;
|
||||
if ( rtems_cbs_set_parameters( server_id, ¶ms ) )
|
||||
printf( "ERROR: SET PARAMS FAILED\n" );
|
||||
if ( rtems_cbs_get_approved_budget( server_id, &approved_budget ) )
|
||||
printf( "ERROR: GET APPROVED BUDGET FAILED\n" );
|
||||
|
||||
printf( "Periodic task: Approved budget\n" );
|
||||
if ( approved_budget != params.budget )
|
||||
printf( "ERROR: APPROVED BUDGET MISMATCH\n" );
|
||||
|
||||
status = rtems_rate_monotonic_create( argument, &rmid );
|
||||
directive_failed( status, "rtems_rate_monotonic_create" );
|
||||
|
||||
/* Starting periodic behavior of the task */
|
||||
printf( "Periodic task: Starting periodic behavior\n" );
|
||||
status = rtems_task_wake_after( 1 + Phase );
|
||||
directive_failed( status, "rtems_task_wake_after" );
|
||||
|
||||
while ( FOREVER ) {
|
||||
if ( rtems_rate_monotonic_period(rmid, Period) == RTEMS_TIMEOUT )
|
||||
printf( "P%" PRIdPTR " - Deadline miss\n", argument );
|
||||
|
||||
rtems_clock_get( RTEMS_CLOCK_GET_TICKS_SINCE_BOOT, &start );
|
||||
printf( "P%" PRIdPTR "-S ticks:%d\n", argument, start );
|
||||
if ( start > 4*Period+Phase ) break; /* stop */
|
||||
/* active computing */
|
||||
while(FOREVER) {
|
||||
rtems_clock_get( RTEMS_CLOCK_GET_TICKS_SINCE_BOOT, &now );
|
||||
if ( now >= start + Execution ) break;
|
||||
|
||||
if ( rtems_cbs_get_execution_time( server_id, &exec_time, &abs_time ) )
|
||||
printf( "ERROR: GET EXECUTION TIME FAILED\n" );
|
||||
if ( rtems_cbs_get_remaining_budget( server_id, &remaining_budget) )
|
||||
printf( "ERROR: GET REMAINING BUDGET FAILED\n" );
|
||||
if ( (remaining_budget + exec_time) > (Execution + 1) ) {
|
||||
printf( "ERROR: REMAINING BUDGET AND EXECUTION TIME MISMATCH\n" );
|
||||
rtems_test_exit( 0 );
|
||||
}
|
||||
}
|
||||
rtems_clock_get( RTEMS_CLOCK_GET_TICKS_SINCE_BOOT, &stop );
|
||||
printf( "P%" PRIdPTR "-F ticks:%d\n", argument, stop );
|
||||
}
|
||||
|
||||
/* delete period and SELF */
|
||||
status = rtems_rate_monotonic_delete( rmid );
|
||||
if ( status != RTEMS_SUCCESSFUL ) {
|
||||
printf("rtems_rate_monotonic_delete failed with status of %d.\n", status);
|
||||
rtems_test_exit( 0 );
|
||||
}
|
||||
if ( rtems_cbs_cleanup() )
|
||||
printf( "ERROR: CBS CLEANUP\n" );
|
||||
|
||||
fflush(stdout);
|
||||
puts( "*** END OF TEST CBS SCHEDULER 2 ***" );
|
||||
rtems_test_exit( 0 );
|
||||
}
|
||||
2
testsuites/sptests/spcbssched03/.cvsignore
Normal file
2
testsuites/sptests/spcbssched03/.cvsignore
Normal file
@@ -0,0 +1,2 @@
|
||||
Makefile
|
||||
Makefile.in
|
||||
28
testsuites/sptests/spcbssched03/Makefile.am
Normal file
28
testsuites/sptests/spcbssched03/Makefile.am
Normal file
@@ -0,0 +1,28 @@
|
||||
##
|
||||
## $Id$
|
||||
##
|
||||
|
||||
MANAGERS = io rate_monotonic semaphore clock
|
||||
|
||||
rtems_tests_PROGRAMS = spcbssched03
|
||||
spcbssched03_SOURCES = init.c tasks_periodic.c tasks_aperiodic.c system.h cbsparams.h
|
||||
|
||||
dist_rtems_tests_DATA = spcbssched03.scn
|
||||
dist_rtems_tests_DATA += spcbssched03.doc
|
||||
|
||||
include $(RTEMS_ROOT)/make/custom/@RTEMS_BSP@.cfg
|
||||
include $(top_srcdir)/../automake/compile.am
|
||||
include $(top_srcdir)/../automake/leaf.am
|
||||
|
||||
spcbssched03_LDADD = $(MANAGERS_NOT_WANTED:%=$(PROJECT_LIB)/no-%.rel)
|
||||
|
||||
AM_CPPFLAGS += -I$(top_srcdir)/../support/include
|
||||
|
||||
LINK_OBJS = $(spcbssched03_OBJECTS) $(spcbssched03_LDADD)
|
||||
LINK_LIBS = $(spcbssched03_LDLIBS)
|
||||
|
||||
spcbssched03$(EXEEXT): $(spcbssched03_OBJECTS) $(spcbssched03_DEPENDENCIES)
|
||||
@rm -f spcbssched03$(EXEEXT)
|
||||
$(make-exe)
|
||||
|
||||
include $(top_srcdir)/../automake/local.am
|
||||
42
testsuites/sptests/spcbssched03/cbsparams.h
Normal file
42
testsuites/sptests/spcbssched03/cbsparams.h
Normal file
@@ -0,0 +1,42 @@
|
||||
/* cbsparams.h
|
||||
*
|
||||
* This include file contains information that is included in every
|
||||
* function in the test set.
|
||||
*
|
||||
* COPYRIGHT (c) 1989-1999.
|
||||
* On-Line Applications Research Corporation (OAR).
|
||||
*
|
||||
* 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$
|
||||
*/
|
||||
|
||||
/* This file was generated with the following parameters:
|
||||
-T 30,10,0 -T 40,10,0 -T 50,10,0 -T 70,10,0 -A 1,100,7 -A 100,5,4
|
||||
*/
|
||||
|
||||
#ifndef __CBSPARAMS_H_
|
||||
#define __CBSPARAMS_H_
|
||||
|
||||
#include "system.h"
|
||||
|
||||
rtems_task_priority Priorities[1+NUM_TASKS]= { 0, 30, 40, 50, 70, 254, 254 };
|
||||
|
||||
uint32_t Periods[1+NUM_PERIODIC_TASKS] = { 0, 30, 40, 50, 70 };
|
||||
|
||||
uint32_t Execution[1+NUM_TASKS] = { 0, 10, 10, 10, 10, 100, 5 };
|
||||
|
||||
uint32_t Phases[1+NUM_TASKS] = { 0, 0, 0, 0, 0, 7, 4 };
|
||||
|
||||
#define build_task_name() do { \
|
||||
Task_name[ 1 ] = rtems_build_name( 'P', 'T', '1', ' ' );\
|
||||
Task_name[ 2 ] = rtems_build_name( 'P', 'T', '2', ' ' );\
|
||||
Task_name[ 3 ] = rtems_build_name( 'P', 'T', '3', ' ' );\
|
||||
Task_name[ 4 ] = rtems_build_name( 'P', 'T', '4', ' ' );\
|
||||
Task_name[ 5 ] = rtems_build_name( 'A', 'T', '5', ' ' );\
|
||||
Task_name[ 6 ] = rtems_build_name( 'A', 'T', '6', ' ' );\
|
||||
} while(0)
|
||||
|
||||
#endif
|
||||
63
testsuites/sptests/spcbssched03/init.c
Normal file
63
testsuites/sptests/spcbssched03/init.c
Normal file
@@ -0,0 +1,63 @@
|
||||
/* Init
|
||||
*
|
||||
* This routine is the initialization task for this test program.
|
||||
* It is a user initialization task and has the responsibility for creating
|
||||
* and starting the tasks that make up the test. If the time of day
|
||||
* clock is required for the test, it should also be set to a known
|
||||
* value by this function.
|
||||
*
|
||||
* Input parameters:
|
||||
* argument - task argument
|
||||
*
|
||||
* Output parameters: NONE
|
||||
*
|
||||
* 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$
|
||||
*/
|
||||
|
||||
#define CONFIGURE_INIT
|
||||
#include "system.h"
|
||||
|
||||
#include "cbsparams.h"
|
||||
|
||||
rtems_task Init(
|
||||
rtems_task_argument argument
|
||||
)
|
||||
{
|
||||
uint32_t index;
|
||||
rtems_status_code status;
|
||||
|
||||
puts( "\n\n*** TEST CBS SCHEDULER 3 ***" );
|
||||
|
||||
build_task_name();
|
||||
|
||||
for ( index = 1 ; index <= NUM_TASKS ; index++ ) {
|
||||
status = rtems_task_create(
|
||||
Task_name[ index ],
|
||||
Priorities[ index ],
|
||||
RTEMS_MINIMUM_STACK_SIZE * 4,
|
||||
RTEMS_DEFAULT_MODES,
|
||||
RTEMS_DEFAULT_ATTRIBUTES,
|
||||
&Task_id[ index ]
|
||||
);
|
||||
directive_failed( status, "rtems_task_create loop" );
|
||||
}
|
||||
|
||||
rtems_cbs_initialize();
|
||||
|
||||
for ( index = 1 ; index <= NUM_PERIODIC_TASKS ; index++ ) {
|
||||
status = rtems_task_start( Task_id[ index ], Tasks_Periodic, index );
|
||||
directive_failed( status, "rtems_task_start loop" );
|
||||
}
|
||||
|
||||
for ( index = NUM_PERIODIC_TASKS+1 ; index <= NUM_TASKS ; index++ ) {
|
||||
status = rtems_task_start( Task_id[ index ], Tasks_Aperiodic, index );
|
||||
directive_failed( status, "rtems_task_start loop" );
|
||||
}
|
||||
|
||||
status = rtems_task_delete( RTEMS_SELF );
|
||||
directive_failed( status, "rtems_task_delete of RTEMS_SELF" );
|
||||
}
|
||||
22
testsuites/sptests/spcbssched03/spcbssched03.doc
Normal file
22
testsuites/sptests/spcbssched03/spcbssched03.doc
Normal file
@@ -0,0 +1,22 @@
|
||||
#
|
||||
# $Id$
|
||||
#
|
||||
# COPYRIGHT (c) 1989-1999.
|
||||
# On-Line Applications Research Corporation (OAR).
|
||||
#
|
||||
# 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.
|
||||
#
|
||||
|
||||
|
||||
This file describes the directives and concepts tested by this test set.
|
||||
|
||||
test set name: spcbssched03
|
||||
|
||||
directives:
|
||||
|
||||
|
||||
concepts:
|
||||
|
||||
a. Verifies CBS Scheduling behavior.
|
||||
170
testsuites/sptests/spcbssched03/spcbssched03.scn
Normal file
170
testsuites/sptests/spcbssched03/spcbssched03.scn
Normal file
@@ -0,0 +1,170 @@
|
||||
*** TEST CBS SCHEDULER 3 ***
|
||||
PT1 - rtems_rate_monotonic_create id = 0x42010001
|
||||
PT1 - rtems_rate_monotonic_ident id = 0x42010001
|
||||
PT1 - (0x42010001) period 30
|
||||
PT2 - rtems_rate_monotonic_create id = 0x42010002
|
||||
PT2 - rtems_rate_monotonic_ident id = 0x42010002
|
||||
PT2 - (0x42010002) period 40
|
||||
PT3 - rtems_rate_monotonic_create id = 0x42010003
|
||||
PT3 - rtems_rate_monotonic_ident id = 0x42010003
|
||||
PT3 - (0x42010003) period 50
|
||||
PT4 - rtems_rate_monotonic_create id = 0x42010004
|
||||
PT4 - rtems_rate_monotonic_ident id = 0x42010004
|
||||
PT4 - (0x42010004) period 70
|
||||
AT5 AT6 P1-S ticks:2
|
||||
P1-F ticks:12
|
||||
P2-S ticks:12
|
||||
P2-F ticks:22
|
||||
P3-S ticks:22
|
||||
P1-S ticks:32
|
||||
P1-F ticks:42
|
||||
P3-F ticks:42
|
||||
P4-S ticks:42
|
||||
P2-S ticks:52
|
||||
P2-F ticks:62
|
||||
P1-S ticks:62
|
||||
P1-F ticks:72
|
||||
P4-F ticks:72
|
||||
P3-S ticks:72
|
||||
P3-F ticks:82
|
||||
AT6-S ticks:82
|
||||
P6-F ticks:87
|
||||
Killing task 6
|
||||
AT5-S ticks:87
|
||||
P1-S ticks:92
|
||||
P1-F ticks:102
|
||||
P2-S ticks:102
|
||||
P2-F ticks:112
|
||||
P4-S ticks:112
|
||||
P1-S ticks:122
|
||||
P1-F ticks:132
|
||||
P3-S ticks:132
|
||||
P3-F ticks:142
|
||||
P2-S ticks:142
|
||||
P2-F ticks:152
|
||||
P4-F ticks:152
|
||||
P1-S ticks:152
|
||||
P1-F ticks:162
|
||||
P2-S ticks:172
|
||||
P2-F ticks:182
|
||||
P1-S ticks:182
|
||||
P1-F ticks:192
|
||||
P3-S ticks:192
|
||||
P3-F ticks:202
|
||||
P4-S ticks:202
|
||||
P1-S ticks:212
|
||||
P1-F ticks:222
|
||||
P4-F ticks:222
|
||||
P2-S ticks:222
|
||||
P2-F ticks:232
|
||||
P3-S ticks:232
|
||||
P3-F ticks:242
|
||||
P1-S ticks:242
|
||||
P1-F ticks:252
|
||||
P2-S ticks:252
|
||||
P2-F ticks:262
|
||||
P4-S ticks:262
|
||||
P1-S ticks:272
|
||||
P1-F ticks:282
|
||||
P3-S ticks:283
|
||||
P3-F ticks:293
|
||||
P2-S ticks:293
|
||||
P2-F ticks:303
|
||||
P1-S ticks:303
|
||||
P1-F ticks:313
|
||||
Signal overrun, fixing the task
|
||||
P4-F ticks:313
|
||||
P5-F ticks:313
|
||||
Killing task 5
|
||||
P3-S ticks:322
|
||||
P1-S ticks:332
|
||||
P1-F ticks:342
|
||||
P3-F ticks:342
|
||||
P2-S ticks:342
|
||||
P2-F ticks:352
|
||||
P4-S ticks:352
|
||||
P4-F ticks:362
|
||||
P1-S ticks:362
|
||||
P1-F ticks:372
|
||||
P2-S ticks:372
|
||||
P2-F ticks:382
|
||||
P3-S ticks:382
|
||||
P1-S ticks:392
|
||||
P1-F ticks:402
|
||||
P4-S ticks:402
|
||||
P2-S ticks:412
|
||||
P2-F ticks:422
|
||||
P1-S ticks:422
|
||||
P1-F ticks:432
|
||||
P4-F ticks:432
|
||||
P3-F ticks:432
|
||||
P1-S ticks:452
|
||||
P1-F ticks:462
|
||||
P2-S ticks:462
|
||||
P2-F ticks:472
|
||||
P4-S ticks:472
|
||||
P1-S ticks:482
|
||||
P1-F ticks:492
|
||||
P4-F ticks:492
|
||||
P2-S ticks:492
|
||||
P2-F ticks:502
|
||||
P3-S ticks:502
|
||||
P1-S ticks:512
|
||||
P1-F ticks:522
|
||||
P3-F ticks:522
|
||||
P2-S ticks:532
|
||||
P4-S ticks:532
|
||||
P1-S ticks:542
|
||||
P1-F ticks:552
|
||||
P4-F ticks:552
|
||||
P2-F ticks:552
|
||||
P1-S ticks:572
|
||||
P1-F ticks:582
|
||||
P2-S ticks:582
|
||||
P3-S ticks:582
|
||||
P1-S ticks:602
|
||||
P1-F ticks:612
|
||||
P3-F ticks:612
|
||||
P4-S ticks:612
|
||||
P4-F ticks:622
|
||||
P2-F ticks:622
|
||||
P2 - Deadline miss
|
||||
P2-S ticks:622
|
||||
P1-S ticks:632
|
||||
P1-F ticks:642
|
||||
P2-F ticks:642
|
||||
P1-S ticks:662
|
||||
P1-F ticks:672
|
||||
P2-S ticks:672
|
||||
P4-S ticks:672
|
||||
P4-F ticks:682
|
||||
P3-S ticks:682
|
||||
P1-S ticks:692
|
||||
P1-F ticks:702
|
||||
P3-F ticks:702
|
||||
P2-F ticks:702
|
||||
P2 - Deadline miss
|
||||
P2-S ticks:702
|
||||
P2-F ticks:712
|
||||
P1-S ticks:722
|
||||
P1-F ticks:732
|
||||
P2-S ticks:742
|
||||
P4-S ticks:742
|
||||
P1-S ticks:752
|
||||
P1-F ticks:762
|
||||
P4-F ticks:762
|
||||
P2-F ticks:762
|
||||
P3-S ticks:772
|
||||
P1-S ticks:782
|
||||
P1-F ticks:792
|
||||
P2-S ticks:792
|
||||
P3-F ticks:792
|
||||
P2-F ticks:802
|
||||
P1-S ticks:812
|
||||
P1-F ticks:822
|
||||
P2-S ticks:822
|
||||
P4-S ticks:822
|
||||
P4-F ticks:832
|
||||
P2-F ticks:832
|
||||
P1-S ticks:842
|
||||
*** END OF TEST CBS SCHEDULER 3 ***
|
||||
73
testsuites/sptests/spcbssched03/system.h
Normal file
73
testsuites/sptests/spcbssched03/system.h
Normal file
@@ -0,0 +1,73 @@
|
||||
/* system.h
|
||||
*
|
||||
* This include file contains information that is included in every
|
||||
* function in the test set.
|
||||
*
|
||||
* COPYRIGHT (c) 1989-1999.
|
||||
* On-Line Applications Research Corporation (OAR).
|
||||
*
|
||||
* 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$
|
||||
*/
|
||||
|
||||
#include <tmacros.h>
|
||||
|
||||
/* functions */
|
||||
|
||||
rtems_task Init(
|
||||
rtems_task_argument argument
|
||||
);
|
||||
|
||||
rtems_task Tasks_Periodic(
|
||||
rtems_task_argument argument
|
||||
);
|
||||
|
||||
rtems_task Tasks_Aperiodic(
|
||||
rtems_task_argument argument
|
||||
);
|
||||
|
||||
/* configuration information */
|
||||
|
||||
#define CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER
|
||||
#define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER
|
||||
|
||||
#define CONFIGURE_MICROSECONDS_PER_TICK 100000
|
||||
|
||||
#define CONFIGURE_MAXIMUM_TASKS 7
|
||||
#define CONFIGURE_MAXIMUM_PERIODS 10
|
||||
|
||||
#define CONFIGURE_INIT_TASK_PRIORITY 100
|
||||
#define CONFIGURE_INIT_TASK_INITIAL_MODES RTEMS_DEFAULT_MODES
|
||||
#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
|
||||
|
||||
#define CONFIGURE_EXTRA_TASK_STACKS (6 * 4 * RTEMS_MINIMUM_STACK_SIZE)
|
||||
|
||||
#define CONFIGURE_SCHEDULER_CBS
|
||||
|
||||
#include <rtems/confdefs.h>
|
||||
|
||||
#include <rtems/rtems/clock.h>
|
||||
#include <rtems/score/isr.h>
|
||||
#include <rtems/rtems/intr.h>
|
||||
#include <rtems/cbs.h>
|
||||
|
||||
#define JOBS_PER_HP (389)
|
||||
#define HP_LENGTH (420)
|
||||
#define NUM_PERIODIC_TASKS (4)
|
||||
#define NUM_APERIODIC_TASKS (2)
|
||||
#define NUM_TASKS ( NUM_PERIODIC_TASKS + NUM_APERIODIC_TASKS )
|
||||
|
||||
/* global variables */
|
||||
|
||||
TEST_EXTERN rtems_id Task_id[ 1+NUM_TASKS ]; /* array of task ids */
|
||||
TEST_EXTERN rtems_name Task_name[ 1+NUM_TASKS ]; /* array of task names */
|
||||
extern rtems_task_priority Priorities[ 1+NUM_TASKS ];
|
||||
extern uint32_t Periods[ 1 + NUM_PERIODIC_TASKS ];
|
||||
extern uint32_t Phases[1 + NUM_TASKS];
|
||||
extern uint32_t Execution[1 + NUM_TASKS];
|
||||
bool Violating_task[1 + NUM_PERIODIC_TASKS];
|
||||
|
||||
/* end of include file */
|
||||
48
testsuites/sptests/spcbssched03/tasks_aperiodic.c
Normal file
48
testsuites/sptests/spcbssched03/tasks_aperiodic.c
Normal file
@@ -0,0 +1,48 @@
|
||||
/* Tasks_Aperiodic
|
||||
*
|
||||
* This routine serves as a test task for the CBS scheduler
|
||||
* implementation. This is for aperiodic task execution.
|
||||
*
|
||||
* Input parameters:
|
||||
* argument - task argument
|
||||
*
|
||||
* Output parameters: NONE
|
||||
*
|
||||
* 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$
|
||||
*/
|
||||
|
||||
#include "system.h"
|
||||
|
||||
rtems_task Tasks_Aperiodic(
|
||||
rtems_task_argument argument
|
||||
)
|
||||
{
|
||||
rtems_status_code status;
|
||||
int start, stop, now;
|
||||
|
||||
put_name( Task_name[ argument ], FALSE );
|
||||
|
||||
status = rtems_task_wake_after( 2 + Phases[argument] );
|
||||
directive_failed( status, "rtems_task_wake_after" );
|
||||
|
||||
rtems_clock_get(RTEMS_CLOCK_GET_TICKS_SINCE_BOOT, &start);
|
||||
printf("AT%" PRIdPTR "-S ticks:%d\n", argument, start);
|
||||
/* active computing */
|
||||
|
||||
while(FOREVER) {
|
||||
rtems_clock_get(RTEMS_CLOCK_GET_TICKS_SINCE_BOOT, &now);
|
||||
if (now >= start + Execution[argument]) break;
|
||||
}
|
||||
rtems_clock_get(RTEMS_CLOCK_GET_TICKS_SINCE_BOOT, &stop);
|
||||
printf("P%" PRIdPTR "-F ticks:%d\n", argument, stop);
|
||||
|
||||
/* delete SELF */
|
||||
fflush(stdout);
|
||||
printf( "Killing task %" PRIdPTR "\n", argument);
|
||||
status = rtems_task_delete(RTEMS_SELF);
|
||||
directive_failed(status, "rtems_task_delete of RTEMS_SELF");
|
||||
}
|
||||
154
testsuites/sptests/spcbssched03/tasks_periodic.c
Normal file
154
testsuites/sptests/spcbssched03/tasks_periodic.c
Normal file
@@ -0,0 +1,154 @@
|
||||
/* Tasks_Periodic
|
||||
*
|
||||
* This routine serves as a test task for the CBS scheduler
|
||||
* implementation.
|
||||
*
|
||||
* Input parameters:
|
||||
* argument - task argument
|
||||
*
|
||||
* Output parameters: NONE
|
||||
*
|
||||
* 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$
|
||||
*/
|
||||
|
||||
#include "system.h"
|
||||
|
||||
void overrun_handler_task_4 (
|
||||
rtems_cbs_server_id server_id
|
||||
)
|
||||
{
|
||||
printk( "Signal overrun, fixing the task\n" );
|
||||
Violating_task[ 4 ] = 0;
|
||||
/* rtems_task_restart( RTEMS_SELF, 4 ); might be also possible*/
|
||||
return;
|
||||
}
|
||||
|
||||
rtems_task Tasks_Periodic(
|
||||
rtems_task_argument argument
|
||||
)
|
||||
{
|
||||
rtems_id rmid;
|
||||
rtems_id test_rmid;
|
||||
rtems_status_code status;
|
||||
bool scenario_done = 0;
|
||||
|
||||
int start, stop, now;
|
||||
|
||||
rtems_cbs_server_id server_id, tsid;
|
||||
rtems_cbs_parameters params, tparams;
|
||||
|
||||
params.deadline = Periods[ argument ];
|
||||
params.budget = Execution[ argument ]+1;
|
||||
|
||||
if ( argument == 4 ) {
|
||||
if ( rtems_cbs_create_server( ¶ms, &overrun_handler_task_4, &server_id ))
|
||||
printf( "ERROR: CREATE SERVER FAILED\n" );
|
||||
}
|
||||
else {
|
||||
if ( rtems_cbs_create_server( ¶ms, NULL, &server_id ) )
|
||||
printf( "ERROR: CREATE SERVER FAILED\n" );
|
||||
}
|
||||
if ( rtems_cbs_attach_thread( server_id, Task_id[ argument ] ) )
|
||||
printf( "ERROR: ATTACH THREAD FAILED\n" );
|
||||
if ( rtems_cbs_get_server_id( Task_id[ argument ], &tsid ) )
|
||||
printf( "ERROR: GET SERVER ID FAILED\n" );
|
||||
if ( tsid != server_id )
|
||||
printf( "ERROR: SERVER ID MISMATCH\n" );
|
||||
if ( rtems_cbs_get_parameters( server_id, &tparams ) )
|
||||
printf( "ERROR: GET PARAMETERS FAILED\n" );
|
||||
if ( params.deadline != tparams.deadline ||
|
||||
params.budget != tparams.budget )
|
||||
printf( "ERROR: PARAMETERS MISMATCH\n" );
|
||||
|
||||
status = rtems_rate_monotonic_create( argument, &rmid );
|
||||
directive_failed( status, "rtems_rate_monotonic_create" );
|
||||
put_name( Task_name[ argument ], FALSE );
|
||||
printf( "- rtems_rate_monotonic_create id = 0x%08" PRIxrtems_id "\n",
|
||||
rmid );
|
||||
|
||||
status = rtems_rate_monotonic_ident( argument, &test_rmid );
|
||||
directive_failed( status, "rtems_rate_monotonic_ident" );
|
||||
put_name( Task_name[ argument ], FALSE );
|
||||
printf( "- rtems_rate_monotonic_ident id = 0x%08" PRIxrtems_id "\n",
|
||||
test_rmid );
|
||||
|
||||
if ( rmid != test_rmid ) {
|
||||
printf( "RMID's DO NOT MATCH (0x%" PRIxrtems_id " and 0x%"
|
||||
PRIxrtems_id ")\n", rmid, test_rmid );
|
||||
rtems_test_exit( 0 );
|
||||
}
|
||||
|
||||
put_name( Task_name[ argument ], FALSE );
|
||||
printf( "- (0x%08" PRIxrtems_id ") period %" PRIu32 "\n",
|
||||
rmid, Periods[ argument ] );
|
||||
|
||||
status = rtems_task_wake_after( 2 + Phases[argument] );
|
||||
directive_failed( status, "rtems_task_wake_after" );
|
||||
|
||||
while (FOREVER) {
|
||||
if (rtems_rate_monotonic_period(rmid, Periods[argument])==RTEMS_TIMEOUT)
|
||||
printf("P%" PRIdPTR " - Deadline miss\n", argument);
|
||||
|
||||
rtems_clock_get(RTEMS_CLOCK_GET_TICKS_SINCE_BOOT, &start);
|
||||
printf("P%" PRIdPTR "-S ticks:%d\n", argument, start);
|
||||
if ( start >= 2*HP_LENGTH ) break; /* stop */
|
||||
|
||||
/* Specific scenario for task 4: tries to exceed announced budget,
|
||||
the task priority has to be pulled down to background. */
|
||||
if ( !scenario_done && argument == 4 && now >= 200 ) {
|
||||
Violating_task[ argument ] = 1;
|
||||
scenario_done = 1;
|
||||
}
|
||||
/* Specific scenario for task 3: changes scheduling parameters. */
|
||||
if ( !scenario_done && argument == 3 && now >= 250 ) {
|
||||
Periods[ argument ] = Periods[ argument ] * 2;
|
||||
Execution[ argument ] = Execution[ argument ] * 2;
|
||||
params.deadline = Periods[ argument ];
|
||||
params.budget = Execution[ argument ]+1;
|
||||
if ( rtems_cbs_set_parameters( server_id, ¶ms) )
|
||||
printf( "ERROR: SET PARAMETERS FAILED\n" );
|
||||
if ( rtems_cbs_get_parameters( server_id, &tparams ) )
|
||||
printf( "ERROR: GET PARAMETERS FAILED\n" );
|
||||
if ( params.deadline != tparams.deadline ||
|
||||
params.budget != tparams.budget )
|
||||
printf( "ERROR: PARAMETERS MISMATCH\n" );
|
||||
scenario_done = 1;
|
||||
}
|
||||
/* Specific scenario for task 2: late unblock after being blocked by
|
||||
itself, the task priority has to be pulled down to background. */
|
||||
if ( !scenario_done && argument == 2 && now >= 500 ) {
|
||||
Violating_task[ argument ] = 1;
|
||||
scenario_done = 1;
|
||||
}
|
||||
if (argument == 2 && Violating_task[ argument ])
|
||||
rtems_task_wake_after( 10 );
|
||||
|
||||
/* active computing */
|
||||
while(FOREVER) {
|
||||
rtems_clock_get(RTEMS_CLOCK_GET_TICKS_SINCE_BOOT, &now);
|
||||
if ( argument == 4 && !Violating_task[ argument ] &&
|
||||
(now >= start + Execution[argument]))
|
||||
break;
|
||||
if ( argument != 4 && (now >= start + Execution[argument]) )
|
||||
break;
|
||||
}
|
||||
rtems_clock_get(RTEMS_CLOCK_GET_TICKS_SINCE_BOOT, &stop);
|
||||
printf("P%" PRIdPTR "-F ticks:%d\n", argument, stop);
|
||||
}
|
||||
|
||||
/* delete period and SELF */
|
||||
status = rtems_rate_monotonic_delete( rmid );
|
||||
if ( status != RTEMS_SUCCESSFUL ) {
|
||||
printf("rtems_rate_monotonic_delete failed with status of %d.\n",status);
|
||||
rtems_test_exit( 0 );
|
||||
}
|
||||
if ( rtems_cbs_cleanup() )
|
||||
printf( "ERROR: CBS CLEANUP\n" );
|
||||
fflush(stdout);
|
||||
puts( "*** END OF TEST CBS SCHEDULER 3 ***" );
|
||||
rtems_test_exit( 0 );
|
||||
}
|
||||
Reference in New Issue
Block a user