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>
|
2011-09-14 Sebastian Huber <sebastian.huber@embedded-brains.de>
|
||||||
|
|
||||||
* spnsext01/init.c: Use correct API.
|
* spnsext01/init.c: Use correct API.
|
||||||
|
|||||||
@@ -30,7 +30,8 @@ SUBDIRS = \
|
|||||||
spintrcritical13 spintrcritical14 spintrcritical15 spintrcritical16 \
|
spintrcritical13 spintrcritical14 spintrcritical15 spintrcritical16 \
|
||||||
spintrcritical17 spmkdir spmountmgr01 spheapprot \
|
spintrcritical17 spmkdir spmountmgr01 spheapprot \
|
||||||
spsimplesched01 spsimplesched02 spsimplesched03 spnsext01 \
|
spsimplesched01 spsimplesched02 spsimplesched03 spnsext01 \
|
||||||
spedfsched01 spedfsched02 spedfsched03
|
spedfsched01 spedfsched02 spedfsched03 \
|
||||||
|
spcbssched01 spcbssched02 spcbssched03
|
||||||
|
|
||||||
include $(top_srcdir)/../automake/subdirs.am
|
include $(top_srcdir)/../automake/subdirs.am
|
||||||
include $(top_srcdir)/../automake/local.am
|
include $(top_srcdir)/../automake/local.am
|
||||||
|
|||||||
@@ -103,6 +103,9 @@ sp74/Makefile
|
|||||||
sp75/Makefile
|
sp75/Makefile
|
||||||
sp76/Makefile
|
sp76/Makefile
|
||||||
spassoc01/Makefile
|
spassoc01/Makefile
|
||||||
|
spcbssched01/Makefile
|
||||||
|
spcbssched02/Makefile
|
||||||
|
spcbssched03/Makefile
|
||||||
spchain/Makefile
|
spchain/Makefile
|
||||||
spclockget/Makefile
|
spclockget/Makefile
|
||||||
spcoverage/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