📄 testcx7.cxx
字号:
default: CYG_TEST_FAIL( "bad switch" ); break; }}voiddo_tidyup( WAITOP wait ){ ER ercd; switch ( wait ) { case SLEEP: case DELAY: case SEMGET: case MSGGET: // do nothing for all of those break; case FLAGWAIT: // clear the flag variable ercd = clr_flg( 1, 0 ); CYG_TEST_CHECK( E_OK == ercd, "clr_flg bad ercd, tidy vp" ); break; case MEMFIXEDGET: if ( NULL != vp ) { ercd = rel_blf( 1, vp ); CYG_TEST_CHECK( E_OK == ercd, "rel_blf bad ercd, tidy vp" ); } if ( NULL != vp1 ) { ercd = rel_blf( 1, vp1 ); CYG_TEST_CHECK( E_OK == ercd, "rel_blf bad ercd, tidy vp1" ); } if ( NULL != t2vp ) { ercd = rel_blf( 1, t2vp ); CYG_TEST_CHECK( E_OK == ercd, "rel_blf bad ercd, tidy t2vp" ); } break; case MEMVARGET: if ( NULL != vp ) { ercd = rel_blk( 1, vp ); CYG_TEST_CHECK( E_OK == ercd, "rel_blk bad ercd, tidy vp" ); } if ( NULL != vp1 ) { ercd = rel_blk( 1, vp1 ); CYG_TEST_CHECK( E_OK == ercd, "rel_blk bad ercd, tidy vp1" ); } if ( NULL != t2vp ) { ercd = rel_blk( 1, t2vp ); CYG_TEST_CHECK( E_OK == ercd, "rel_blk bad ercd, tidy t2vp" ); } break; default: CYG_TEST_FAIL( "bad switch" ); break; }}voiddo_recreate( WAITOP wait ){ #ifdef CYGPKG_UITRON_SEMAS_CREATE_DELETE static T_CSEM t_csem = { NULL, 0, 0 };#endif#ifdef CYGPKG_UITRON_MBOXES_CREATE_DELETE static T_CMBX t_cmbx = { NULL, 0 };#endif#ifdef CYGPKG_UITRON_FLAGS_CREATE_DELETE static T_CFLG t_cflg = { NULL, 0, 0 };#endif#ifdef CYGPKG_UITRON_MEMPOOLFIXED_CREATE_DELETE static T_CMPF t_cmpf = { NULL, 0, 20, 95 };#endif#ifdef CYGPKG_UITRON_MEMPOOLVAR_CREATE_DELETE static T_CMPL t_cmpl = { NULL, 0, 2000 };#endif ER ercd = E_OK; switch ( wait ) { case SLEEP: case DELAY: // do nothing for all of those break; case SEMGET:#ifdef CYGPKG_UITRON_SEMAS_CREATE_DELETE // create the semaphore ercd = cre_sem( 1, &t_csem ); CYG_TEST_CHECK( E_OK == ercd, "cre_sem bad ercd" );#else CYG_TEST_FAIL( "bad call to do_recreate SEMGET" );#endif break; case FLAGWAIT:#ifdef CYGPKG_UITRON_FLAGS_CREATE_DELETE // create the flag ercd = cre_flg( 1, &t_cflg ); CYG_TEST_CHECK( E_OK == ercd, "cre_sem bad ercd" );#else CYG_TEST_FAIL( "bad call to do_recreate FLAGWAIT" );#endif break; case MSGGET:#ifdef CYGPKG_UITRON_MBOXES_CREATE_DELETE // create the mbox ercd = cre_mbx( 1, &t_cmbx ); CYG_TEST_CHECK( E_OK == ercd, "cre_sem bad ercd" );#else CYG_TEST_FAIL( "bad call to do_recreate MSGGET" );#endif break; case MEMFIXEDGET:#ifdef CYGPKG_UITRON_MEMPOOLFIXED_CREATE_DELETE // create the mempool ercd = cre_mpf( 1, &t_cmpf ); CYG_TEST_CHECK( E_OK == ercd, "cre_sem bad ercd" );#else CYG_TEST_FAIL( "bad call to do_recreate MEMFIXEDGET" );#endif break; case MEMVARGET:#ifdef CYGPKG_UITRON_MEMPOOLVAR_CREATE_DELETE // create the mempool ercd = cre_mpl( 1, &t_cmpl ); CYG_TEST_CHECK( E_OK == ercd, "cre_sem bad ercd" );#else CYG_TEST_FAIL( "bad call to do_recreate MEMVARGET" );#endif break; default: CYG_TEST_FAIL( "bad switch" ); break; } // this is just to use ercd to prevent warnings CYG_TEST_CHECK( E_OK == ercd, "<blank> bad ercd" );}voiddo_signal( WAITOP wait ){ ER ercd; switch ( wait ) { case SLEEP: // send a wakeup ercd = wup_tsk( 2 ); CYG_TEST_CHECK( E_OK == ercd, "wup_tsk bad ercd" ); break; case DELAY: // simply wait for task 2's delay to complete ercd = dly_tsk( T1_WAIT ); CYG_TEST_CHECK( E_OK == ercd, "dly_tsk bad ercd" ); break; case SEMGET: // signal the semaphore ercd = sig_sem( 1 ); CYG_TEST_CHECK( E_OK == ercd, "sig_sem bad ercd" ); break; case FLAGWAIT: // set the flag bits ercd = set_flg( 1, 0xff ); CYG_TEST_CHECK( E_OK == ercd, "set_flg bad ercd" ); break; case MSGGET: // send a message ercd = snd_msg( 1, msg ); CYG_TEST_CHECK( E_OK == ercd, "snd_msg bad ercd" ); break; case MEMFIXEDGET: // release a couple of blocks we allocated earlier. I hope. CYG_TEST_CHECK( NULL != vp, "no allocated block to free" ); CYG_TEST_CHECK( NULL != vp1, "no allocated block to free1" ); ercd = rel_blf( 1, vp ); CYG_TEST_CHECK( E_OK == ercd, "rel_blf bad ercd" ); vp = NULL; ercd = rel_blf( 1, vp1 ); CYG_TEST_CHECK( E_OK == ercd, "rel_blf bad ercd1" ); vp1 = NULL; break; case MEMVARGET: // release a couple of blocks we allocated earlier. I hope. CYG_TEST_CHECK( NULL != vp, "no allocated block to free" ); CYG_TEST_CHECK( NULL != vp1, "no allocated block to free1" ); ercd = rel_blk( 1, vp ); CYG_TEST_CHECK( E_OK == ercd, "rel_blk bad ercd" ); vp = NULL; ercd = rel_blk( 1, vp1 ); CYG_TEST_CHECK( E_OK == ercd, "rel_blk bad ercd1" ); vp1 = NULL; break; default: CYG_TEST_FAIL( "bad switch" ); break; }}voiddo_delete( WAITOP wait ){ ER ercd = E_OK; switch ( wait ) { case SLEEP: case DELAY: CYG_TEST_FAIL( "bad call to do_delete( SLEEP or DELAY )" ); break; case SEMGET:#ifdef CYGPKG_UITRON_SEMAS_CREATE_DELETE // delete the semaphore ercd = del_sem( 1 ); CYG_TEST_CHECK( E_OK == ercd, "del_sem bad ercd" );#else CYG_TEST_FAIL( "bad call to do_delete( SEMGET )" );#endif break; case FLAGWAIT:#ifdef CYGPKG_UITRON_FLAGS_CREATE_DELETE // delete the flag ercd = del_flg( 1 ); CYG_TEST_CHECK( E_OK == ercd, "del_flg bad ercd" );#else CYG_TEST_FAIL( "bad call to do_delete( FLAGWAIT )" );#endif break; case MSGGET:#ifdef CYGPKG_UITRON_MBOXES_CREATE_DELETE // delete the mbox ercd = del_mbx( 1 ); CYG_TEST_CHECK( E_OK == ercd, "del_mbx bad ercd" );#else CYG_TEST_FAIL( "bad call to do_delete( MSGGET )" );#endif break; case MEMFIXEDGET:#ifdef CYGPKG_UITRON_MEMPOOLFIXED_CREATE_DELETE // delete the mempool ercd = del_mpf( 1 ); CYG_TEST_CHECK( E_OK == ercd, "del_mpf bad ercd" );#else CYG_TEST_FAIL( "bad call to do_delete( MEMFIXEDGET )" );#endif break; case MEMVARGET:#ifdef CYGPKG_UITRON_MEMPOOLVAR_CREATE_DELETE // delete the mempool ercd = del_mpl( 1 ); CYG_TEST_CHECK( E_OK == ercd, "del_mpl bad ercd" );#else CYG_TEST_FAIL( "bad call to do_delete( MEMVARGET )" );#endif break; default: CYG_TEST_FAIL( "bad switch" ); break; } // this is just to use ercd to prevent warnings CYG_TEST_CHECK( E_OK == ercd, "<blank> bad ercd" );} ERdo_wait( WAITOP wait, WAITTYPE type ){ switch ( wait ) { case SLEEP: return ( PLAIN == type ) ? slp_tsk() : tslp_tsk( T2_WAIT ); case DELAY: return dly_tsk( T2_WAIT ); // forget the type case SEMGET: return ( PLAIN == type ) ? wai_sem( 1 ) : twai_sem( 1, T2_WAIT ); case FLAGWAIT: return ( PLAIN == type ) ? wai_flg( &scratch, 1, 0x55, TWF_ANDW ) : twai_flg( &scratch, 1, 0xaa, TWF_ANDW, T2_WAIT ); case MSGGET: return ( PLAIN == type ) ? rcv_msg( &msg1, 1 ) : trcv_msg( &msg1, 1, T2_WAIT ); case MEMFIXEDGET: return ( PLAIN == type ) ? get_blf( &t2vp, 1 ) : tget_blf( &t2vp, 1, T2_WAIT ); case MEMVARGET: return ( PLAIN == type ) ? get_blk( &t2vp, 1, T2_MALLOC ) : tget_blk( &t2vp, 1, T2_MALLOC, T2_WAIT ); default: CYG_TEST_FAIL( "bad switch" ); break; } CYG_TEST_FAIL( "Bad wait in do_wait" ); return E_SYS;}voidcheck_waitstate( WAITOP wait, int waiting ){ ER ercd; int waity = 0; switch ( wait ) { case SLEEP: case DELAY: return; // do nothing for these case SEMGET: { T_RSEM rsem; ercd = ref_sem( &rsem, 1 ); waity = rsem.wtsk; break; } case FLAGWAIT: { T_RFLG rflg; ercd = ref_flg( &rflg, 1 ); waity = rflg.wtsk; break; } case MSGGET: { T_RMBX rmbx; ercd = ref_mbx( &rmbx, 1 ); waity = rmbx.wtsk; break; } case MEMFIXEDGET: { T_RMPF rmpf; ercd = ref_mpf( &rmpf, 1 ); waity = rmpf.wtsk; break; } case MEMVARGET: { T_RMPL rmpl; ercd = ref_mpl( &rmpl, 1 ); waity = rmpl.wtsk; break; } default: CYG_TEST_FAIL( "bad switch" ); break; } if ( waiting ) CYG_TEST_CHECK( waity, "Object has no task waiting!" ); else CYG_TEST_CHECK( !waity, "Object had a task waiting!" );}// ========================================================================void task1( unsigned int arg ){ ER ercd; WAITOP wait; WAITTYPE type; KILLOP kill; CYG_TEST_INFO( "Task 1 running" ); ercd = chg_pri( 1, 8 ); CYG_TEST_CHECK( E_OK == ercd, "chg_pri bad ercd" ); for ( wait = START_WAITOP; wait < DONE_WAITOP ; wait++) { for ( type = START_TYPE; type < DONE_TYPE ; type++ ) { for ( kill = START_KILLOP; kill < DONE_KILLOP ; kill++ ) {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -