Beispiel #1
0
void task1( unsigned int arg )
{
    ER ercd;
    int i;
    T_RSYS rsys;

    CYG_TEST_INFO( "Task 1 running" );

    // check initial state
    ercd = ref_sys( &rsys );
    CYG_TEST_CHECK( E_OK == ercd, "ref_sys bad ercd" );
    CYG_TEST_CHECK( TSS_TSK == rsys.sysstat, "system state not TSS_TSK" );
    // disable intrs and check state
    ercd = loc_cpu();
    CYG_TEST_CHECK( E_OK == ercd, "loc_cpu bad ercd" );
    ercd = ref_sys( &rsys );
    CYG_TEST_CHECK( E_OK == ercd, "ref_sys bad ercd" );
    CYG_TEST_CHECK( TSS_LOC == rsys.sysstat, "system state not TSS_LOC" );
#ifdef CYGSEM_UITRON_BAD_PARAMS_RETURN_ERRORS
    // try an illegal op
    ercd = dly_tsk( 10 );
    CYG_TEST_CHECK( E_CTX == ercd, "dly_tsk bad ercd !E_CTX" );
#endif // CYGSEM_UITRON_BAD_PARAMS_RETURN_ERRORS
    // enable intrs and check state and a legal sleep
    ercd = unl_cpu();
    CYG_TEST_CHECK( E_OK == ercd, "unl_cpu bad ercd" );
    ercd = ref_sys( &rsys );
    CYG_TEST_CHECK( E_OK == ercd, "ref_sys bad ercd" );
    CYG_TEST_CHECK( TSS_TSK == rsys.sysstat, "system state not TSS_TSK" );
    ercd = dly_tsk( 1 );
    CYG_TEST_CHECK( E_OK == ercd, "dly_tsk bad ercd" );
    // disable intrs and try scheduler illegal ops
    ercd = loc_cpu();
    CYG_TEST_CHECK( E_OK == ercd, "loc_cpu bad ercd" );
    ercd = ref_sys( &rsys );
    CYG_TEST_CHECK( E_OK == ercd, "ref_sys bad ercd" );
    CYG_TEST_CHECK( TSS_LOC == rsys.sysstat, "system state not TSS_LOC" );
#ifdef CYGSEM_UITRON_BAD_PARAMS_RETURN_ERRORS
    ercd = dis_dsp();
    CYG_TEST_CHECK( E_CTX == ercd, "dis_dsp bad ercd !E_CTX" );
    ercd = ena_dsp();
    CYG_TEST_CHECK( E_CTX == ercd, "ena_dsp bad ercd !E_CTX" );
#endif // CYGSEM_UITRON_BAD_PARAMS_RETURN_ERRORS
    // enable again and check state
    ercd = unl_cpu();
    CYG_TEST_CHECK( E_OK == ercd, "unl_cpu bad ercd" );
    ercd = ref_sys( &rsys );
    CYG_TEST_CHECK( E_OK == ercd, "ref_sys bad ercd" );
    CYG_TEST_CHECK( TSS_TSK == rsys.sysstat, "system state not TSS_TSK" );
    // disable the scheduler and check state
    ercd = dis_dsp();
    CYG_TEST_CHECK( E_OK == ercd, "dis_dsp bad ercd" );
    ercd = ref_sys( &rsys );
    CYG_TEST_CHECK( E_OK == ercd, "ref_sys bad ercd" );
    CYG_TEST_CHECK( TSS_DDSP == rsys.sysstat, "system state not TSS_DDSP" );
    // disable intrs and check state
    ercd = loc_cpu();
    CYG_TEST_CHECK( E_OK == ercd, "loc_cpu bad ercd" );
    ercd = ref_sys( &rsys );
    CYG_TEST_CHECK( E_OK == ercd, "ref_sys bad ercd" );
    CYG_TEST_CHECK( TSS_LOC == rsys.sysstat, "system state not TSS_LOC" );
    // then unlock and check state
    ercd = unl_cpu();
    CYG_TEST_CHECK( E_OK == ercd, "unl_cpu bad ercd" );
    ercd = ref_sys( &rsys );
    CYG_TEST_CHECK( E_OK == ercd, "ref_sys bad ercd" );
    CYG_TEST_CHECK( TSS_TSK == rsys.sysstat, "system state not TSS_TSK" );

    CYG_TEST_PASS( "Interrupt dis/enabling and interactions" );

    // and now we can do the rest of the test

#ifdef CYGSEM_UITRON_BAD_PARAMS_RETURN_ERRORS
    ercd = rel_wai( 2 );
    CYG_TEST_CHECK( E_OBJ == ercd, "rel_wai bad ercd !E_OBJ" );
    ercd = rel_wai( 1 );
    CYG_TEST_CHECK( E_OBJ == ercd, "rel_wai(me) bad ercd !E_OBJ" );
    ercd = rel_wai( -6 );
    CYG_TEST_CHECK( E_ID == ercd, "rel_wai bad ercd !E_ID" );
    ercd = rel_wai( 99 );
    CYG_TEST_CHECK( E_ID == ercd, "rel_wai bad ercd !E_ID" );
#endif // we can test bad param error returns

    ercd = dis_dsp();
    CYG_TEST_CHECK( E_OK == ercd, "dis_dsp bad ercd" );
    ercd = sta_tsk( 2, 22222 );
    CYG_TEST_CHECK( E_OK == ercd, "sta_tsk bad ercd" );
    ercd = chg_pri( 2, 5 );
    CYG_TEST_CHECK( E_OK == ercd, "chg_pri bad ercd" );
    ercd = ena_dsp();
    CYG_TEST_CHECK( E_OK == ercd, "ena_dsp bad ercd" );

#ifdef CYGSEM_UITRON_BAD_PARAMS_RETURN_ERRORS
    ercd = rel_wai( 2 );
    CYG_TEST_CHECK( E_OBJ == ercd, "rel_wai bad ercd !E_OBJ" );
    ercd = rel_wai( 1 );
    CYG_TEST_CHECK( E_OBJ == ercd, "rel_wai(me) bad ercd !E_OBJ" );
#endif // we can test bad param error returns

    ercd = wai_sem( 1 );
    CYG_TEST_CHECK( E_RLWAI == ercd, "wai_sem bad ercd !E_RLWAI" );

    ercd = twai_sem( 1, 20 );
    CYG_TEST_CHECK( E_RLWAI == ercd, "twai_sem bad ercd !E_RLWAI" );

    ercd = wai_flg( &scratch, 1, 9999, 0 );
    CYG_TEST_CHECK( E_RLWAI == ercd, "wai_flg bad ercd !E_RLWAI" );

    ercd = twai_flg( &scratch, 1, 9999, 0, 10 );
    CYG_TEST_CHECK( E_RLWAI == ercd, "twai_flg bad ercd !E_RLWAI" );

    ercd = rcv_msg( &t_msg, 1 );
    CYG_TEST_CHECK( E_RLWAI == ercd, "rcv_msg bad ercd !E_RLWAI" );

    ercd = trcv_msg( &t_msg, 1, 10 );
    CYG_TEST_CHECK( E_RLWAI == ercd, "trcv_msg bad ercd !E_RLWAI" );

    // these are loops so as to consume the whole of the mempool
    // in order to wait at the end
    for ( i = 0; i < 10; i++ )
        if ( E_OK != (ercd = get_blf( &vp, 3 ) ) )
            break;
    CYG_TEST_CHECK( E_RLWAI == ercd, "get_blf bad ercd !E_RLWAI" );

    for ( i = 0; i < 10; i++ )
        if ( E_OK != (ercd = tget_blf( &vp, 3, 10 ) ) )
            break;
    CYG_TEST_CHECK( E_RLWAI == ercd, "tget_blf bad ercd !E_RLWAI" );

    for ( i = 0; i < 10; i++ )
        if ( E_OK != (ercd = get_blk( &vp, 1, 1000 ) ) )
            break;
    CYG_TEST_CHECK( E_RLWAI == ercd, "get_blk bad ercd !E_RLWAI" );

    for ( i = 0; i < 10; i++ )
        if ( E_OK != (ercd = tget_blk( &vp, 1, 1000, 10 ) ) )
            break;
    CYG_TEST_CHECK( E_RLWAI == ercd, "tget_blk bad ercd !E_RLWAI" );

    ercd = dly_tsk( 10 );
    CYG_TEST_CHECK( E_RLWAI == ercd, "dly_tsk bad ercd !E_RLWAI" );

    ercd = tslp_tsk( 10 );
    CYG_TEST_CHECK( E_RLWAI == ercd, "tslp_tsk bad ercd !E_RLWAI" );

    ercd = slp_tsk();
    CYG_TEST_CHECK( E_RLWAI == ercd, "slp_tsk bad ercd !E_RLWAI" );

    ercd = ter_tsk( 2 );
    CYG_TEST_CHECK( E_OK == ercd, "ter_tsk bad ercd" );
    ercd = dly_tsk( 10 );
    CYG_TEST_CHECK( E_OK == ercd, "dly_tsk bad ercd" );

    CYG_TEST_PASS("release wait: various waiting calls");

    // all done
    CYG_TEST_EXIT( "All done" );
    ext_tsk();
}
Beispiel #2
0
void task1( unsigned int arg )
{
    ER ercd;
    int tests = 0;

    CYG_TEST_INFO( "Task 1 running" );

    ercd = dis_dsp();
    CYG_TEST_CHECK( E_OK == ercd, "dis_dsp bad ercd" );
    ercd = sta_tsk( 2, 22222 );
    CYG_TEST_CHECK( E_OK == ercd, "sta_tsk bad ercd" );
    ercd = chg_pri( 2, 5 );
    CYG_TEST_CHECK( E_OK == ercd, "chg_pri bad ercd" );
    ercd = ena_dsp();
    CYG_TEST_CHECK( E_OK == ercd, "ena_dsp bad ercd" );
    ercd = dly_tsk( 10 );
    CYG_TEST_CHECK( E_OK == ercd, "dly_tsk bad ercd" );

#ifdef CYGPKG_UITRON_MEMPOOLFIXED_CREATE_DELETE
    tests++;
#ifdef CYGSEM_UITRON_BAD_PARAMS_RETURN_ERRORS
    ercd = del_mpf( -6 );
    CYG_TEST_CHECK( E_ID == ercd, "del_mpf bad ercd !E_ID" );
    ercd = del_mpf( 99 );
    CYG_TEST_CHECK( E_ID == ercd, "del_mpf bad ercd !E_ID" );
    ercd = cre_mpf( -6, &t_cmpf );
    CYG_TEST_CHECK( E_ID == ercd, "cre_mpf bad ercd !E_ID" );
    ercd = cre_mpf( 99, &t_cmpf );
    CYG_TEST_CHECK( E_ID == ercd, "cre_mpf bad ercd !E_ID" );
#endif // we can test bad param error returns
    // try a pre-existing object
    // [first get a valid block from it for the freeing test later]
    ercd = pget_blf( &vp, 3 );
    CYG_TEST_CHECK( E_OK == ercd, "pget_blf bad ercd" );
    ercd = cre_mpf( 3, &t_cmpf );
    CYG_TEST_CHECK( E_OBJ == ercd, "cre_mpf bad ercd !E_OBJ" );
    // delete it so we can play
    ercd = del_mpf( 3 );
    CYG_TEST_CHECK( E_OK == ercd, "del_mpf bad ercd" );
    // check it is deleted
    ercd = rel_blf( 3, vp );            // vp did come from this pool
    CYG_TEST_CHECK( E_NOEXS == ercd, "rel_blf bad ercd !E_NOEXS" );
    ercd = pget_blf( &vp, 3 );
    CYG_TEST_CHECK( E_NOEXS == ercd, "pget_blf bad ercd !E_NOEXS" );
    ercd = tget_blf( &vp, 3, 10 );
    CYG_TEST_CHECK( E_NOEXS == ercd, "tget_blf bad ercd !E_NOEXS" );
    ercd = get_blf( &vp, 3 );
    CYG_TEST_CHECK( E_NOEXS == ercd, "get_blf bad ercd !E_NOEXS" );
    ercd = ref_mpf( &t_rmpf, 3 );
    CYG_TEST_CHECK( E_NOEXS == ercd, "ref_mpf bad ercd !E_NOEXS" );
#ifdef CYGSEM_UITRON_BAD_PARAMS_RETURN_ERRORS
    // now try creating it (badly)
#ifndef CYGSEM_UITRON_PARAMS_NULL_IS_GOOD_PTR
    ercd = cre_mpf( 3, NULL );
    CYG_TEST_CHECK( E_PAR == ercd, "cre_mpf bad ercd !E_PAR" );
#endif
    ercd = cre_mpf( 3, NADR );
    CYG_TEST_CHECK( E_PAR == ercd, "cre_mpf bad ercd !E_PAR" );
    t_cmpf.mpfatr = 0xfff;
    ercd = cre_mpf( 3, &t_cmpf );
    CYG_TEST_CHECK( E_RSATR == ercd, "cre_mpf bad ercd !E_RSATR" );
#endif // we can test bad param error returns
    t_cmpf.mpfatr = 0;
    t_cmpf.mpfcnt = 10000;
    t_cmpf.blfsz = 100;
    ercd = cre_mpf( 3, &t_cmpf );
    CYG_TEST_CHECK( E_NOMEM == ercd, "cre_mpf bad ercd" );
    t_cmpf.mpfcnt = 100;
    t_cmpf.blfsz = 100000;
    ercd = cre_mpf( 3, &t_cmpf );
    CYG_TEST_CHECK( E_NOMEM == ercd, "cre_mpf bad ercd" );
    // now create it well
    t_cmpf.mpfatr = 0;
    t_cmpf.mpfcnt = 10;
    t_cmpf.blfsz = 100;
    ercd = cre_mpf( 3, &t_cmpf );
    CYG_TEST_CHECK( E_OK == ercd, "cre_mpf bad ercd" );
    // and check we can use it
    ercd = pget_blf( &vp, 3 );
    CYG_TEST_CHECK( E_OK == ercd, "pget_blf bad ercd" );
    ercd = tget_blf( &vp, 3, 10 );
    CYG_TEST_CHECK( E_OK == ercd, "tget_blf bad ercd" );
    ercd = get_blf( &vp, 3 );
    CYG_TEST_CHECK( E_OK == ercd, "get_blf bad ercd" );
    ercd = rel_blf( 3, vp );            // vp did come from new pool
    CYG_TEST_CHECK( E_OK == ercd, "rel_blf bad ercd" );
    ercd = rel_blf( 3, vp );            // vp already freed
    CYG_TEST_CHECK( E_PAR == ercd, "rel_blf bad ercd !E_PAR" );
    ercd = ref_mpf( &t_rmpf, 3 );
    CYG_TEST_CHECK( E_OK == ercd, "ref_mpf bad ercd" );

    // In order to wait on the pools, we must first consume all they have:
    while ( E_OK == (ercd = pget_blf( &vp, 1 )) ) /* nothing */;
    CYG_TEST_CHECK( E_TMOUT == ercd, "pget_blf bad ercd !E_TMOUT" );
    while ( E_OK == (ercd = tget_blf( &vp, 2, 1 )) ) /* nothing */;
    CYG_TEST_CHECK( E_TMOUT == ercd, "tget_blf bad ercd !E_TMOUT" );
    // now wait while task 2 deletes the wait objects
    ercd = wup_tsk( 2 );
    CYG_TEST_CHECK( E_OK == ercd, "wup_tsk bad ercd" );
    ercd = get_blf( &vp, 1 );
    CYG_TEST_CHECK( E_DLT == ercd, "get_blf bad ercd !E_DLT" );
    ercd = wup_tsk( 2 );
    CYG_TEST_CHECK( E_OK == ercd, "wup_tsk bad ercd" );
    ercd = tget_blf( &vp, 2, 20 );
    CYG_TEST_CHECK( E_DLT == ercd, "tget_blf bad ercd !E_DLT" );
    // check they are deleted
    ercd = get_blf( &vp, 1 );
    CYG_TEST_CHECK( E_NOEXS == ercd, "get_blf bad ercd !E_NOEXS" );
    ercd = pget_blf( &vp, 2 );
    CYG_TEST_CHECK( E_NOEXS == ercd, "pget_blf bad ercd !E_NOEXS" );

    // re-create and do it again
    t_cmpf.mpfcnt = 90;
    t_cmpf.blfsz = 20;
    ercd = cre_mpf( 1, &t_cmpf );
    CYG_TEST_CHECK( E_OK == ercd, "cre_mpf bad ercd" );
    t_cmpf.mpfcnt = 5;
    t_cmpf.blfsz = 200;
    ercd = cre_mpf( 2, &t_cmpf );
    CYG_TEST_CHECK( E_OK == ercd, "cre_mpf bad ercd" );

    // In order to wait on the pools, we must first consume all they have:
    while ( E_OK == (ercd = pget_blf( &vp, 1 )) ) /* nothing */;
    CYG_TEST_CHECK( E_TMOUT == ercd, "pget_blf bad ercd !E_TMOUT" );
    while ( E_OK == (ercd = tget_blf( &vp, 2, 1 )) ) /* nothing */;
    CYG_TEST_CHECK( E_TMOUT == ercd, "tget_blf bad ercd !E_TMOUT" );
    // now wait while task 2 deletes the wait objects
    ercd = wup_tsk( 2 );
    CYG_TEST_CHECK( E_OK == ercd, "wup_tsk bad ercd" );
    ercd = get_blf( &vp, 1 );
    CYG_TEST_CHECK( E_DLT == ercd, "get_blf bad ercd !E_DLT" );
    ercd = wup_tsk( 2 );
    CYG_TEST_CHECK( E_OK == ercd, "wup_tsk bad ercd" );
    ercd = tget_blf( &vp, 2, 10 );
    CYG_TEST_CHECK( E_DLT == ercd, "tget_blf bad ercd !E_DLT" );
    // check they are deleted
    ercd = tget_blf( &vp, 1, 1 );
    CYG_TEST_CHECK( E_NOEXS == ercd, "get_blf bad ercd !E_NOEXS" );
    ercd = get_blf( &vp, 2 );
    CYG_TEST_CHECK( E_NOEXS == ercd, "pget_blf bad ercd !E_NOEXS" );

    CYG_TEST_PASS("create/delete fixed mempools");
#endif // CYGPKG_UITRON_MEMPOOLFIXED_CREATE_DELETE

#ifdef CYGPKG_UITRON_MEMPOOLVAR_CREATE_DELETE
    tests++;
#ifdef CYGSEM_UITRON_BAD_PARAMS_RETURN_ERRORS
    ercd = del_mpl( -6 );
    CYG_TEST_CHECK( E_ID == ercd, "del_mpl bad ercd !E_ID" );
    ercd = del_mpl( 99 );
    CYG_TEST_CHECK( E_ID == ercd, "del_mpl bad ercd !E_ID" );
    ercd = cre_mpl( -6, &t_cmpl );
    CYG_TEST_CHECK( E_ID == ercd, "cre_mpl bad ercd !E_ID" );
    ercd = cre_mpl( 99, &t_cmpl );
    CYG_TEST_CHECK( E_ID == ercd, "cre_mpl bad ercd !E_ID" );
#endif // we can test bad param error returns
    // try a pre-existing object
    // [first get a valid block from it for the freeing test later]
    ercd = pget_blk( &vp, 3, 100 );
    CYG_TEST_CHECK( E_OK == ercd, "pget_blk bad ercd" );
    ercd = cre_mpl( 3, &t_cmpl );
    CYG_TEST_CHECK( E_OBJ == ercd, "cre_mpl bad ercd !E_OBJ" );
    // delete it so we can play
    ercd = del_mpl( 3 );
    CYG_TEST_CHECK( E_OK == ercd, "del_mpl bad ercd" );
    // check it is deleted
    ercd = rel_blk( 3, vp );            // vp did come from this pool
    CYG_TEST_CHECK( E_NOEXS == ercd, "rel_blk bad ercd !E_NOEXS" );
    ercd = pget_blk( &vp, 3, 100 );
    CYG_TEST_CHECK( E_NOEXS == ercd, "pget_blk bad ercd !E_NOEXS" );
    ercd = tget_blk( &vp, 3, 100, 10 );
    CYG_TEST_CHECK( E_NOEXS == ercd, "tget_blk bad ercd !E_NOEXS" );
    ercd = get_blk( &vp, 3, 100 );
    CYG_TEST_CHECK( E_NOEXS == ercd, "get_blk bad ercd !E_NOEXS" );
    ercd = ref_mpl( &t_rmpl, 3 );
    CYG_TEST_CHECK( E_NOEXS == ercd, "ref_mpl bad ercd !E_NOEXS" );
#ifdef CYGSEM_UITRON_BAD_PARAMS_RETURN_ERRORS
    // now try creating it (badly)
#ifndef CYGSEM_UITRON_PARAMS_NULL_IS_GOOD_PTR
    ercd = cre_mpl( 3, NULL );
    CYG_TEST_CHECK( E_PAR == ercd, "cre_mpl bad ercd !E_PAR" );
#endif
    ercd = cre_mpl( 3, NADR );
    CYG_TEST_CHECK( E_PAR == ercd, "cre_mpl bad ercd !E_PAR" );
    t_cmpl.mplatr = 0xfff;
    ercd = cre_mpl( 3, &t_cmpl );
    CYG_TEST_CHECK( E_RSATR == ercd, "cre_mpl bad ercd !E_RSATR" );
#endif // we can test bad param error returns
    t_cmpl.mplatr = 0;
    t_cmpl.mplsz = 100000000;
    ercd = cre_mpl( 3, &t_cmpl );
    CYG_TEST_CHECK( E_NOMEM == ercd, "cre_mpl bad ercd" );
    // now create it well
    t_cmpl.mplatr = 0;
    t_cmpl.mplsz = 1000;
    ercd = cre_mpl( 3, &t_cmpl );
    CYG_TEST_CHECK( E_OK == ercd, "cre_mpl bad ercd" );
    // and check we can use it
    ercd = pget_blk( &vp, 3, 100 );
    CYG_TEST_CHECK( E_OK == ercd, "pget_blk bad ercd" );
    ercd = pget_blk( &vp, 3, 100000000 ); // way too large
    CYG_TEST_CHECK( E_TMOUT == ercd, "pget_blk bad ercd !E_TMOUT" );
    ercd = tget_blk( &vp, 3, 100, 10 );
    CYG_TEST_CHECK( E_OK == ercd, "tget_blk bad ercd" );
    ercd = get_blk( &vp, 3, 100 );
    CYG_TEST_CHECK( E_OK == ercd, "get_blk bad ercd" );
    ercd = rel_blk( 3, vp );            // vp did come from new pool
    CYG_TEST_CHECK( E_OK == ercd, "rel_blk bad ercd" );
    ercd = rel_blk( 3, vp );            // vp already freed
    CYG_TEST_CHECK( E_PAR == ercd, "rel_blk bad ercd !E_PAR" );
    ercd = ref_mpl( &t_rmpl, 3 );
    CYG_TEST_CHECK( E_OK == ercd, "ref_mpl bad ercd" );

    // In order to wait on the pools, we must first consume all they have:
    while ( E_OK == (ercd = pget_blk( &vp, 1, 100 )) ) /* nothing */;
    CYG_TEST_CHECK( E_TMOUT == ercd, "pget_blk bad ercd !E_TMOUT" );
    while ( E_OK == (ercd = tget_blk( &vp, 2, 100, 1 )) ) /* nothing */;
    CYG_TEST_CHECK( E_TMOUT == ercd, "tget_blk bad ercd !E_TMOUT" );
    // now wait while task 2 deletes the wait objects
    ercd = wup_tsk( 2 );
    CYG_TEST_CHECK( E_OK == ercd, "wup_tsk bad ercd" );
    ercd = get_blk( &vp, 1, 200 );
    CYG_TEST_CHECK( E_DLT == ercd, "get_blk bad ercd !E_DLT" );
    ercd = wup_tsk( 2 );
    CYG_TEST_CHECK( E_OK == ercd, "wup_tsk bad ercd" );
    ercd = tget_blk( &vp, 2, 100, 20 );
    CYG_TEST_CHECK( E_DLT == ercd, "tget_blk bad ercd !E_DLT" );
    // check they are deleted
    ercd = get_blk( &vp, 1, 200 );
    CYG_TEST_CHECK( E_NOEXS == ercd, "get_blk bad ercd !E_NOEXS" );
    ercd = pget_blk( &vp, 2, 20 );
    CYG_TEST_CHECK( E_NOEXS == ercd, "pget_blk bad ercd !E_NOEXS" );

    // re-create and do it again
    ercd = cre_mpl( 1, &t_cmpl );
    CYG_TEST_CHECK( E_OK == ercd, "cre_mpl bad ercd" );
    ercd = cre_mpl( 2, &t_cmpl );
    CYG_TEST_CHECK( E_OK == ercd, "cre_mpl bad ercd" );

    // In order to wait on the pools, we must first consume all they have:
    while ( E_OK == (ercd = pget_blk( &vp, 1, 20 )) ) /* nothing */;
    CYG_TEST_CHECK( E_TMOUT == ercd, "pget_blk bad ercd !E_TMOUT" );
    while ( E_OK == (ercd = tget_blk( &vp, 2, 400, 1 )) ) /* nothing */;
    CYG_TEST_CHECK( E_TMOUT == ercd, "tget_blk bad ercd !E_TMOUT" );
    // now wait while task 2 deletes the wait objects
    ercd = wup_tsk( 2 );
    CYG_TEST_CHECK( E_OK == ercd, "wup_tsk bad ercd" );
    ercd = get_blk( &vp, 1, 200 );
    CYG_TEST_CHECK( E_DLT == ercd, "get_blk bad ercd !E_DLT" );
    ercd = wup_tsk( 2 );
    CYG_TEST_CHECK( E_OK == ercd, "wup_tsk bad ercd" );
    ercd = tget_blk( &vp, 2, 500, 20 );
    CYG_TEST_CHECK( E_DLT == ercd, "tget_blk bad ercd !E_DLT" );
    // check they are deleted
    ercd = tget_blk( &vp, 1, 200, 1 );
    CYG_TEST_CHECK( E_NOEXS == ercd, "get_blk bad ercd !E_NOEXS" );
    ercd = get_blk( &vp, 2, 20 );
    CYG_TEST_CHECK( E_NOEXS == ercd, "pget_blk bad ercd !E_NOEXS" );

    CYG_TEST_PASS("create/delete variable mempools");
#endif // CYGPKG_UITRON_MEMPOOLVAR_CREATE_DELETE

    ercd = ter_tsk( 2 );
    CYG_TEST_CHECK( E_OK == ercd, "ter_tsk bad ercd" );
    ercd = dly_tsk( 5 );
    CYG_TEST_CHECK( E_OK == ercd, "dly_tsk bad ercd" );

    // all done
    if ( 0 == tests ) {
        CYG_TEST_NA( "No objects have create/delete enabled" );
    }
    else {
        CYG_TEST_EXIT( "All done" );
    }
    ext_tsk();
}