⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 testcx4.cxx

📁 eCos/RedBoot for勤研ARM AnywhereII(4510) 含全部源代码
💻 CXX
📖 第 1 页 / 共 2 页
字号:
    ercd = ref_cyc(&rcyc,  3);
    CYG_TEST_CHECK( E_NOEXS == ercd, "ref_cyc bad ercd !E_NOEXS" );    
#endif // we can test bad param error returns

    CYG_TEST_PASS( "bad calls: def_cyc, act_cyc, ref_cyc" );

    dalm.exinf  = (VP)info;
    dalm.almatr = TA_HLNG;
    dalm.almhdr = (FP)&hand2;
    dalm.tmmode = ~0;                   // bad
    dalm.almtim = 20;

#ifdef CYGSEM_UITRON_BAD_PARAMS_RETURN_ERRORS
    ercd = def_alm(3, &dalm);
    CYG_TEST_CHECK( E_PAR == ercd, "def_alm bad ercd !E_PAR" );
#endif // we can test bad param error returns

    dalm.tmmode = TTM_REL;              // make good
    dalm.almtim = 0;                    // bad

#ifdef CYGSEM_UITRON_BAD_PARAMS_RETURN_ERRORS
    ercd = def_alm(3, &dalm);
    CYG_TEST_CHECK( E_PAR == ercd, "def_alm bad ercd !E_PAR" );
#endif // we can test bad param error returns

    dalm.almtim = 1000;                 // make good

    ercd = def_alm(3, &dalm);
    CYG_TEST_CHECK( E_OK == ercd, "def_alm bad ercd" );

#ifdef CYGSEM_UITRON_BAD_PARAMS_RETURN_ERRORS
    ercd = ref_alm(&ralm, -6);
    CYG_TEST_CHECK( E_PAR == ercd, "ref_alm bad ercd !E_PAR" );
    ercd = ref_alm(&ralm, 99);
    CYG_TEST_CHECK( E_PAR == ercd, "ref_alm bad ercd !E_PAR" );
#ifndef CYGSEM_UITRON_PARAMS_NULL_IS_GOOD_PTR
    ercd = ref_alm(NULL,  3);
    CYG_TEST_CHECK( E_PAR == ercd, "ref_alm bad ercd !E_PAR" );
#endif

#endif // we can test bad param error returns
    ercd = def_alm(3, (T_DALM *)NADR);
    CYG_TEST_CHECK( E_OK == ercd, "def_cyc bad ercd" );
#ifdef CYGSEM_UITRON_BAD_PARAMS_RETURN_ERRORS
    ercd = ref_alm(&ralm,  3);
    CYG_TEST_CHECK( E_NOEXS == ercd, "ref_cyc bad ercd !E_NOEXS" );    
#endif // we can test bad param error returns

    CYG_TEST_PASS( "bad calls: def_alm, act_alm, ref_alm" );
    
    dcyc.exinf  = (VP)info;
    dcyc.cycatr = TA_HLNG;
    dcyc.cychdr = (FP)&hand1;
    dcyc.cycact = TCY_ON;
    dcyc.cyctim = 50*tm;
    
    ercd = def_cyc(3, &dcyc);
    CYG_TEST_CHECK( E_OK == ercd, "ref_cyc bad ercd" );
    ercd = ref_cyc(&rcyc, 3);
    CYG_TEST_CHECK( E_OK == ercd, "ref_cyc bad ercd" );
    CYG_TEST_CHECK( info == rcyc.exinf, "rcyc.exinf should be info" );
    CYG_TEST_CHECK( 45*tm < rcyc.lfttim, "rcyc.lfttim too small" );
    CYG_TEST_CHECK( rcyc.lfttim <= 50*tm, "rcyc.lfttim too big" );
    CYG_TEST_CHECK( TCY_ON == rcyc.cycact, "rcyc.cycact should be TCY_ON" );
    ercd = act_cyc(3, TCY_OFF);
    CYG_TEST_CHECK( E_OK == ercd, "act_cyc bad ercd" );
    ercd = ref_cyc(&rcyc, 3);
    CYG_TEST_CHECK( E_OK == ercd, "ref_cyc bad ercd" );
    CYG_TEST_CHECK( info == rcyc.exinf, "rcyc.exinf should be info" );
    CYG_TEST_CHECK( 45*tm < rcyc.lfttim, "rcyc.lfttim too small" );
    CYG_TEST_CHECK( rcyc.lfttim <= 50*tm, "rcyc.lfttim too big" );
    CYG_TEST_CHECK( TCY_OFF == rcyc.cycact, "rcyc.cycact should be TCY_OFF" );
    ercd = act_cyc(3, TCY_ON);
    CYG_TEST_CHECK( E_OK == ercd, "act_cyc bad ercd" );
    
    CYG_TEST_PASS("good calls: def_cyc, act_cyc, ref_cyc");

    dalm.exinf  = (VP)info;
    dalm.almatr = TA_HLNG;
    dalm.almhdr = (FP)&hand2;
    dalm.tmmode = TTM_REL;
    dalm.almtim = 120*tm;

    ercd = def_alm(3, &dalm);
    CYG_TEST_CHECK( E_OK == ercd, "def_alm bad ercd" );
    ercd = ref_alm(&ralm, 3);
    CYG_TEST_CHECK( E_OK == ercd, "ref_alm bad ercd" );
    CYG_TEST_CHECK( info == ralm.exinf, "ralm.exinf should be info" );
    CYG_TEST_CHECK( 115*tm < ralm.lfttim, "ralm.lfttim too small" );
    CYG_TEST_CHECK( ralm.lfttim <= 120*tm, "ralm.lfttim too big" );

    // Expect handlers to be called at approximate times
    // time           intercount
    // tm*50  hand1   0
    // tm*100 hand1   1
    // tm*120 hand2   2
    // tm*150 hand1   3

    ercd = dly_tsk(160*tm);
    CYG_TEST_CHECK( E_OK == ercd, "dly_tsk bad ercd" );
    CYG_TEST_CHECK( 4 == intercount, "handlers not both called" );
    
    ercd = act_cyc(3, TCY_OFF);
    CYG_TEST_CHECK( E_OK == ercd, "act_cyc(off) bad ercd" );

    ercd = dly_tsk(60*tm);              // enough for at least one tick
    CYG_TEST_CHECK( E_OK == ercd, "dly_tsk bad ercd" );
    CYG_TEST_CHECK( 4 == intercount, "cyclic not disabled" );

    // approx time now 220, so we expect a cycle in about 30 ticks
    ercd = act_cyc(3, TCY_ON);
    CYG_TEST_CHECK( E_OK == ercd, "act_cyc(on) bad ercd" );
    ercd = ref_cyc(&rcyc, 3);
    CYG_TEST_CHECK( E_OK == ercd, "ref_cyc bad ercd" );
    CYG_TEST_CHECK( info == rcyc.exinf, "rcyc.exinf should be info" );
    CYG_TEST_CHECK( 25*tm < rcyc.lfttim, "rcyc.lfttim too small" );
    CYG_TEST_CHECK( rcyc.lfttim <= 35*tm, "rcyc.lfttim too big" );
    CYG_TEST_CHECK( TCY_ON == rcyc.cycact, "rcyc.cycact should be TCY_ON" );

    // now resynchronize with right now:
    ercd = act_cyc(3, TCY_ON|TCY_INI);
    CYG_TEST_CHECK( E_OK == ercd, "act_cyc(on) bad ercd" );
    ercd = ref_cyc(&rcyc, 3);
    CYG_TEST_CHECK( E_OK == ercd, "ref_cyc bad ercd" );
    CYG_TEST_CHECK( info == rcyc.exinf, "rcyc.exinf should be info" );
    CYG_TEST_CHECK( 45*tm < rcyc.lfttim, "rcyc.lfttim too small" );
    CYG_TEST_CHECK( rcyc.lfttim <= 50*tm, "rcyc.lfttim too big" );
    CYG_TEST_CHECK( TCY_ON == rcyc.cycact, "rcyc.cycact should be TCY_ON" );

    // wait a bit and check that time marches on, or even down
    ercd = dly_tsk(10*tm);
    CYG_TEST_CHECK( E_OK == ercd, "dly_tsk bad ercd" );
    ercd = ref_cyc(&rcyc, 3);
    CYG_TEST_CHECK( E_OK == ercd, "ref_cyc bad ercd" );
    CYG_TEST_CHECK( info == rcyc.exinf, "rcyc.exinf should be info" );
    CYG_TEST_CHECK( 35*tm < rcyc.lfttim, "rcyc.lfttim too small" );
    CYG_TEST_CHECK( rcyc.lfttim <= 45*tm, "rcyc.lfttim too big" );
    CYG_TEST_CHECK( TCY_ON == rcyc.cycact, "rcyc.cycact should be TCY_ON" );

    // now turn it off and re-synch with right now:
    ercd = act_cyc(3, TCY_OFF|TCY_INI);
    CYG_TEST_CHECK( E_OK == ercd, "act_cyc(on) bad ercd" );
    ercd = ref_cyc(&rcyc, 3);
    CYG_TEST_CHECK( E_OK == ercd, "ref_cyc bad ercd" );
    CYG_TEST_CHECK( info == rcyc.exinf, "rcyc.exinf should be info" );
    CYG_TEST_CHECK( 45*tm < rcyc.lfttim, "rcyc.lfttim too small" );
    CYG_TEST_CHECK( rcyc.lfttim <= 50*tm, "rcyc.lfttim too big" );
    CYG_TEST_CHECK( TCY_OFF == rcyc.cycact, "rcyc.cycact should be TCY_OFF" );

    ercd = act_cyc(3, TCY_OFF);
    CYG_TEST_CHECK( E_OK == ercd, "act_cyc(on) bad ercd" );

    CYG_TEST_PASS("good calls: def_cyc, act_cyc, ref_cyc, def_alm, ref_alm");

    // all done
    CYG_TEST_EXIT( "All done" );
    ext_tsk();
}



void task2( unsigned int arg )
{
}

void task3( unsigned int arg )
{
}

void task4( unsigned int arg )
{
}

#else // not enough (or too many) uITRON objects configured in
#define N_A_MSG "not enough uITRON objects to run test"
#endif // not enough (or too many) uITRON objects configured in
#else  // not C++ and some C++ specific options enabled
#define N_A_MSG "C++ specific options selected but this is C"
#endif  // not C++ and some C++ specific options enabled
#else // ! CYGVAR_KERNEL_COUNTERS_CLOCK   - can't test without it
#define N_A_MSG "no CYGVAR_KERNEL_COUNTERS_CLOCK"
#endif // ! CYGVAR_KERNEL_COUNTERS_CLOCK  - can't test without it
#else  // ! CYGFUN_KERNEL_THREADS_TIMER   - can't test without it
#define N_A_MSG "no CYGFUN_KERNEL_THREADS_TIMER"
#endif // ! CYGFUN_KERNEL_THREADS_TIMER   - can't test without it
#else  // ! CYGIMP_THREAD_PRIORITY        - can't test without it
#define N_A_MSG "no CYGSEM_KERNEL_SCHED_MLQUEUE"
#endif // ! CYGSEM_KERNEL_SCHED_MLQUEUE   - can't test without it
#else  // ! CYGPKG_UITRON
#define N_A_MSG "uITRON Compatibility layer disabled"
#endif // CYGPKG_UITRON

#ifdef N_A_MSG
externC void
cyg_start( void )
{
    CYG_TEST_INIT();
    CYG_TEST_NA( N_A_MSG );
}
#endif // N_A_MSG defined ie. we are N/A.

// EOF testcx4.cxx

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -