From 06380cfeac48b3963f9abd5fe256cd73d845bcd3 Mon Sep 17 00:00:00 2001 From: Jennifer Averett Date: Mon, 15 Nov 1999 21:25:53 +0000 Subject: + Added check that a task could be sent to a dormant state then sta_tsk used to restart the task to its initial state. + Added calls to ref_tsk to yellow paths for suspended and ready but not running tasks. + Fixed output file to correctly state test name + Added priority of preempt to the header file. Allows ref_tsk verification. --- testsuites/itrontests/itrontask03/init.c | 60 ++++++++++++++++++++--- testsuites/itrontests/itrontask03/itrontask03.scn | 12 ++++- testsuites/itrontests/itrontask03/preempt.c | 32 ++++++++++-- testsuites/itrontests/itrontask03/system.h | 2 + 4 files changed, 94 insertions(+), 12 deletions(-) (limited to 'testsuites/itrontests/itrontask03') diff --git a/testsuites/itrontests/itrontask03/init.c b/testsuites/itrontests/itrontask03/init.c index 8545b77033..c80ecf756c 100644 --- a/testsuites/itrontests/itrontask03/init.c +++ b/testsuites/itrontests/itrontask03/init.c @@ -1,4 +1,4 @@ - /* Init +/* Init * * This routine is the initialization task for this test program. * It is called from init_exec and has the responsibility for creating @@ -20,29 +20,65 @@ #define TEST_INIT #include "system.h" #include +#include void ITRON_Init( void ) { ER status; T_CTSK pk_ctsk; - - puts( "\n\n*** ITRON TASK TEST 3 ***" ); + T_RTSK pk_rtsk; pk_ctsk.exinf = NULL; pk_ctsk.tskatr = TA_HLNG; pk_ctsk.stksz = RTEMS_MINIMUM_STACK_SIZE; - - pk_ctsk.itskpri = 1; + pk_ctsk.itskpri = PREEMPT_PRIORITY; pk_ctsk.task = Preempt_task; + + puts( "\n\n*** ITRON TASK TEST 3 ***" ); + + /* + * Create and start the Preempt task the first time. + * Verify that it is dormant when it comes back. + */ + + puts( "INIT - Create and Start PREEMPT" ); + status = chg_pri( TSK_SELF, (PREEMPT_PRIORITY+2) ); + directive_failed( status, "chg_pri of SELF" ); + status = cre_tsk( PREEMPT_TASK_ID, &pk_ctsk ); directive_failed( status, "cre_tsk of RTEMS_PREEMPT" ); + status = sta_tsk( PREEMPT_TASK_ID, 0 ); directive_failed( status, "sta_tsk of RTEMS_PREEMPT" ); + puts( "INIT - rot_rdq - no tasks at this priority" ); + status = rot_rdq( 1 ); + directive_failed( status, "rot_rdq" ); + + puts( "INIT - ref_tsk PREEMPT - Validate DORMANT STATE" ); + status = ref_tsk( &pk_rtsk, PREEMPT_TASK_ID ); + directive_failed( status, "INIT - ref_tsk of RTEMS_PREEMPT"); + assert( pk_rtsk.tskstat == TTS_DMT ); + + /* + * Restart the Preempt Task. + */ + status = sta_tsk( PREEMPT_TASK_ID, 0 ); + directive_failed( status, "sta_tsk of RTEMS_PREEMPT" ); puts( "INIT - rot_rdq - yielding processor" ); status = rot_rdq( 1 ); directive_failed( status, "rot_rdq" ); + puts( "INIT - ref_tsk PREEMPT - Validate no longer exists" ); + status = ref_tsk( &pk_rtsk, PREEMPT_TASK_ID ); + assert( status == E_NOEXS ); + status = chg_pri( TSK_SELF, PREEMPT_PRIORITY ); + directive_failed( status, "chg_pri of SELF" ); + + /* + * XXX + */ + pk_ctsk.itskpri = 3; pk_ctsk.task = Task_1; status = cre_tsk( TA1_ID, &pk_ctsk ); @@ -62,10 +98,17 @@ void ITRON_Init( void ) directive_failed( status, "sta_tsk of TA2" ); status = sta_tsk( TA3_ID, 0 ); directive_failed( status, "sta_tsk of TA3" ); + puts( "INIT - ref_tsk TA1 - Validate READY STATE" ); + status = ref_tsk( &pk_rtsk, TA1_ID); + directive_failed( status, "INIT - ref_tsk of TA1"); + assert( pk_rtsk.tskstat == TTS_RDY ); puts( "INIT - suspending TA2 while middle task on a ready chain" ); status = sus_tsk( TA2_ID ); directive_failed( status, "sus_tsk of TA2" ); + status = ref_tsk( &pk_rtsk, TA2_ID); + directive_failed( status, "INIT - ref_tsk of TA2"); + assert( pk_rtsk.tskstat == TTS_SUS ); status = ter_tsk( TA1_ID ); directive_failed( status, "ter_tsk of TA1" ); @@ -89,6 +132,11 @@ void ITRON_Init( void ) directive_failed( status, "sta_tsk of TA3" ); exd_tsk(); - directive_failed( 0, "exd_tsk" ); + assert(0); } + + + + + diff --git a/testsuites/itrontests/itrontask03/itrontask03.scn b/testsuites/itrontests/itrontask03/itrontask03.scn index 21ced29ac1..f933bf7161 100644 --- a/testsuites/itrontests/itrontask03/itrontask03.scn +++ b/testsuites/itrontests/itrontask03/itrontask03.scn @@ -1,6 +1,14 @@ *** ITRON TASK TEST 3 *** +INIT - Create and Start PREEMPT +PREEMPT - ref_tsk validation +PREEMPT - chg_pri increment priority +PREEMPT - ext_tsk - going to DORMANT state +INIT - rot_rdq - no tasks at this priority +INIT - ref_tsk PREEMPT - Validate DORMANT STATE +PREEMPT - ref_tsk validation +PREEMPT - exd_tsk - Exit and Delete task INIT - rot_rdq - yielding processor -PREEMPT - exd_tsk +INIT - ref_tsk PREEMPT - Validate no longer exists INIT - suspending TA2 while middle task on a ready chain TA1 - rtems_task_wake_after - sleep 1 second TA2 - rtems_task_wake_after - sleep 1 minute @@ -10,4 +18,4 @@ TA1 - sus_tsk - suspend TA2 TA1 - - delete TA2 TA1 - rtems_task_wake_after - sleep for 5 seconds TA3 - exd_tsk - exit and delete self -*** END OF ITRON TASK TEST 3 *** +*** ITRON TASK TEST 3 *** diff --git a/testsuites/itrontests/itrontask03/preempt.c b/testsuites/itrontests/itrontask03/preempt.c index 6f8f89f0c2..1ed269cc60 100644 --- a/testsuites/itrontests/itrontask03/preempt.c +++ b/testsuites/itrontests/itrontask03/preempt.c @@ -21,11 +21,35 @@ #include #include "system.h" +int Preempt_task_Count; + void Preempt_task() { - ER status; + ER status; + T_RTSK pk_rtsk; + + puts( "PREEMPT - ref_tsk validation" ); + status = ref_tsk( &pk_rtsk, PREEMPT_TASK_ID ); + assert( status == E_OK ); + assert( pk_rtsk.tskpri == PREEMPT_PRIORITY ); + assert( pk_rtsk.itskpri == PREEMPT_PRIORITY ); + assert( pk_rtsk.task == Preempt_task ); + assert( pk_rtsk.stksz >= RTEMS_MINIMUM_STACK_SIZE ); + assert( pk_rtsk.tskstat == (TTS_RUN | TTS_RDY) ); - puts( "PREEMPT - exd_tsk" ); - exd_tsk( ); - assert( 0 ); + if ( Preempt_task_Count == 0 ) { + Preempt_task_Count ++; + puts( "PREEMPT - chg_pri increment priority "); + status = chg_pri( PREEMPT_TASK_ID, (PREEMPT_PRIORITY+1) ); + directive_failed( status, "chg_pri" ); + puts( "PREEMPT - ext_tsk - going to DORMANT state" ); + ext_tsk( ); + assert( 0 ); + } else { + Preempt_task_Count ++; + puts( "PREEMPT - exd_tsk - Exit and Delete task" ); + exd_tsk( ); + assert( 0 ); + } } + diff --git a/testsuites/itrontests/itrontask03/system.h b/testsuites/itrontests/itrontask03/system.h index 4e4a1ac7ae..546b6dd415 100644 --- a/testsuites/itrontests/itrontask03/system.h +++ b/testsuites/itrontests/itrontask03/system.h @@ -40,6 +40,8 @@ void Task_3(); #define TA2_ID 4 #define TA3_ID 5 + +#define PREEMPT_PRIORITY 1 TEST_EXTERN rtems_id Global_variable; /* example global variable */ /* end of include file */ -- cgit v1.2.3