void task1(intptr_t exinf) { ER_UINT ercd; test_start(__FILE__); check_point(1); check_state(false, false, false, false, false); check_ipm(TIPM_ENAALL); ercd = dis_dsp(); check_ercd(ercd, E_OK); check_point(2); check_state(false, false, true, true, false); check_ipm(TIPM_ENAALL); ercd = sta_alm(ALM1, TEST_TIME_PROC); check_ercd(ercd, E_OK); while(!alm1_flag); check_point(8); check_state(false, false, true, true, false); check_ipm(TIPM_ENAALL); check_finish(9); check_point(0); }
void task1(intptr_t exinf) { ER ercd; test_start(__FILE__); check_point(1); check_state(false, false, TIPM_ENAALL, false, false, true); ercd = dis_dsp(); check_ercd(ercd, E_OK); ercd = ena_tex(); check_ercd(ercd, E_OK); check_point(2); check_state(false, false, TIPM_ENAALL, true, true, false); ercd = sta_alm(ALM1, 1U); check_ercd(ercd, E_OK); while (!(alm1_flag)); check_point(7); check_state(false, false, TIPM_ENAALL, true, true, false); check_finish(8); }
void task1(intptr_t exinf) { ER_UINT ercd; test_start(__FILE__); check_point(1); ercd = act_tsk(TASK2); check_ercd(ercd, E_OK); check_point(6); ercd = chg_pri(TASK3, HIGH_PRIORITY); check_ercd(ercd, E_NOSPT); check_point(7); ercd = wup_tsk(TASK3); check_ercd(ercd, E_NOSPT); check_point(8); ercd = can_wup(TASK3); check_ercd(ercd, E_NOSPT); check_point(9); ercd = rel_wai(TASK3); check_ercd(ercd, E_NOSPT); check_point(10); ercd = sus_tsk(TASK3); check_ercd(ercd, E_NOSPT); check_point(11); ercd = rsm_tsk(TASK3); check_ercd(ercd, E_NOSPT); check_point(12); ercd = sta_alm(ALM1, 10); check_ercd(ercd, E_OK); check_point(13); ercd = slp_tsk(); check_ercd(ercd, E_OK); check_point(27); ercd = act_tsk(TASK3); check_ercd(ercd, E_OK); check_point(28); ercd = act_tsk(TASK4); check_ercd(ercd, E_OK); check_point(29); ercd = act_tsk(TASK2); check_ercd(ercd, E_OK); check_finish(34); check_point(0); }
/** * タイマ開始 * * @param[in] tmval タイムアウト時間[msec] */ void hk_start_timer(uint16_t tmval) { if(m_Timeout == TM_START) { (void)stp_alm(ALM_HKMISC); } (void)sta_alm(ALM_HKMISC, tmval); m_Timeout = TM_START; }
void task1(intptr_t exinf) { ER_UINT ercd; T_RTSK rtsk; T_RMTX rmtx; PRI intpri; test_start(__FILE__); check_point(1); ercd = sta_alm(ALM1, TEST_TIME_CP); check_ercd(ercd, E_OK); ercd = slp_tsk(); check_ercd(ercd, E_OK); check_point(3); ercd = act_tsk(TASK2); check_ercd(ercd, E_OK); check_point(5); ercd = ref_tsk(TASK2, &rtsk); check_ercd(ercd, E_OK); check_assert(rtsk.tskstat == TTS_DMT); ercd = ref_mtx(MTX1, &rmtx); check_ercd(ercd, E_OK); check_assert(rmtx.htskid == TSK_NONE); check_assert(rmtx.wtskid == TSK_NONE); ercd = act_tsk(TASK2); check_ercd(ercd, E_OK); check_point(16); ercd = get_ipm(&intpri); check_ercd(ercd, E_OK); check_assert(intpri == TIPM_ENAALL); ercd = act_tsk(TASK2); check_ercd(ercd, E_OK); check_point(23); check_assert(sns_dsp() == false); ercd = act_tsk(TASK2); check_ercd(ercd, E_OK); check_finish(28); check_point(0); }
void task3(intptr_t exinf) { ER ercd; check_point(13); ercd = sta_alm(ALM1, 10); check_ercd(ercd, E_OK); wait_var(); check_point(16); ercd = sta_alm(ALM1, 10); check_ercd(ercd, E_OK); ercd = dis_dsp(); check_ercd(ercd, E_OK); wait_var(); check_point(18); ercd = ena_dsp(); check_ercd(ercd, E_OK); check_point(20); ercd = sta_alm(ALM1, 10); check_ercd(ercd, E_OK); ercd = sus_tsk(TASK1); check_ercd(ercd, E_OK); wait_var(); check_point(22); ercd = rsm_tsk(TASK1); check_ercd(ercd, E_OK); check_point(26); ercd = ext_tsk(); check_point(0); }
ER load_application(const void *mod_data, SIZE mod_data_sz) { ER ercd; // ev3_led_set_color(LED_GREEN); // chg_status(STATUS_RUNNING); #if 0 // Wait for pressing center button SYSTIM time = 0; uint32_t ledcolor = 0; syslog(LOG_NOTICE, "Press center button to run the application."); while(!global_brick_info.button_pressed[BRICK_BUTTON_ENTER]) { SYSTIM newtime; get_tim(&newtime); if (newtime - time > 500) { // Blink LED brick_misc_command(MISCCMD_SET_LED, ledcolor); ledcolor ^= TA_LED_RED | TA_LED_GREEN; time = newtime; } } while(global_brick_info.button_pressed[BRICK_BUTTON_ENTER]) { SYSTIM newtime; get_tim(&newtime); if (newtime - time > 500) { // Blink LED brick_misc_command(MISCCMD_SET_LED, ledcolor); ledcolor ^= TA_LED_RED | TA_LED_GREEN; time = newtime; } } #endif brick_misc_command(MISCCMD_SET_LED, TA_LED_GREEN); platform_soft_reset(); ercd = dmloader_ins_ldm(mod_data, mod_data_sz, 1); if (ercd != E_OK) { syslog(LOG_ERROR, "Failed to load application, ercd: %d", ercd); } else { app_loaded = true; SVC_PERROR(sta_alm(APP_TER_BTN_ALM, 0)); SVC_PERROR(wai_sem(APP_TER_SEM)); syslog(LOG_NOTICE, "Terminate application."); SVC_PERROR(dmloader_rmv_ldm(1)); brick_misc_command(MISCCMD_SET_LED, TA_LED_GREEN); } // chg_status(STATUS_IDLE); platform_soft_reset(); tslp_tsk(500); return ercd; }
void task5(intptr_t exinf) { ER ercd; check_point(16); ercd = slp_tsk(); check_ercd(ercd, E_OK); check_point(33); ercd = sta_alm(ALM1, 10); check_ercd(ercd, E_OK); check_point(34); ercd = slp_tsk(); check_ercd(ercd, E_OK); check_point(0); }
static mrb_value mrb_ssp_alarm_sta(mrb_state *mrb, mrb_value self) { ER retval; mrb_int tout; mrb_value id = mrb_iv_get(mrb, self, mrb_intern_lit(mrb, "@alarm_id")); mrb_int id_num = mrb_fixnum(id); mrb_get_args(mrb, "i", &tout); t_unlock_cpu(); retval = sta_alm(id_num,tout); t_lock_cpu(); if (retval == E_OK) { return(mrb_false_value()); } return(mrb_true_value()); }
void task2(intptr_t exinf) { ER ercd; check_point(24); ercd = tslp_tsk(10); check_ercd(ercd, E_TMOUT); check_point(27); ercd = sta_alm(ALM1, 10); check_ercd(ercd, E_OK); wait_var(); check_point(29); ercd = ext_tsk(); check_point(0); }
void task1(intptr_t exinf) { ER_UINT ercd; check_point(2); check_assert(fch_hrt() == 10U); simtim_advance(90U); check_assert(fch_hrt() == 100U); check_point(3); ercd = sta_alm(ALM1, 100U); check_ercd(ercd, E_OK); check_point(5); ercd = slp_tsk(); check_ercd(ercd, E_OK); check_point(9); simtim_advance(79U); check_assert(fch_hrt() == 300U); check_point(10); ercd = sta_alm(ALM1, 100U); check_ercd(ercd, E_OK); check_point(12); simtim_advance(10U); check_assert(fch_hrt() == 310U); check_point(13); ercd = sta_alm(ALM2, 100U); check_ercd(ercd, E_OK); check_point(14); simtim_advance(10U); check_assert(fch_hrt() == 320U); check_point(15); ercd = sta_alm(ALM3, 110U); check_ercd(ercd, E_OK); check_point(16); ercd = slp_tsk(); check_ercd(ercd, E_OK); check_point(24); simtim_advance(59U); check_assert(fch_hrt() == 500U); check_point(25); ercd = sta_alm(ALM1, 100U); check_ercd(ercd, E_OK); check_point(27); simtim_advance(10U); check_assert(fch_hrt() == 510U); check_point(28); ercd = sta_alm(ALM2, 110U); check_ercd(ercd, E_OK); check_point(29); ercd = slp_tsk(); check_ercd(ercd, E_OK); check_point(34); simtim_advance(69U); check_assert(fch_hrt() == 700U); check_point(35); ercd = sta_alm(ALM1, 100U); check_ercd(ercd, E_OK); check_point(37); simtim_advance(10U); check_assert(fch_hrt() == 710U); check_point(38); ercd = sta_alm(ALM2, 100U); check_ercd(ercd, E_OK); check_point(39); ercd = slp_tsk(); check_ercd(ercd, E_OK); check_point(47); simtim_advance(60U); check_assert(fch_hrt() == 900U); check_point(48); ercd = sta_alm(ALM1, 100U); check_ercd(ercd, E_OK); check_point(50); simtim_advance(10U); check_assert(fch_hrt() == 910U); check_point(51); ercd = sta_alm(ALM2, 50U); check_ercd(ercd, E_OK); check_point(53); ercd = slp_tsk(); check_ercd(ercd, E_OK); check_point(59); simtim_advance(89U); check_assert(fch_hrt() == 1100U); check_point(60); ercd = sta_alm(ALM1, 10U); check_ercd(ercd, E_OK); check_point(62); simtim_add(20U); check_assert(fch_hrt() == 1120U); check_point(63); ercd = sta_alm(ALM2, 100U); check_ercd(ercd, E_OK); check_point(64); simtim_advance(10U); check_point(70); check_assert(fch_hrt() == 1160U); check_point(71); ercd = slp_tsk(); check_ercd(ercd, E_OK); check_point(75); target_raise_hrt_int(); check_point(77); simtim_advance(59U); check_assert(fch_hrt() == 1300U); check_point(78); ercd = sta_alm(ALM1, 100U); check_ercd(ercd, E_OK); check_point(80); ercd = adj_tim(200); check_ercd(ercd, E_OK); check_point(84); ercd = sta_alm(ALM1, TMAX_RELTIM); check_ercd(ercd, E_OK); check_point(86); ercd = adj_tim(-200); check_ercd(ercd, E_OK); check_point(88); ercd = slp_tsk(); check_ercd(ercd, E_OK); check_finish(93); check_point(0); }
void main_task(intptr_t exinf) { static ID tskid = TASK1; static uint_t tskno = 1; char_t c; /* シリアルポートからの文字受信 */ if(serial_rea_dat(SIO_PORTID , &c , 1) > 0) { switch(c) { case 'e': case 'z': case 'Z': case 'r': message[tskno] = c; break; case '1': tskid = TASK1; tskno = 0; break; case '2': tskid = TASK2; tskno = 1; break; case '3': tskid = TASK3; tskno = 2; break; case 'a': syslog(LOG_INFO, "#act_tsk(%d)", tskno); SVC(act_tsk(tskid)); break; case 'b': syslog(LOG_INFO, "#sta_alm(1, 5000)"); SVC(sta_alm(ALM1 , 5000)); break; case 'B': syslog(LOG_INFO, "#stp_alm(1)"); SVC(stp_alm(ALM1)); break; case 'c': syslog(LOG_INFO, "sta_cyc(1)"); SVC(sta_cyc(CYC1)); break; case 'C': syslog(LOG_INFO, "stp_cyc(1)"); SVC(stp_cyc(CYC1)); break; case 'Q': syslog(LOG_NOTICE, "Sample program ends."); SVC(ext_ker()); break; default: /* エラー表示 */ syslog(LOG_INFO , "Unknown command."); break; } } }
/* * main task */ void main_task(intptr_t exinf) { char_t c; ID tskid = TASK1; int_t tskno = 1; ER_UINT ercd; PRI tskpri; #ifndef TASK_LOOP volatile ulong_t i; SYSTIM stime1, stime2; #endif /* TASK_LOOP */ #ifdef TOPPERS_SUPPORT_GET_UTM SYSUTM utime1, utime2; #endif /* TOPPERS_SUPPORT_GET_UTM */ SVC_PERROR(syslog_msk_log(LOG_UPTO(LOG_INFO), LOG_UPTO(LOG_EMERG))); syslog(LOG_NOTICE, "Sample program starts (exinf = %d).", (int_t) exinf); /* * initialize the serial port * * If the same serial port is shared between main task and system * log task. As this serial port is already opened in system log * task, serial_opn_por will return E_OBJ which is not a real * error. */ ercd = serial_opn_por(TASK_PORTID); if (ercd < 0 && MERCD(ercd) != E_OBJ) { syslog(LOG_ERROR, "%s (%d) reported by `serial_opn_por'.", itron_strerror(ercd), SERCD(ercd)); } SVC_PERROR(serial_ctl_por(TASK_PORTID, (IOCTL_CRLF | IOCTL_FCSND | IOCTL_FCRCV))); /* * adjustment of task_loop. * * If TASK_LOOP is defined, the adjustment of task_loop will not be * done. * * If MEASURE_TWICE is defined, 2 measurements are made. The 2nd * result is adopted as the 1st is a little longer than the 2nd. */ #ifdef TASK_LOOP task_loop = TASK_LOOP; #else /* TASK_LOOP */ #ifdef MEASURE_TWICE task_loop = LOOP_REF; SVC_PERROR(get_tim(&stime1)); for (i = 0; i < task_loop; i++); SVC_PERROR(get_tim(&stime2)); #endif /* MEASURE_TWICE */ task_loop = LOOP_REF; SVC_PERROR(get_tim(&stime1)); for (i = 0; i < task_loop; i++); SVC_PERROR(get_tim(&stime2)); task_loop = LOOP_REF * 400UL / (stime2 - stime1); #endif /* TASK_LOOP */ tex_loop = task_loop / 5; /* * activate the target tasks */ SVC_PERROR(act_tsk(TASK1)); SVC_PERROR(act_tsk(TASK2)); SVC_PERROR(act_tsk(TASK3)); /* * main loop */ do { SVC_PERROR(serial_rea_dat(TASK_PORTID, &c, 1)); switch (c) { case 'e': case 's': case 'S': case 'd': case 'y': case 'Y': case 'z': case 'Z': message[tskno-1] = c; break; case '1': tskno = 1; tskid = TASK1; break; case '2': tskno = 2; tskid = TASK2; break; case '3': tskno = 3; tskid = TASK3; break; case 'a': syslog(LOG_INFO, "#act_tsk(%d)", tskno); SVC_PERROR(act_tsk(tskid)); break; case 'A': syslog(LOG_INFO, "#can_act(%d)", tskno); SVC_PERROR(ercd = can_act(tskid)); if (ercd >= 0) { syslog(LOG_NOTICE, "can_act(%d) returns %d", tskno, ercd); } break; case 't': syslog(LOG_INFO, "#ter_tsk(%d)", tskno); SVC_PERROR(ter_tsk(tskid)); break; case '>': syslog(LOG_INFO, "#chg_pri(%d, HIGH_PRIORITY)", tskno); SVC_PERROR(chg_pri(tskid, HIGH_PRIORITY)); break; case '=': syslog(LOG_INFO, "#chg_pri(%d, MID_PRIORITY)", tskno); SVC_PERROR(chg_pri(tskid, MID_PRIORITY)); break; case '<': syslog(LOG_INFO, "#chg_pri(%d, LOW_PRIORITY)", tskno); SVC_PERROR(chg_pri(tskid, LOW_PRIORITY)); break; case 'G': syslog(LOG_INFO, "#get_pri(%d, &tskpri)", tskno); SVC_PERROR(ercd = get_pri(tskid, &tskpri)); if (ercd >= 0) { syslog(LOG_NOTICE, "priority of task %d is %d", tskno, tskpri); } break; case 'w': syslog(LOG_INFO, "#wup_tsk(%d)", tskno); SVC_PERROR(wup_tsk(tskid)); break; case 'W': syslog(LOG_INFO, "#can_wup(%d)", tskno); SVC_PERROR(ercd = can_wup(tskid)); if (ercd >= 0) { syslog(LOG_NOTICE, "can_wup(%d) returns %d", tskno, ercd); } break; case 'l': syslog(LOG_INFO, "#rel_wai(%d)", tskno); SVC_PERROR(rel_wai(tskid)); break; case 'u': syslog(LOG_INFO, "#sus_tsk(%d)", tskno); SVC_PERROR(sus_tsk(tskid)); break; case 'm': syslog(LOG_INFO, "#rsm_tsk(%d)", tskno); SVC_PERROR(rsm_tsk(tskid)); break; case 'x': syslog(LOG_INFO, "#ras_tex(%d, 0x0001U)", tskno); SVC_PERROR(ras_tex(tskid, 0x0001U)); break; case 'X': syslog(LOG_INFO, "#ras_tex(%d, 0x0002U)", tskno); SVC_PERROR(ras_tex(tskid, 0x0002U)); break; case 'r': syslog(LOG_INFO, "#rot_rdq(three priorities)"); SVC_PERROR(rot_rdq(HIGH_PRIORITY)); SVC_PERROR(rot_rdq(MID_PRIORITY)); SVC_PERROR(rot_rdq(LOW_PRIORITY)); break; case 'c': syslog(LOG_INFO, "#sta_cyc(1)"); SVC_PERROR(sta_cyc(CYCHDR1)); break; case 'C': syslog(LOG_INFO, "#stp_cyc(1)"); SVC_PERROR(stp_cyc(CYCHDR1)); break; case 'b': syslog(LOG_INFO, "#sta_alm(1, 5000)"); SVC_PERROR(sta_alm(ALMHDR1, 5000)); break; case 'B': syslog(LOG_INFO, "#stp_alm(1)"); SVC_PERROR(stp_alm(ALMHDR1)); break; case 'V': #ifdef TOPPERS_SUPPORT_GET_UTM SVC_PERROR(get_utm(&utime1)); SVC_PERROR(get_utm(&utime2)); syslog(LOG_NOTICE, "utime1 = %ld, utime2 = %ld", (ulong_t) utime1, (ulong_t) utime2); #else /* TOPPERS_SUPPORT_GET_UTM */ syslog(LOG_NOTICE, "get_utm is not supported."); #endif /* TOPPERS_SUPPORT_GET_UTM */ break; case 'v': SVC_PERROR(syslog_msk_log(LOG_UPTO(LOG_INFO), LOG_UPTO(LOG_EMERG))); break; case 'q': SVC_PERROR(syslog_msk_log(LOG_UPTO(LOG_NOTICE), LOG_UPTO(LOG_EMERG))); break; #ifdef BIT_KERNEL case ' ': SVC_PERROR(loc_cpu()); { extern ER bit_kernel(void); SVC_PERROR(ercd = bit_kernel()); if (ercd >= 0) { syslog(LOG_NOTICE, "bit_kernel passed."); } } SVC_PERROR(unl_cpu()); break; #endif /* BIT_KERNEL */ default: break; } } while (c != '\003' && c != 'Q'); syslog(LOG_NOTICE, "Sample program ends."); SVC_PERROR(ext_ker()); assert(0); }
/* * メインタスク */ void main_task(intptr_t exinf) { char c; ID tskid = TASK1; int_t tskno = 1; ER_UINT ercd; PRI tskpri; #ifndef TASK_LOOP volatile ulong_t i; SYSTIM stime1, stime2; #endif /* TASK_LOOP */ #ifdef TOPPERS_SUPPORT_GET_UTM SYSUTM utime1, utime2; #endif /* TOPPERS_SUPPORT_GET_UTM */ T_CTSK ctsk; T_DTEX dtex; ID TASK3 = -1; SVC_PERROR(syslog_msk_log(LOG_UPTO(LOG_INFO), LOG_UPTO(LOG_EMERG))); syslog(LOG_NOTICE, "Sample program starts (exinf = %d).", (int_t) exinf); /* * シリアルポートの初期化 * * システムログタスクと同じシリアルポートを使う場合など,シリアル * ポートがオープン済みの場合にはここでE_OBJエラーになるが,支障は * ない. */ ercd = serial_opn_por(TASK_PORTID); if (ercd < 0 && MERCD(ercd) != E_OBJ) { syslog(LOG_ERROR, "%s (%d) reported by `serial_opn_por'.", itron_strerror(ercd), SERCD(ercd)); } SVC_PERROR(serial_ctl_por(TASK_PORTID, (IOCTL_CRLF | IOCTL_FCSND | IOCTL_FCRCV))); /* * ループ回数の設定 * * 並行実行されるタスク内での空ループの回数(task_loop)は,空ルー * プの実行時間が約0.4秒になるように設定する.この設定のために, * LOOP_REF回の空ループの実行時間を,その前後でget_timを呼ぶことで * 測定し,その測定結果から空ループの実行時間が0.4秒になるループ回 * 数を求め,task_loopに設定する. * * LOOP_REFは,デフォルトでは1,000,000に設定しているが,想定したよ * り遅いプロセッサでは,サンプルプログラムの実行開始に時間がかか * りすぎるという問題を生じる.逆に想定したより速いプロセッサでは, * LOOP_REF回の空ループの実行時間が短くなり,task_loopに設定する値 * の誤差が大きくなるという問題がある. * * そこで,そのようなターゲットでは,target_test.hで,LOOP_REFを適 * 切な値に定義するのが望ましい. * * また,task_loopの値を固定したい場合には,その値をTASK_LOOPにマ * クロ定義する.TASK_LOOPがマクロ定義されている場合,上記の測定を * 行わずに,TASK_LOOPに定義された値を空ループの回数とする. * * ターゲットによっては,空ループの実行時間の1回目の測定で,本来よ * りも長めになるものがある.このようなターゲットでは,MEASURE_TWICE * をマクロ定義することで,1回目の測定結果を捨てて,2回目の測定結果 * を使う. * * タスク例外処理ルーチン内での空ループの回数(tex_loop)は, * task_loopの4分の1の値(空ループの実行時間が0.1秒になるループ回 * 数)に設定する. */ #ifdef TASK_LOOP task_loop = TASK_LOOP; #else /* TASK_LOOP */ #ifdef MEASURE_TWICE task_loop = LOOP_REF; SVC_PERROR(get_tim(&stime1)); for (i = 0; i < task_loop; i++); SVC_PERROR(get_tim(&stime2)); #endif /* MEASURE_TWICE */ task_loop = LOOP_REF; SVC_PERROR(get_tim(&stime1)); for (i = 0; i < task_loop; i++); SVC_PERROR(get_tim(&stime2)); task_loop = LOOP_REF * 400UL / (stime2 - stime1); #endif /* TASK_LOOP */ tex_loop = task_loop / 4; /* * タスクの起動 */ SVC_PERROR(act_tsk(TASK1)); SVC_PERROR(act_tsk(TASK2)); /* * メインループ */ do { SVC_PERROR(serial_rea_dat(TASK_PORTID, &c, 1)); switch (c) { case 'e': case 's': case 'S': case 'd': case 'y': case 'Y': case 'z': case 'Z': message[tskno-1] = c; break; case '1': tskno = 1; tskid = TASK1; break; case '2': tskno = 2; tskid = TASK2; break; case '3': tskno = 3; tskid = TASK3; break; case 'a': syslog(LOG_INFO, "#act_tsk(%d)", tskno); SVC_PERROR(act_tsk(tskid)); break; case 'A': syslog(LOG_INFO, "#can_act(%d)", tskno); SVC_PERROR(ercd = can_act(tskid)); if (ercd >= 0) { syslog(LOG_NOTICE, "can_act(%d) returns %d", tskno, ercd); } break; case 't': syslog(LOG_INFO, "#ter_tsk(%d)", tskno); SVC_PERROR(ter_tsk(tskid)); break; case '>': syslog(LOG_INFO, "#chg_pri(%d, HIGH_PRIORITY)", tskno); SVC_PERROR(chg_pri(tskid, HIGH_PRIORITY)); break; case '=': syslog(LOG_INFO, "#chg_pri(%d, MID_PRIORITY)", tskno); SVC_PERROR(chg_pri(tskid, MID_PRIORITY)); break; case '<': syslog(LOG_INFO, "#chg_pri(%d, LOW_PRIORITY)", tskno); SVC_PERROR(chg_pri(tskid, LOW_PRIORITY)); break; case 'G': syslog(LOG_INFO, "#get_pri(%d, &tskpri)", tskno); SVC_PERROR(ercd = get_pri(tskid, &tskpri)); if (ercd >= 0) { syslog(LOG_NOTICE, "priority of task %d is %d", tskno, tskpri); } break; case 'w': syslog(LOG_INFO, "#wup_tsk(%d)", tskno); SVC_PERROR(wup_tsk(tskid)); break; case 'W': syslog(LOG_INFO, "#can_wup(%d)", tskno); SVC_PERROR(ercd = can_wup(tskid)); if (ercd >= 0) { syslog(LOG_NOTICE, "can_wup(%d) returns %d", tskno, ercd); } break; case 'l': syslog(LOG_INFO, "#rel_wai(%d)", tskno); SVC_PERROR(rel_wai(tskid)); break; case 'u': syslog(LOG_INFO, "#sus_tsk(%d)", tskno); SVC_PERROR(sus_tsk(tskid)); break; case 'm': syslog(LOG_INFO, "#rsm_tsk(%d)", tskno); SVC_PERROR(rsm_tsk(tskid)); break; case 'x': syslog(LOG_INFO, "#ras_tex(%d, 0x0001U)", tskno); SVC_PERROR(ras_tex(tskid, 0x0001U)); break; case 'X': syslog(LOG_INFO, "#ras_tex(%d, 0x0002U)", tskno); SVC_PERROR(ras_tex(tskid, 0x0002U)); break; case 'r': syslog(LOG_INFO, "#rot_rdq(three priorities)"); SVC_PERROR(rot_rdq(HIGH_PRIORITY)); SVC_PERROR(rot_rdq(MID_PRIORITY)); SVC_PERROR(rot_rdq(LOW_PRIORITY)); break; case 'c': syslog(LOG_INFO, "#sta_cyc(1)"); SVC_PERROR(sta_cyc(CYCHDR1)); break; case 'C': syslog(LOG_INFO, "#stp_cyc(1)"); SVC_PERROR(stp_cyc(CYCHDR1)); break; case 'b': syslog(LOG_INFO, "#sta_alm(1, 5000)"); SVC_PERROR(sta_alm(ALMHDR1, 5000)); break; case 'B': syslog(LOG_INFO, "#stp_alm(1)"); SVC_PERROR(stp_alm(ALMHDR1)); break; case '@': ctsk.tskatr = TA_NULL; ctsk.exinf = 3; ctsk.task = task; ctsk.itskpri = MID_PRIORITY; ctsk.stksz = STACK_SIZE; ctsk.stk = NULL; SVC_PERROR(TASK3 = acre_tsk(&ctsk)); dtex.texatr = TA_NULL; dtex.texrtn = tex_routine; SVC_PERROR(def_tex(TASK3, &dtex)); syslog(LOG_NOTICE, "task3 is created with tskid = %d.", (int_t) TASK3); break; case '!': syslog(LOG_INFO, "#del_tsk(%d)", tskno); SVC_PERROR(del_tsk(tskid)); break; case 'V': #ifdef TOPPERS_SUPPORT_GET_UTM SVC_PERROR(get_utm(&utime1)); SVC_PERROR(get_utm(&utime2)); syslog(LOG_NOTICE, "utime1 = %ld, utime2 = %ld", (ulong_t) utime1, (ulong_t) utime2); #else /* TOPPERS_SUPPORT_GET_UTM */ syslog(LOG_NOTICE, "get_utm is not supported."); #endif /* TOPPERS_SUPPORT_GET_UTM */ break; case 'v': SVC_PERROR(syslog_msk_log(LOG_UPTO(LOG_INFO), LOG_UPTO(LOG_EMERG))); break; case 'q': SVC_PERROR(syslog_msk_log(LOG_UPTO(LOG_NOTICE), LOG_UPTO(LOG_EMERG))); break; #ifdef BIT_KERNEL case ' ': SVC_PERROR(loc_cpu()); { extern ER bit_kernel(void); SVC_PERROR(ercd = bit_kernel()); if (ercd >= 0) { syslog(LOG_NOTICE, "bit_kernel passed."); } } SVC_PERROR(unl_cpu()); break; #endif /* BIT_KERNEL */ case '$': syslog(LOG_INFO, "#%d#twai_sem(10000)", tskno); SVC_PERROR(twai_sem(TEST_SEM, 10000)); break; default: break; } } while (c != '\003' && c != 'Q'); syslog(LOG_NOTICE, "Sample program ends."); SVC_PERROR(ext_ker()); assert(0); }
void task1(intptr_t exinf) { ER_UINT ercd; T_RALM ralm; SYSTIM systim; check_point(3); ercd = loc_cpu(); check_ercd(ercd, E_OK); ercd = set_tim(1000000LLU); check_ercd(ercd, E_CTX); ercd = get_tim(&systim); check_ercd(ercd, E_CTX); ercd = adj_tim(100); check_ercd(ercd, E_CTX); ercd = unl_cpu(); check_ercd(ercd, E_OK); check_point(4); ercd = get_tim(&systim); check_ercd(ercd, E_OK); check_point(6); check_assert(systim == 40U - 10U); ercd = set_tim(2LLU << 32); check_ercd(ercd, E_OK); check_point(8); ercd = get_tim(&systim); check_ercd(ercd, E_OK); check_point(10); check_assert(systim == (2LLU << 32) + 10U); check_point(11); target_raise_hrt_int(1U); ercd = tslp_tsk(TMAX_RELTIM); check_ercd(ercd, E_TMOUT); check_point(17); ercd = get_tim(&systim); check_ercd(ercd, E_OK); check_point(19); check_assert(systim == (2LLU << 32) + 4000000050U); check_point(20); ercd = get_tim(&systim); check_ercd(ercd, E_OK); check_point(22); check_assert(systim == (3LLU << 32) + 50U); ercd = adj_tim(-1000001); check_ercd(ercd, E_PAR); ercd = adj_tim(+1000001); check_ercd(ercd, E_PAR); ercd = sta_alm(ALM1, 2000000U); check_ercd(ercd, E_OK); check_point(25); ercd = get_tim(&systim); check_ercd(ercd, E_OK); check_point(27); check_assert(systim == (3LLU << 32) + 80U); ercd = adj_tim(+1000000); check_ercd(ercd, E_OK); check_point(30); ercd = get_tim(&systim); check_ercd(ercd, E_OK); check_point(32); check_assert(systim == (3LLU << 32) + 1000000U + 100U); ercd = ref_alm(ALM1, &ralm); check_ercd(ercd, E_OK); check_point(34); check_assert(ralm.lefttim == 999960U); target_raise_hrt_int(0U); check_point(39); ercd = sta_alm(ALM1, 2000000U); check_ercd(ercd, E_OK); check_point(42); ercd = get_tim(&systim); check_ercd(ercd, E_OK); check_point(44); check_assert(systim == (3LLU << 32) + 1000000U + 1000110U); ercd = adj_tim(-1000000); check_ercd(ercd, E_OK); check_point(47); ercd = get_tim(&systim); check_ercd(ercd, E_OK); check_point(49); check_assert(systim == (3LLU << 32) + 1000000U + 1000120U); ercd = ref_alm(ALM1, &ralm); check_ercd(ercd, E_OK); check_assert(ralm.lefttim == 2999960U); ercd = get_tim(&systim); check_ercd(ercd, E_OK); check_point(52); check_assert(systim == (3LLU << 32) + 1000000U + 1000120U); ercd = get_tim(&systim); check_ercd(ercd, E_OK); check_point(54); check_assert(systim == (3LLU << 32) + 2000160U); ercd = adj_tim(-1000000); check_ercd(ercd, E_OK); ercd = get_tim(&systim); check_ercd(ercd, E_OK); check_point(58); check_assert(systim == (3LLU << 32) + 2000170U); ercd = set_tim(4LLU << 32); check_ercd(ercd, E_OK); ercd = get_tim(&systim); check_ercd(ercd, E_OK); check_point(61); check_assert(systim == (4LLU << 32)); ercd = get_tim(&systim); check_ercd(ercd, E_OK); check_point(63); check_assert(systim == (4LLU << 32)); ercd = get_tim(&systim); check_ercd(ercd, E_OK); check_point(65); check_assert(systim == (4LLU << 32) - 999980U + 1000020U); ercd = sta_alm(ALM1, 1000U); check_ercd(ercd, E_OK); check_point(70); ercd = sta_alm(ALM2, 1000U); check_ercd(ercd, E_OK); check_point(72); target_raise_hrt_int(0U); check_point(82); target_raise_hrt_int(0U); check_point(85); ercd = set_tim(5LLU << 32); check_ercd(ercd, E_OK); check_point(87); ercd = adj_tim(200); check_ercd(ercd, E_OK); check_point(90); ercd = get_tim(&systim); check_ercd(ercd, E_OK); check_point(92); check_assert(systim == (5LLU << 32) + 200U + 20U); check_point(93); ercd = set_tim(6LLU << 32); check_ercd(ercd, E_OK); check_point(95); ercd = adj_tim(-200); check_ercd(ercd, E_OK); check_point(98); ercd = get_tim(&systim); check_ercd(ercd, E_OK); check_point(100); check_assert(systim == (6LLU << 32) + 10U); ercd = adj_tim(-1000000); check_ercd(ercd, E_OK); check_point(103); ercd = adj_tim(-1000000); check_ercd(ercd, E_OBJ); check_point(105); ercd = adj_tim(+1000000); check_ercd(ercd, E_OK); check_point(108); ercd = get_tim(&systim); check_ercd(ercd, E_OK); check_point(110); check_assert(systim == (6LLU << 32) + 10U); check_point(111); ercd = get_tim(&systim); check_ercd(ercd, E_OK); check_point(113); check_assert(systim == (6LLU << 32) - 200U + 260U); ercd = adj_tim(0); check_ercd(ercd, E_OK); check_point(116); ercd = get_tim(&systim); check_ercd(ercd, E_OK); check_point(118); check_assert(systim == (6LLU << 32) - 200U + 280U); check_finish(119); check_point(0); }
/* * メインタスク */ void main_task(intptr_t exinf) { char_t c; ER_UINT ercd; PRI tskpri; ID prcid = exinf; ID tskid = sample_tskid[(exinf - 1) * 3 ]; int_t tskno = (exinf-1) * 3 + 1; ID cycid = sample_cycid[(int_t)exinf-1]; ID almid = sample_almid[(int_t)exinf-1]; bool_t update_select = true; uint_t tme_select = exinf; uint_t prc_select = exinf; uint32_t server_req; #ifndef TASK_LOOP volatile ulong_t i; SYSTIM stime1, stime2; #endif /* TASK_LOOP */ #ifdef G_SYSLOG uint_t e; #endif /* G_SYSLOG */ SVC_PERROR(syslog_msk_log(LOG_UPTO(LOG_INFO), LOG_UPTO(LOG_EMERG))); syslog(LOG_NOTICE, "Sample program starts (exinf = %d).", (int_t) exinf); /* * シリアルポートの初期化 * * システムログタスクと同じシリアルポートを使う場合など,シリアル * ポートがオープン済みの場合にはここでE_OBJエラーになるが,支障は * ない. */ ercd = serial_opn_por(((int_t)serial_port[exinf-1])); if (ercd < 0 && MERCD(ercd) != E_OBJ) { syslog(LOG_ERROR, "%s (%d) reported by `serial_opn_por'.", itron_strerror(ercd), SERCD(ercd)); } SVC_PERROR(serial_ctl_por(serial_port[exinf-1], (IOCTL_CRLF | IOCTL_FCSND | IOCTL_FCRCV))); /* * ループ回数の設定 * * TASK_LOOPがマクロ定義されている場合,測定せずに,TASK_LOOPに定 * 義された値を,タスク内でのループ回数とする. * * MEASURE_TWICEがマクロ定義されている場合,1回目の測定結果を捨て * て,2回目の測定結果を使う.1回目の測定は長めの時間が出るため. */ #ifdef TASK_LOOP task_loop = TASK_LOOP; #else /* TASK_LOOP */ #ifdef MEASURE_TWICE task_loop = LOOP_REF; SVC_PERROR(get_tim(&stime1)); for (i = 0; i < task_loop; i++); SVC_PERROR(get_tim(&stime2)); #endif /* MEASURE_TWICE */ task_loop = LOOP_REF; SVC_PERROR(get_tim(&stime1)); for (i = 0; i < task_loop; i++); SVC_PERROR(get_tim(&stime2)); task_loop = LOOP_REF * 400UL / (stime2 - stime1); #endif /* TASK_LOOP */ /* * タスクの起動 */ SVC_PERROR(act_tsk(tskid)); /* * メインループ */ do { if (update_select) { prcid = prc_select; cycid = sample_cycid[tme_select-1]; almid = sample_almid[tme_select-1]; tsk_mig_prc = prcid; update_select = false; syslog(LOG_INFO, "select tskno 0x%x", tskno); syslog(LOG_INFO, "select cycid %d", cycid); syslog(LOG_INFO, "select almid %d", almid); syslog(LOG_INFO, "select processor %d", prcid); } SVC_PERROR(serial_rea_dat(serial_port[exinf-1], &c, 1)); switch (c) { case 'e': case 's': case 'S': case 'd': case 'g': message[tskno - 1] = c; break; case '1': tskno = 1; tskid = TASK1; update_select = true; break; case '2': tskno = 2; tskid = TASK2; update_select = true; break; case '3': tskno = 3; tskid = TASK3; update_select = true; break; case '4': tskno = 4; tskid = TASK4; update_select = true; break; case '5': tskno = 5; tskid = TASK5; update_select = true; break; case '6': tskno = 6; tskid = TASK6; update_select = true; break; case '8': prc_select = 1; update_select = true; break; case '9': prc_select = 2; update_select = true; break; case 'a': syslog(LOG_INFO, "#act_tsk(0x%x)", tskno); SVC_PERROR(act_tsk(tskid)); break; case 'A': syslog(LOG_INFO, "#can_act(0x%x)", tskno); SVC_PERROR(ercd = can_act(tskid)); if (ercd >= 0) { syslog(LOG_NOTICE, "can_act(0x%x) returns %d", tskno, ercd); } break; case '>': syslog(LOG_INFO, "#chg_pri(0x%x, HIGH_PRIORITY)", tskno); SVC_PERROR(chg_pri(tskid, HIGH_PRIORITY)); break; case '=': syslog(LOG_INFO, "#chg_pri(0x%x, MID_PRIORITY)", tskno); SVC_PERROR(chg_pri(tskid, MID_PRIORITY)); break; case '<': syslog(LOG_INFO, "#chg_pri(0x%x, LOW_PRIORITY)", tskno); SVC_PERROR(chg_pri(tskid, LOW_PRIORITY)); break; case 'G': syslog(LOG_INFO, "#get_pri(0x%x, &tskpri)", tskno); SVC_PERROR(ercd = get_pri(tskid, &tskpri)); if (ercd >= 0) { syslog(LOG_NOTICE, "priority of task 0x%x is %d", tskno, tskpri); } break; case 'w': syslog(LOG_INFO, "#wup_tsk(0x%x)", tskno); SVC_PERROR(wup_tsk(tskid)); break; case 'W': syslog(LOG_INFO, "#can_wup(0x%x)", tskno); SVC_PERROR(ercd = can_wup(tskid)); if (ercd >= 0) { syslog(LOG_NOTICE, "can_wup(0x%x) returns %d", tskno, ercd); } break; case 'c': syslog(LOG_INFO, "#sta_cyc(%d)", cycid); SVC_PERROR(sta_cyc(cycid)); break; case 'C': syslog(LOG_INFO, "#stp_cyc(%d)", cycid); SVC_PERROR(stp_cyc(cycid)); break; case 'b': syslog(LOG_INFO, "#sta_alm(%d, %d)", almid, ALM_TIME); SVC_PERROR(sta_alm(almid, ALM_TIME)); break; case 'B': syslog(LOG_INFO, "#stp_alm(%d)", almid); SVC_PERROR(stp_alm(almid)); break; case 'f': syslog(LOG_INFO, "#mact_tsk(%d, %d)", tskid, prcid); SVC_PERROR(mact_tsk(tskid, prcid)); break; default: break; } } while (c != '\003' && c != 'Q'); syslog(LOG_NOTICE, "Sample program ends."); SVC_PERROR(ext_ker()); assert(0); }
/* * メインタスク */ void main_task(intptr_t exinf) { uint_t i, j; syslog_0(LOG_NOTICE, "Performance evaluation program (5)"); init_hist(1); init_hist(2); init_hist(3); init_hist(4); init_hist(5); init_hist(6); /* * 繰り返し計測 */ for (j = 0; j < NO_MEASURE / 10; j++) { /* * アラームハンドラ0短い時間で動作開始 * * 性能評価中に高分解能タイマが再設定されるのを避けるため. */ sta_alm(ALM0, ALM_RELTIM0); /* * 30個のアラームハンドラを長い時間で動作開始 */ begin_measure(1); for (i = 0; i < 30; i++) { sta_alm(alarm1_list[i], ALM_RELTIM1); } end_measure(1); /* * 30個のアラームハンドラを中間の時間で動作開始 */ begin_measure(2); for (i = 0; i < 30; i++) { sta_alm(alarm2_list[i], ALM_RELTIM2); } end_measure(2); /* * 30個のアラームハンドラを短い時間で動作開始 */ begin_measure(3); for (i = 0; i < 30; i++) { sta_alm(alarm3_list[i], ALM_RELTIM3); } end_measure(3); /* * 短い時間で動作開始した30個のアラームハンドラを動作停止 */ begin_measure(6); for (i = 0; i < 30; i++) { stp_alm(alarm3_list[i]); } end_measure(6); /* * 中間の時間で動作開始した30個のアラームハンドラを動作停止 */ begin_measure(5); for (i = 0; i < 30; i++) { stp_alm(alarm2_list[29 - i]); /* 逆順で動作停止 */ } end_measure(5); /* * 長い時間で動作開始した30個のアラームハンドラを動作停止 */ begin_measure(4); for (i = 0; i < 30; i++) { stp_alm(alarm1_list[29 - i]); /* 逆順で動作停止 */ } end_measure(4); } /* * 測定結果の出力 */ syslog_0(LOG_NOTICE, "Execution times of 30 short sta_alm"); print_hist(1); syslog_0(LOG_NOTICE, "Execution times of 30 medium sta_alm"); print_hist(2); syslog_0(LOG_NOTICE, "Execution times of 30 long sta_alm"); print_hist(3); syslog_0(LOG_NOTICE, "Execution times of 30 short stp_alm"); print_hist(4); syslog_0(LOG_NOTICE, "Execution times of 30 medium stp_alm"); print_hist(5); syslog_0(LOG_NOTICE, "Execution times of 30 long stp_alm"); print_hist(6); check_finish(0); }
void alarm1_handler(intptr_t exinf) { ER_UINT ercd; switch (++alarm1_count) { case 1: check_point(6); check_assert(fch_hrt() == 211U); simtim_advance(10U); check_assert(fch_hrt() == 221U); check_point(7); ercd = wup_tsk(TASK1); check_ercd(ercd, E_OK); return; check_point(0); case 2: check_point(17); check_assert(fch_hrt() == 411U); check_point(18); simtim_advance(10U); check_assert(fch_hrt() == 421U); return; check_point(0); case 3: check_point(30); check_assert(fch_hrt() == 611U); simtim_advance(20U); return; check_point(0); case 4: check_point(40); check_assert(fch_hrt() == 811U); check_point(41); simtim_advance(9U); check_assert(fch_hrt() == 820U); check_point(42); ercd = sta_alm(ALM3, 10U); check_ercd(ercd, E_OK); return; check_point(0); case 5: check_point(56); check_assert(fch_hrt() == 1011U); check_point(57); ercd = wup_tsk(TASK1); check_ercd(ercd, E_OK); return; check_point(0); case 6: check_point(65); check_assert(fch_hrt() == 1130U); check_point(66); simtim_advance(10U); check_assert(fch_hrt() == 1140U); check_point(67); target_raise_hrt_int(); return; check_point(0); case 7: check_point(82); check_assert(fch_hrt() == 1310U); return; check_point(0); case 8: check_point(90); check_assert(fch_hrt() == 4000001521U); check_point(91); ercd = wup_tsk(TASK1); check_ercd(ercd, E_OK); return; check_point(0); default: check_point(0); } check_point(0); }
void task1(intptr_t exinf) { ER ercd; check_point(1); ercd = isig_sem(SEM1); check_ercd(ercd, E_CTX); check_point(2); ercd = loc_cpu(); check_ercd(ercd, E_OK); ercd = pol_sem(SEM1); check_ercd(ercd, E_CTX); ercd = twai_sem(SEM1, TMO_POL); check_ercd(ercd, E_CTX); ercd = unl_cpu(); check_ercd(ercd, E_OK); check_point(3); ercd = dis_dsp(); check_ercd(ercd, E_OK); ercd = pol_sem(SEM1); check_ercd(ercd, E_OK); ercd = twai_sem(SEM1, TMO_POL); check_ercd(ercd, E_CTX); ercd = ena_dsp(); check_ercd(ercd, E_OK); check_point(4); ercd = chg_ipm(TMAX_INTPRI); check_ercd(ercd, E_OK); ercd = pol_sem(SEM1); check_ercd(ercd, E_TMOUT); ercd = twai_sem(SEM1, TMO_POL); check_ercd(ercd, E_CTX); ercd = chg_ipm(TIPM_ENAALL); check_ercd(ercd, E_OK); check_point(5); ercd = twai_sem(SEM1, -2); check_ercd(ercd, E_PAR); ercd = twai_sem(SEM1, TMO_POL); check_ercd(ercd, E_TMOUT); check_point(6); ercd = sta_alm(ALM1, 10); check_ercd(ercd, E_OK); check_point(7); ercd = twai_sem(SEM1, TMO_FEVR); check_ercd(ercd, E_OK); check_point(11); ercd = act_tsk(TASK3); check_ercd(ercd, E_OK); check_point(12); ercd = wai_sem(SEM1); check_ercd(ercd, E_OK); check_point(15); ercd = wai_sem(SEM1); check_ercd(ercd, E_OK); check_point(19); ercd = wai_sem(SEM1); check_ercd(ercd, E_OK); check_point(23); ercd = act_tsk(TASK2); check_ercd(ercd, E_OK); check_point(25); ercd = wai_sem(SEM1); check_ercd(ercd, E_OK); check_point(30); ercd = sta_alm(ALM1, 10); check_ercd(ercd, E_OK); check_point(31); ercd = twai_sem(SEM1, 100); check_ercd(ercd, E_RLWAI); check_point(33); ercd = sta_alm(ALM1, 100); check_ercd(ercd, E_OK); check_point(34); ercd = twai_sem(SEM1, 10); check_ercd(ercd, E_TMOUT); check_point(35); ercd = stp_alm(ALM1); check_ercd(ercd, E_OK); check_finish(36); check_point(0); }
void task1(intptr_t exinf) { ER_UINT ercd; T_RTSK rtsk; T_RMTX rmtx; test_start(__FILE__); set_bit_func(bit_kernel); check_point(1); ercd = act_tsk(TASK2); check_ercd(ercd, E_OK); ercd = sta_alm(ALM1, TEST_TIME_CP); check_ercd(ercd, E_OK); ercd = slp_tsk(); check_ercd(ercd, E_OK); check_point(4); ercd = loc_cpu(); check_ercd(ercd, E_OK); ercd = ras_ter(TASK2); check_ercd(ercd, E_CTX); ercd = unl_cpu(); check_ercd(ercd, E_OK); check_point(5); ercd = ras_ter(0U); check_ercd(ercd, E_ID); ercd = ras_ter(TNUM_TSKID + 1); check_ercd(ercd, E_ID); ercd = ras_ter(TASK1); check_ercd(ercd, E_ILUSE); ercd = ras_ter(TASK3); check_ercd(ercd, E_OBJ); check_point(6); ercd = ref_tsk(TASK2, &rtsk); check_ercd(ercd, E_OK); check_assert(rtsk.tskstat == TTS_RDY); check_point(7); ercd = ras_ter(TASK2); check_ercd(ercd, E_OK); check_point(8); ercd = ref_tsk(TASK2, &rtsk); check_ercd(ercd, E_OK); check_assert(rtsk.tskstat == TTS_DMT); check_point(9); ercd = act_tsk(TASK3); check_ercd(ercd, E_OK); check_point(12); ercd = ref_tsk(TASK3, &rtsk); check_ercd(ercd, E_OK); check_assert(rtsk.tskstat == TTS_WAI); ercd = ref_mtx(MTX1, &rmtx); check_ercd(ercd, E_OK); check_assert(rmtx.htskid == TASK3); check_assert(rmtx.wtskid == TSK_NONE); check_point(13); ercd = ras_ter(TASK3); check_ercd(ercd, E_OK); check_point(14); ercd = ref_tsk(TASK3, &rtsk); check_ercd(ercd, E_OK); check_assert(rtsk.tskstat == TTS_DMT); ercd = ref_mtx(MTX1, &rmtx); check_ercd(ercd, E_OK); check_assert(rmtx.htskid == TSK_NONE); check_assert(rmtx.wtskid == TSK_NONE); check_point(15); ercd = act_tsk(TASK3); check_ercd(ercd, E_OK); check_point(18); ercd = act_tsk(TASK4); check_ercd(ercd, E_OK); check_point(20); ercd = ref_tsk(TASK3, &rtsk); check_ercd(ercd, E_OK); check_assert(rtsk.tskstat == TTS_WAI); ercd = ref_mtx(MTX1, &rmtx); check_ercd(ercd, E_OK); check_assert(rmtx.htskid == TASK3); check_assert(rmtx.wtskid == TASK4); check_point(21); ercd = ras_ter(TASK3); check_ercd(ercd, E_OK); check_point(24); ercd = act_tsk(TASK2); check_ercd(ercd, E_OK); ercd = act_tsk(TASK2); check_ercd(ercd, E_OK); check_point(25); ercd = ref_tsk(TASK2, &rtsk); check_ercd(ercd, E_OK); check_assert(rtsk.tskstat == TTS_RDY); check_assert(rtsk.actcnt == 1U); check_point(26); ercd = ras_ter(TASK2); check_ercd(ercd, E_OK); check_point(27); ercd = ref_tsk(TASK2, &rtsk); check_ercd(ercd, E_OK); check_assert(rtsk.tskstat == TTS_RDY); check_assert(rtsk.actcnt == 0U); check_point(28); ercd = act_tsk(TASK3); check_ercd(ercd, E_OK); check_point(30); ercd = act_tsk(TASK3); check_ercd(ercd, E_OK); check_point(31); ercd = ref_tsk(TASK3, &rtsk); check_ercd(ercd, E_OK); check_assert(rtsk.tskstat == TTS_WAI); check_assert(rtsk.actcnt == 1U); check_point(32); ercd = ras_ter(TASK3); check_ercd(ercd, E_OK); check_point(34); ercd = act_tsk(TASK2); check_ercd(ercd, E_OK); ercd = slp_tsk(); check_ercd(ercd, E_OK); check_point(36); ercd = ref_tsk(TASK2, &rtsk); check_ercd(ercd, E_OK); check_assert(rtsk.tskstat == TTS_RDY); check_assert(rtsk.raster == false); check_assert(rtsk.dister == true); check_point(37); ercd = ras_ter(TASK2); check_ercd(ercd, E_OK); check_point(38); ercd = ref_tsk(TASK2, &rtsk); check_ercd(ercd, E_OK); check_assert(rtsk.tskstat == TTS_RDY); check_assert(rtsk.raster == true); check_assert(rtsk.dister == true); check_point(39); ercd = ter_tsk(TASK2); check_ercd(ercd, E_OK); ercd = act_tsk(TASK2); check_ercd(ercd, E_OK); check_point(40); ercd = ref_tsk(TASK2, &rtsk); check_ercd(ercd, E_OK); check_assert(rtsk.tskstat == TTS_RDY); check_assert(rtsk.raster == false); check_assert(rtsk.dister == false); ercd = tslp_tsk(TEST_TIME_CP); check_ercd(ercd, E_TMOUT); check_point(42); ercd = ref_tsk(TASK2, &rtsk); check_ercd(ercd, E_OK); check_assert(rtsk.tskstat == TTS_WAI); check_assert(rtsk.raster == false); check_assert(rtsk.dister == true); check_point(43); ercd = ras_ter(TASK2); check_ercd(ercd, E_OK); check_point(44); ercd = ref_tsk(TASK2, &rtsk); check_ercd(ercd, E_OK); check_assert(rtsk.tskstat == TTS_RDY); check_assert(rtsk.raster == true); check_assert(rtsk.dister == true); ercd = slp_tsk(); check_ercd(ercd, E_OK); check_point(46); ercd = act_tsk(TASK3); check_ercd(ercd, E_OK); check_point(48); ercd = ref_tsk(TASK3, &rtsk); check_ercd(ercd, E_OK); check_assert(rtsk.tskstat == TTS_WAI); check_assert(rtsk.raster == false); check_assert(rtsk.dister == true); check_point(49); ercd = ras_ter(TASK3); check_ercd(ercd, E_OK); check_point(52); ercd = ref_tsk(TASK3, &rtsk); check_ercd(ercd, E_OK); check_assert(rtsk.tskstat == TTS_DMT); check_point(53); ercd = act_tsk(TASK3); check_ercd(ercd, E_OK); check_point(55); ercd = ref_tsk(TASK3, &rtsk); check_ercd(ercd, E_OK); check_assert(rtsk.tskstat == TTS_SUS); check_point(56); ercd = ras_ter(TASK3); check_ercd(ercd, E_OK); check_point(58); ercd = ref_tsk(TASK3, &rtsk); check_ercd(ercd, E_OK); check_assert(rtsk.tskstat == TTS_DMT); check_finish(59); check_point(0); }
/* * メインタスク */ void main_task(intptr_t exinf) { char_t c; ID tskid = TASK1; int_t tskno = 1; ER_UINT ercd; PRI tskpri; #ifndef TASK_LOOP volatile ulong_t i; SYSTIM stime1, stime2; #endif /* TASK_LOOP */ #ifdef TOPPERS_SUPPORT_GET_UTM SYSUTM utime1, utime2; #endif /* TOPPERS_SUPPORT_GET_UTM */ SVC_PERROR(syslog_msk_log(LOG_UPTO(LOG_INFO), LOG_UPTO(LOG_EMERG))); syslog(LOG_NOTICE, "Sample program starts (exinf = %d).", (int_t) exinf); /* * シリアルポートの初期化 * * システムログタスクと同じシリアルポートを使う場合など,シリアル * ポートがオープン済みの場合にはここでE_OBJエラーになるが,支障は * ない. */ ercd = serial_opn_por(TASK_PORTID); if (ercd < 0 && MERCD(ercd) != E_OBJ) { syslog(LOG_ERROR, "%s (%d) reported by `serial_opn_por'.", itron_strerror(ercd), SERCD(ercd)); } SVC_PERROR(serial_ctl_por(TASK_PORTID, (IOCTL_CRLF | IOCTL_FCSND | IOCTL_FCRCV))); /* * ループ回数の設定 * * TASK_LOOPがマクロ定義されている場合,測定せずに,TASK_LOOPに定 * 義された値を,タスク内でのループ回数とする. * * MEASURE_TWICEがマクロ定義されている場合,1回目の測定結果を捨て * て,2回目の測定結果を使う.1回目の測定は長めの時間が出るため. */ #ifdef TASK_LOOP task_loop = TASK_LOOP; #else /* TASK_LOOP */ #ifdef MEASURE_TWICE task_loop = LOOP_REF; SVC_PERROR(get_tim(&stime1)); for (i = 0; i < task_loop; i++); SVC_PERROR(get_tim(&stime2)); #endif /* MEASURE_TWICE */ task_loop = LOOP_REF; SVC_PERROR(get_tim(&stime1)); for (i = 0; i < task_loop; i++); SVC_PERROR(get_tim(&stime2)); task_loop = LOOP_REF * 400UL / (stime2 - stime1); #endif /* TASK_LOOP */ tex_loop = task_loop / 5; /* * タスクの起動 */ SVC_PERROR(act_tsk(TASK1)); SVC_PERROR(act_tsk(TASK2)); SVC_PERROR(act_tsk(TASK3)); /* * メインループ */ do { SVC_PERROR(serial_rea_dat(TASK_PORTID, &c, 1)); switch (c) { case 'e': case 's': case 'S': case 'd': case 'y': case 'Y': case 'z': case 'Z': message[tskno-1] = c; break; case '1': tskno = 1; tskid = TASK1; break; case '2': tskno = 2; tskid = TASK2; break; case '3': tskno = 3; tskid = TASK3; break; case 'a': syslog(LOG_INFO, "#act_tsk(%d)", tskno); SVC_PERROR(act_tsk(tskid)); break; case 'A': syslog(LOG_INFO, "#can_act(%d)", tskno); SVC_PERROR(ercd = can_act(tskid)); if (ercd >= 0) { syslog(LOG_NOTICE, "can_act(%d) returns %d", tskno, ercd); } break; case 't': syslog(LOG_INFO, "#ter_tsk(%d)", tskno); SVC_PERROR(ter_tsk(tskid)); break; case '>': syslog(LOG_INFO, "#chg_pri(%d, HIGH_PRIORITY)", tskno); SVC_PERROR(chg_pri(tskid, HIGH_PRIORITY)); break; case '=': syslog(LOG_INFO, "#chg_pri(%d, MID_PRIORITY)", tskno); SVC_PERROR(chg_pri(tskid, MID_PRIORITY)); break; case '<': syslog(LOG_INFO, "#chg_pri(%d, LOW_PRIORITY)", tskno); SVC_PERROR(chg_pri(tskid, LOW_PRIORITY)); break; case 'G': syslog(LOG_INFO, "#get_pri(%d, &tskpri)", tskno); SVC_PERROR(ercd = get_pri(tskid, &tskpri)); if (ercd >= 0) { syslog(LOG_NOTICE, "priority of task %d is %d", tskno, tskpri); } break; case 'w': syslog(LOG_INFO, "#wup_tsk(%d)", tskno); SVC_PERROR(wup_tsk(tskid)); break; case 'W': syslog(LOG_INFO, "#can_wup(%d)", tskno); SVC_PERROR(ercd = can_wup(tskid)); if (ercd >= 0) { syslog(LOG_NOTICE, "can_wup(%d) returns %d", tskno, ercd); } break; case 'l': syslog(LOG_INFO, "#rel_wai(%d)", tskno); SVC_PERROR(rel_wai(tskid)); break; case 'u': syslog(LOG_INFO, "#sus_tsk(%d)", tskno); SVC_PERROR(sus_tsk(tskid)); break; case 'm': syslog(LOG_INFO, "#rsm_tsk(%d)", tskno); SVC_PERROR(rsm_tsk(tskid)); break; case 'x': syslog(LOG_INFO, "#ras_tex(%d, 0x0001U)", tskno); SVC_PERROR(ras_tex(tskid, 0x0001U)); break; case 'X': syslog(LOG_INFO, "#ras_tex(%d, 0x0002U)", tskno); SVC_PERROR(ras_tex(tskid, 0x0002U)); break; case 'r': syslog(LOG_INFO, "#rot_rdq(three priorities)"); SVC_PERROR(rot_rdq(HIGH_PRIORITY)); SVC_PERROR(rot_rdq(MID_PRIORITY)); SVC_PERROR(rot_rdq(LOW_PRIORITY)); break; case 'c': syslog(LOG_INFO, "#sta_cyc(1)"); SVC_PERROR(sta_cyc(CYCHDR1)); break; case 'C': syslog(LOG_INFO, "#stp_cyc(1)"); SVC_PERROR(stp_cyc(CYCHDR1)); break; case 'b': syslog(LOG_INFO, "#sta_alm(1, 5000)"); SVC_PERROR(sta_alm(ALMHDR1, 5000)); break; case 'B': syslog(LOG_INFO, "#stp_alm(1)"); SVC_PERROR(stp_alm(ALMHDR1)); break; case 'V': #ifdef TOPPERS_SUPPORT_GET_UTM SVC_PERROR(get_utm(&utime1)); SVC_PERROR(get_utm(&utime2)); syslog(LOG_NOTICE, "utime1 = %ld, utime2 = %ld", (ulong_t) utime1, (ulong_t) utime2); #else /* TOPPERS_SUPPORT_GET_UTM */ syslog(LOG_NOTICE, "get_utm is not supported."); #endif /* TOPPERS_SUPPORT_GET_UTM */ break; case 'v': SVC_PERROR(syslog_msk_log(LOG_UPTO(LOG_INFO), LOG_UPTO(LOG_EMERG))); break; case 'q': SVC_PERROR(syslog_msk_log(LOG_UPTO(LOG_NOTICE), LOG_UPTO(LOG_EMERG))); break; #ifdef BIT_KERNEL case ' ': SVC_PERROR(loc_cpu()); { extern ER bit_kernel(void); SVC_PERROR(ercd = bit_kernel()); if (ercd >= 0) { syslog(LOG_NOTICE, "bit_kernel passed."); } } SVC_PERROR(unl_cpu()); break; #endif /* BIT_KERNEL */ default: break; } } while (c != '\003' && c != 'Q'); syslog(LOG_NOTICE, "Sample program ends."); SVC_PERROR(ext_ker()); assert(0); }
void task1(intptr_t exinf) { ER_UINT ercd; T_RFLG rflg; FLGPTN flgptn; test_start(__FILE__); check_point(1); ercd = ref_flg(FLG1, &rflg); check_ercd(ercd, E_OK); check_assert(rflg.wtskid == TSK_NONE); check_assert(rflg.flgptn == 0x00); ercd = ref_flg(FLG2, &rflg); check_ercd(ercd, E_OK); check_assert(rflg.wtskid == TSK_NONE); check_assert(rflg.flgptn == 0x01); check_point(2); ercd = loc_cpu(); check_ercd(ercd, E_OK); ercd = set_flg(FLG1, 0x01); check_ercd(ercd, E_CTX); ercd = wai_flg(FLG1, 0x01, TWF_ORW, &flgptn); check_ercd(ercd, E_CTX); ercd = unl_cpu(); check_ercd(ercd, E_OK); ercd = dis_dsp(); check_ercd(ercd, E_OK); ercd = wai_flg(FLG1, 0x01, TWF_ORW, &flgptn); check_ercd(ercd, E_CTX); ercd = ena_dsp(); check_ercd(ercd, E_OK); ercd = chg_ipm(TMAX_INTPRI); check_ercd(ercd, E_OK); ercd = wai_flg(FLG1, 0x01, TWF_ORW, &flgptn); check_ercd(ercd, E_CTX); ercd = chg_ipm(TIPM_ENAALL); check_ercd(ercd, E_OK); ercd = set_flg(0, 0x01); check_ercd(ercd, E_ID); ercd = wai_flg(0, 0x01, TWF_ORW, &flgptn); check_ercd(ercd, E_ID); ercd = set_flg(TNUM_FLGID+1, 0x01); check_ercd(ercd, E_ID); ercd = wai_flg(TNUM_FLGID+1, 0x01, TWF_ORW, &flgptn); check_ercd(ercd, E_ID); ercd = wai_flg(FLG1, 0x00, TWF_ORW, &flgptn); check_ercd(ercd, E_PAR); ercd = wai_flg(FLG1, 0x01, 0U, &flgptn); check_ercd(ercd, E_PAR); ercd = wai_flg(FLG1, 0x01, (TWF_ORW|TWF_ANDW), &flgptn); check_ercd(ercd, E_PAR); ercd = set_flg(FLG1, 0x00); check_ercd(ercd, E_OK); ercd = ref_flg(FLG1, &rflg); check_ercd(ercd, E_OK); check_assert(rflg.wtskid == TSK_NONE); check_assert(rflg.flgptn == 0x00); ercd = set_flg(FLG1, 0x01); check_ercd(ercd, E_OK); ercd = ref_flg(FLG1, &rflg); check_ercd(ercd, E_OK); check_assert(rflg.wtskid == TSK_NONE); check_assert(rflg.flgptn == 0x01); ercd = set_flg(FLG1, 0x01); check_ercd(ercd, E_OK); ercd = ref_flg(FLG1, &rflg); check_ercd(ercd, E_OK); check_assert(rflg.wtskid == TSK_NONE); check_assert(rflg.flgptn == 0x01); ercd = set_flg(FLG1, 0x02); check_ercd(ercd, E_OK); ercd = ref_flg(FLG1, &rflg); check_ercd(ercd, E_OK); check_assert(rflg.wtskid == TSK_NONE); check_assert(rflg.flgptn == 0x03); ercd = clr_flg(FLG1, ~0x01); check_ercd(ercd, E_OK); ercd = set_flg(FLG1, 0x03); check_ercd(ercd, E_OK); ercd = ref_flg(FLG1, &rflg); check_ercd(ercd, E_OK); check_assert(rflg.wtskid == TSK_NONE); check_assert(rflg.flgptn == 0x03); check_point(3); ercd = act_tsk(TASK2); check_ercd(ercd, E_OK); check_point(6); ercd = set_flg(FLG1, 0x04); check_ercd(ercd, E_OK); check_point(9); ercd = dis_dsp(); check_ercd(ercd, E_OK); ercd = set_flg(FLG1, 0x08); check_ercd(ercd, E_OK); ercd = ref_flg(FLG1, &rflg); check_ercd(ercd, E_OK); check_assert(rflg.wtskid == TSK_NONE); check_assert(rflg.flgptn == 0x0f); check_point(10); ercd = ena_dsp(); check_ercd(ercd, E_OK); check_point(13); ercd = chg_ipm(TMAX_INTPRI); check_ercd(ercd, E_OK); ercd = set_flg(FLG2, 0x04); check_ercd(ercd, E_OK); ercd = ref_flg(FLG2, &rflg); check_ercd(ercd, E_OK); check_assert(rflg.wtskid == TSK_NONE); check_assert(rflg.flgptn == 0x00); check_point(14); ercd = chg_ipm(TIPM_ENAALL); check_ercd(ercd, E_OK); check_point(17); ercd = sus_tsk(TASK2); check_ercd(ercd, E_OK); ercd = set_flg(FLG2, 0x04); check_ercd(ercd, E_OK); ercd = ref_flg(FLG2, &rflg); check_ercd(ercd, E_OK); check_assert(rflg.wtskid == TSK_NONE); check_assert(rflg.flgptn == 0x00); check_point(18); ercd = rsm_tsk(TASK2); check_ercd(ercd, E_OK); check_point(21); ercd = wai_flg(FLG2, 0x02, TWF_ORW, &flgptn); check_ercd(ercd, E_ILUSE); ercd = set_flg(FLG2, 0x02); check_ercd(ercd, E_OK); ercd = wai_flg(FLG2, 0x02, TWF_ORW, &flgptn); check_ercd(ercd, E_ILUSE); check_point(22); ercd = set_flg(FLG2, 0x01); check_ercd(ercd, E_OK); check_point(25); ercd = wai_flg(FLG3, 0x01, TWF_ORW, &flgptn); check_ercd(ercd, E_OK); check_point(31); ercd = wai_flg(FLG4, 0x01, TWF_ORW, &flgptn); check_ercd(ercd, E_OK); check_point(37); ercd = clr_flg(FLG3, 0); check_ercd(ercd, E_OK); ercd = sta_alm(ALM1, 2 * TEST_TIME_CP); check_ercd(ercd, E_OK); check_point(38); ercd = wai_flg(FLG3, 0x01, TWF_ORW, &flgptn); check_ercd(ercd, E_OK); check_point(42); ercd = set_flg(FLG3, 0x02); check_ercd(ercd, E_OK); check_point(43); ercd = slp_tsk(); check_ercd(ercd, E_OK); check_point(0); }
void task1(intptr_t exinf) { ER_UINT ercd; test_start(__FILE__); set_bit_func(bit_kernel); check_point(1); ercd = act_tsk(TASK2); check_ercd(ercd, E_OK); ercd = act_tsk(TASK3); check_ercd(ercd, E_OK); ercd = tslp_tsk(1000U); check_ercd(ercd, E_TMOUT); check_point(4); ercd = ter_tsk(TASK2); check_ercd(ercd, E_OK); ercd = tslp_tsk(1000U); check_ercd(ercd, E_TMOUT); check_point(5); ercd = rcv_mbf(MBF1, buf1); check_ercd(ercd, 26); check_assert(strncmp(buf1, string2, 26) == 0); ercd = act_tsk(TASK2); check_ercd(ercd, E_OK); ercd = tslp_tsk(1000U); check_ercd(ercd, E_TMOUT); check_point(8); ercd = ter_tsk(TASK2); check_ercd(ercd, E_OK); ercd = slp_tsk(); check_ercd(ercd, E_OK); check_point(13); ercd = snd_mbf(MBF1, string3, 10); check_ercd(ercd, E_OK); check_point(15); ercd = rcv_mbf(MBF1, buf1); check_ercd(ercd, 10); check_assert(strncmp(buf1, string3, 10) == 0); ercd = act_tsk(TASK2); check_ercd(ercd, E_OK); ercd = tslp_tsk(1000U); check_ercd(ercd, E_TMOUT); check_point(18); ercd = rel_wai(TASK2); check_ercd(ercd, E_OK); ercd = tslp_tsk(1000U); check_ercd(ercd, E_TMOUT); check_point(20); ercd = rcv_mbf(MBF1, buf1); check_ercd(ercd, 26); check_assert(strncmp(buf1, string2, 26) == 0); ercd = wup_tsk(TASK2); check_ercd(ercd, E_OK); ercd = tslp_tsk(1000U); check_ercd(ercd, E_TMOUT); check_point(23); ercd = rel_wai(TASK2); check_ercd(ercd, E_OK); ercd = slp_tsk(); check_ercd(ercd, E_OK); check_point(29); ercd = snd_mbf(MBF1, string3, 10); check_ercd(ercd, E_OK); check_point(31); ercd = rcv_mbf(MBF1, buf1); check_ercd(ercd, 10); check_assert(strncmp(buf1, string3, 10) == 0); ercd = tslp_tsk(1000U); check_ercd(ercd, E_TMOUT); check_point(34); ercd = sta_alm(ALM1, 1000U); check_ercd(ercd, E_OK); ercd = slp_tsk(); check_ercd(ercd, E_OK); check_point(36); ercd = tslp_tsk(1000U); check_ercd(ercd, E_TMOUT); check_point(38); ercd = rcv_mbf(MBF1, buf1); check_ercd(ercd, 26); check_assert(strncmp(buf1, string2, 26) == 0); ercd = wup_tsk(TASK2); check_ercd(ercd, E_OK); ercd = tslp_tsk(1000U); check_ercd(ercd, E_TMOUT); check_point(41); ercd = sta_alm(ALM1, 1000U); check_ercd(ercd, E_OK); ercd = slp_tsk(); check_ercd(ercd, E_OK); check_point(48); ercd = snd_mbf(MBF1, string3, 10); check_ercd(ercd, E_OK); check_point(51); ercd = rcv_mbf(MBF1, buf1); check_ercd(ercd, 10); check_assert(strncmp(buf1, string3, 10) == 0); ercd = wup_tsk(TASK3); check_ercd(ercd, E_OK); ercd = slp_tsk(); check_ercd(ercd, E_OK); check_point(63); ercd = snd_mbf(MBF1, string3, 10); check_ercd(ercd, E_OK); check_point(65); ercd = rcv_mbf(MBF1, buf1); check_ercd(ercd, 10); check_assert(strncmp(buf1, string3, 10) == 0); ercd = slp_tsk(); check_ercd(ercd, E_OK); check_point(0); }
/* * メインタスク */ void main_task(intptr_t exinf) { char c; ID tskid = TASK1; int_t tskno = 1; ER_UINT ercd; PRI tskpri; #ifndef TASK_LOOP volatile ulong_t i; SYSTIM stime1, stime2; #endif /* TASK_LOOP */ HRTCNT hrtcnt1, hrtcnt2; SVC_PERROR(syslog_msk_log(LOG_UPTO(LOG_INFO), LOG_UPTO(LOG_EMERG))); syslog(LOG_NOTICE, "Sample program starts (exinf = %d).", (int_t) exinf); /* * シリアルポートの初期化 * * システムログタスクと同じシリアルポートを使う場合など,シリアル * ポートがオープン済みの場合にはここでE_OBJエラーになるが,支障は * ない. */ ercd = serial_opn_por(TASK_PORTID); if (ercd < 0 && MERCD(ercd) != E_OBJ) { syslog(LOG_ERROR, "%s (%d) reported by `serial_opn_por'.", itron_strerror(ercd), SERCD(ercd)); } SVC_PERROR(serial_ctl_por(TASK_PORTID, (IOCTL_CRLF | IOCTL_FCSND | IOCTL_FCRCV))); /* * ループ回数の設定 * * 並行実行されるタスク内での空ループの回数(task_loop)は,空ルー * プの実行時間が約0.4秒になるように設定する.この設定のために, * LOOP_REF回の空ループの実行時間を,その前後でget_timを呼ぶことで * 測定し,その測定結果から空ループの実行時間が0.4秒になるループ回 * 数を求め,task_loopに設定する. * * LOOP_REFは,デフォルトでは1,000,000に設定しているが,想定したよ * り遅いプロセッサでは,サンプルプログラムの実行開始に時間がかか * りすぎるという問題を生じる.逆に想定したより速いプロセッサでは, * LOOP_REF回の空ループの実行時間が短くなり,task_loopに設定する値 * の誤差が大きくなるという問題がある. * * そこで,そのようなターゲットでは,target_test.hで,LOOP_REFを適 * 切な値に定義するのが望ましい. * * また,task_loopの値を固定したい場合には,その値をTASK_LOOPにマ * クロ定義する.TASK_LOOPがマクロ定義されている場合,上記の測定を * 行わずに,TASK_LOOPに定義された値を空ループの回数とする. * * ターゲットによっては,空ループの実行時間の1回目の測定で,本来よ * りも長めになるものがある.このようなターゲットでは,MEASURE_TWICE * をマクロ定義することで,1回目の測定結果を捨てて,2回目の測定結果 * を使う. */ #ifdef TASK_LOOP task_loop = TASK_LOOP; #else /* TASK_LOOP */ #ifdef MEASURE_TWICE task_loop = LOOP_REF; SVC_PERROR(get_tim(&stime1)); for (i = 0; i < task_loop; i++); SVC_PERROR(get_tim(&stime2)); #endif /* MEASURE_TWICE */ task_loop = LOOP_REF; SVC_PERROR(get_tim(&stime1)); for (i = 0; i < task_loop; i++); SVC_PERROR(get_tim(&stime2)); task_loop = LOOP_REF * 400LU / (ulong_t)(stime2 - stime1) * 1000LU; #endif /* TASK_LOOP */ /* * タスクの起動 */ SVC_PERROR(act_tsk(TASK1)); SVC_PERROR(act_tsk(TASK2)); SVC_PERROR(act_tsk(TASK3)); /* * メインループ */ do { SVC_PERROR(serial_rea_dat(TASK_PORTID, &c, 1)); switch (c) { case 'e': case 's': case 'S': case 'd': case 'y': case 'Y': case 'z': case 'Z': message[tskno-1] = c; break; case '1': tskno = 1; tskid = TASK1; break; case '2': tskno = 2; tskid = TASK2; break; case '3': tskno = 3; tskid = TASK3; break; case 'a': syslog(LOG_INFO, "#act_tsk(%d)", tskno); SVC_PERROR(act_tsk(tskid)); break; case 'A': syslog(LOG_INFO, "#can_act(%d)", tskno); SVC_PERROR(ercd = can_act(tskid)); if (ercd >= 0) { syslog(LOG_NOTICE, "can_act(%d) returns %d", tskno, ercd); } break; case 't': syslog(LOG_INFO, "#ter_tsk(%d)", tskno); SVC_PERROR(ter_tsk(tskid)); break; case '>': syslog(LOG_INFO, "#chg_pri(%d, HIGH_PRIORITY)", tskno); SVC_PERROR(chg_pri(tskid, HIGH_PRIORITY)); break; case '=': syslog(LOG_INFO, "#chg_pri(%d, MID_PRIORITY)", tskno); SVC_PERROR(chg_pri(tskid, MID_PRIORITY)); break; case '<': syslog(LOG_INFO, "#chg_pri(%d, LOW_PRIORITY)", tskno); SVC_PERROR(chg_pri(tskid, LOW_PRIORITY)); break; case 'G': syslog(LOG_INFO, "#get_pri(%d, &tskpri)", tskno); SVC_PERROR(ercd = get_pri(tskid, &tskpri)); if (ercd >= 0) { syslog(LOG_NOTICE, "priority of task %d is %d", tskno, tskpri); } break; case 'w': syslog(LOG_INFO, "#wup_tsk(%d)", tskno); SVC_PERROR(wup_tsk(tskid)); break; case 'W': syslog(LOG_INFO, "#can_wup(%d)", tskno); SVC_PERROR(ercd = can_wup(tskid)); if (ercd >= 0) { syslog(LOG_NOTICE, "can_wup(%d) returns %d", tskno, ercd); } break; case 'l': syslog(LOG_INFO, "#rel_wai(%d)", tskno); SVC_PERROR(rel_wai(tskid)); break; case 'u': syslog(LOG_INFO, "#sus_tsk(%d)", tskno); SVC_PERROR(sus_tsk(tskid)); break; case 'm': syslog(LOG_INFO, "#rsm_tsk(%d)", tskno); SVC_PERROR(rsm_tsk(tskid)); break; case 'x': syslog(LOG_INFO, "#ras_ter(%d)", tskno); SVC_PERROR(ras_ter(tskid)); break; case 'r': syslog(LOG_INFO, "#rot_rdq(three priorities)"); SVC_PERROR(rot_rdq(HIGH_PRIORITY)); SVC_PERROR(rot_rdq(MID_PRIORITY)); SVC_PERROR(rot_rdq(LOW_PRIORITY)); break; case 'c': syslog(LOG_INFO, "#sta_cyc(1)"); SVC_PERROR(sta_cyc(CYCHDR1)); break; case 'C': syslog(LOG_INFO, "#stp_cyc(1)"); SVC_PERROR(stp_cyc(CYCHDR1)); break; case 'b': syslog(LOG_INFO, "#sta_alm(1, 5000000)"); SVC_PERROR(sta_alm(ALMHDR1, 5000000)); break; case 'B': syslog(LOG_INFO, "#stp_alm(1)"); SVC_PERROR(stp_alm(ALMHDR1)); break; case 'V': hrtcnt1 = fch_hrt(); hrtcnt2 = fch_hrt(); syslog(LOG_NOTICE, "hrtcnt1 = %tu, hrtcnt2 = %tu", hrtcnt1, hrtcnt2); break; case 'o': #ifdef TOPPERS_SUPPORT_OVRHDR syslog(LOG_INFO, "#sta_ovr(%d, 2000000)", tskno); SVC_PERROR(sta_ovr(tskid, 2000000)); #else /* TOPPERS_SUPPORT_OVRHDR */ syslog(LOG_NOTICE, "sta_ovr is not supported."); #endif /* TOPPERS_SUPPORT_OVRHDR */ break; case 'O': #ifdef TOPPERS_SUPPORT_OVRHDR syslog(LOG_INFO, "#stp_ovr(%d)", tskno); SVC_PERROR(stp_ovr(tskid)); #else /* TOPPERS_SUPPORT_OVRHDR */ syslog(LOG_NOTICE, "stp_ovr is not supported."); #endif /* TOPPERS_SUPPORT_OVRHDR */ break; case 'v': SVC_PERROR(syslog_msk_log(LOG_UPTO(LOG_INFO), LOG_UPTO(LOG_EMERG))); break; case 'q': SVC_PERROR(syslog_msk_log(LOG_UPTO(LOG_NOTICE), LOG_UPTO(LOG_EMERG))); break; #ifdef BIT_KERNEL case ' ': SVC_PERROR(loc_cpu()); { extern ER bit_kernel(void); SVC_PERROR(ercd = bit_kernel()); if (ercd >= 0) { syslog(LOG_NOTICE, "bit_kernel passed."); } } SVC_PERROR(unl_cpu()); break; #endif /* BIT_KERNEL */ default: break; } } while (c != '\003' && c != 'Q'); syslog(LOG_NOTICE, "Sample program ends."); SVC_PERROR(ext_ker()); assert(0); }
void task3(intptr_t exinf) { ER_UINT ercd; check_point(3); ercd = snd_mbf(MBF1, string2, 26); check_ercd(ercd, E_OK); check_point(7); ercd = snd_mbf(MBF1, string3, 10); check_ercd(ercd, E_OK); check_point(9); ercd = rcv_mbf(MBF1, buf1); check_ercd(ercd, 10); check_assert(strncmp(buf1, string3, 10) == 0); check_point(10); ercd = act_tsk(TASK2); check_ercd(ercd, E_OK); check_point(12); ercd = wup_tsk(TASK1); check_ercd(ercd, E_OK); check_point(14); ercd = ter_tsk(TASK2); check_ercd(ercd, E_OK); check_point(17); ercd = snd_mbf(MBF1, string2, 26); check_ercd(ercd, E_OK); check_point(22); ercd = snd_mbf(MBF1, string3, 10); check_ercd(ercd, E_OK); check_point(25); ercd = rcv_mbf(MBF1, buf1); check_ercd(ercd, 10); check_assert(strncmp(buf1, string3, 10) == 0); check_point(26); ercd = wup_tsk(TASK2); check_ercd(ercd, E_OK); check_point(28); ercd = wup_tsk(TASK1); check_ercd(ercd, E_OK); check_point(30); ercd = rel_wai(TASK2); check_ercd(ercd, E_OK); check_point(33); ercd = snd_mbf(MBF1, string2, 26); check_ercd(ercd, E_OK); check_point(40); ercd = snd_mbf(MBF1, string3, 10); check_ercd(ercd, E_OK); check_point(44); ercd = rcv_mbf(MBF1, buf1); check_ercd(ercd, 10); check_assert(strncmp(buf1, string3, 10) == 0); check_point(45); ercd = wup_tsk(TASK2); check_ercd(ercd, E_OK); check_point(47); ercd = wup_tsk(TASK1); check_ercd(ercd, E_OK); check_point(49); ercd = sta_alm(ALM1, 1000U); check_ercd(ercd, E_OK); ercd = slp_tsk(); check_ercd(ercd, E_OK); check_point(53); ercd = snd_mbf(MBF1, string2, 26); check_ercd(ercd, E_OK); check_point(57); ercd = snd_mbf(MBF1, string3, 10); check_ercd(ercd, E_OK); check_point(59); ercd = rcv_mbf(MBF1, buf1); check_ercd(ercd, 10); check_assert(strncmp(buf1, string3, 10) == 0); check_point(60); ercd = wup_tsk(TASK2); check_ercd(ercd, E_OK); check_point(62); ercd = wup_tsk(TASK1); check_ercd(ercd, E_OK); check_point(64); ercd = slp_tsk(); check_ercd(ercd, E_OK); check_point(0); }