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 ++++++++++++++++++++++++++++---- 1 file changed, 54 insertions(+), 6 deletions(-) (limited to 'testsuites/itrontests/itrontask03/init.c') 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); } + + + + + -- cgit v1.2.3