📄 testcx4.cxx
字号:
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 + -