void task1(intptr_t exinf) { ER ercd; T_RTEX rtex; /* * check init state */ check_point(1); check_state(false, false, TIPM_ENAALL, false, false, true); ercd = ref_tex(TSK_SELF, &rtex); check_ercd(ercd, E_OK); check_assert((rtex.texstat & TTEX_DIS) != 0); check_assert(rtex.pndptn == 0); /* * error check of ras_tex */ ercd = ras_tex(TASK3, 0x0001); check_ercd(ercd, E_OBJ); ercd = ras_tex(TASK4, 0x0001); check_ercd(ercd, E_OBJ); /* * error check of ref_tex */ ercd = ref_tex(TASK3, &rtex); check_ercd(ercd, E_OBJ); ercd = ref_tex(TASK4, &rtex); check_ercd(ercd, E_OBJ); /* * enable task exception */ check_point(2); ercd = ena_tex(); check_ercd(ercd, E_OK); check_state(false, false, TIPM_ENAALL, false, false, false); ercd = ref_tex(TSK_SELF, &rtex); check_ercd(ercd, E_OK); check_assert((rtex.texstat & TTEX_ENA) != 0); check_assert(rtex.pndptn == 0); /* * raise task exception request */ check_point(3); ercd = ras_tex(TSK_SELF, 0x0001); /* task exception routine runs here */ check_ercd(ercd, E_OK); /* * check the state when task exception routine returns */ check_point(6); check_state(false, false, TIPM_ENAALL, false, false, false); /* * dispatch disabled, task exception disabled */ check_point(7); ercd = dis_dsp(); check_ercd(ercd, E_OK); ercd = dis_tex(); check_ercd(ercd, E_OK); check_state(false, false, TIPM_ENAALL, true, true, true); /* * raise task exception request */ check_point(8); ercd = ras_tex(TASK1, 0x0002); check_ercd(ercd, E_OK); ercd = ref_tex(TSK_SELF, &rtex); check_ercd(ercd, E_OK); check_assert((rtex.texstat & TTEX_DIS) != 0); check_assert(rtex.pndptn == 0x0002); /* * enable task exception */ check_point(9); ercd = ena_tex(); /* task exception routine runs here */ check_ercd(ercd, E_OK); /* * check the state when task exception routine returns */ check_point(20); check_state(false, false, TIPM_ENAALL, true, true, false); /* * switch task2 */ check_point(21); ercd = ena_dsp(); check_ercd(ercd, E_OK); ercd = rot_rdq(TPRI_SELF); /* other tasks run here */ check_ercd(ercd, E_OK); /* * raise the task exception of task2 */ check_point(27); ercd = ras_tex(TASK2, 0x0001); check_ercd(ercd, E_OK); ercd = ref_tex(TASK2, &rtex); check_ercd(ercd, E_OK); check_assert((rtex.texstat & TTEX_ENA) != 0); check_assert(rtex.pndptn == 0x0001); /* * switch to task2 */ check_point(28); ercd = rot_rdq(TPRI_SELF); /* other tasks run here */ check_ercd(ercd, E_OK); /* * task exits */ check_point(34); }
void task1(intptr_t exinf) { ER_UINT ercd; T_RTEX rtex; test_start(__FILE__); check_point(1); check_state(false, false, TIPM_ENAALL, false, false, true); ercd = ref_tex(TSK_SELF, &rtex); check_ercd(ercd, E_OK); check_assert((rtex.texstat & TTEX_DIS) != 0U); check_assert(rtex.pndptn == 0U); ercd = ras_tex(TASK3, 0x0001); check_ercd(ercd, E_OBJ); ercd = ras_tex(TASK4, 0x0001); check_ercd(ercd, E_OBJ); ercd = ref_tex(TASK3, &rtex); check_ercd(ercd, E_OBJ); ercd = ref_tex(TASK4, &rtex); check_ercd(ercd, E_OBJ); check_point(2); ercd = ena_tex(); check_ercd(ercd, E_OK); check_state(false, false, TIPM_ENAALL, false, false, false); ercd = ref_tex(TSK_SELF, &rtex); check_ercd(ercd, E_OK); check_assert((rtex.texstat & TTEX_ENA) != 0U); check_assert(rtex.pndptn == 0U); check_point(3); ercd = ras_tex(TSK_SELF, 0x0001); check_ercd(ercd, E_OK); check_point(6); check_state(false, false, TIPM_ENAALL, false, false, false); check_point(7); ercd = dis_dsp(); check_ercd(ercd, E_OK); ercd = dis_tex(); check_ercd(ercd, E_OK); check_state(false, false, TIPM_ENAALL, true, true, true); check_point(8); ercd = ras_tex(TASK1, 0x0002); check_ercd(ercd, E_OK); ercd = ref_tex(TSK_SELF, &rtex); check_ercd(ercd, E_OK); check_assert((rtex.texstat & TTEX_DIS) != 0); check_assert(rtex.pndptn == 0x0002); check_point(9); ercd = ena_tex(); check_ercd(ercd, E_OK); check_point(20); check_state(false, false, TIPM_ENAALL, true, true, false); check_point(21); ercd = ena_dsp(); check_ercd(ercd, E_OK); ercd = rot_rdq(TPRI_SELF); check_ercd(ercd, E_OK); check_point(27); ercd = ras_tex(TASK2, 0x0001); check_ercd(ercd, E_OK); ercd = ref_tex(TASK2, &rtex); check_ercd(ercd, E_OK); check_point(28); ercd = rot_rdq(TPRI_SELF); check_ercd(ercd, E_OK); check_point(34); return; check_point(0); }
void task1(intptr_t exinf) { ER ercd; T_RTEX rtex; /* * 初期状態のチェック */ check_point(1); check_state(false, false, TIPM_ENAALL, false, false, true); ercd = ref_tex(TSK_SELF, &rtex); check_ercd(ercd, E_OK); check_assert((rtex.texstat & TTEX_DIS) != 0); check_assert(rtex.pndptn == 0); /* * ras_texのエラー検出 */ ercd = ras_tex(TASK3, 0x0001); check_ercd(ercd, E_OBJ); ercd = ras_tex(TASK4, 0x0001); check_ercd(ercd, E_OBJ); /* * ref_texのエラー検出 */ ercd = ref_tex(TASK3, &rtex); check_ercd(ercd, E_OBJ); ercd = ref_tex(TASK4, &rtex); check_ercd(ercd, E_OBJ); /* * タスク例外処理の許可 */ check_point(2); ercd = ena_tex(); check_ercd(ercd, E_OK); check_state(false, false, TIPM_ENAALL, false, false, false); ercd = ref_tex(TSK_SELF, &rtex); check_ercd(ercd, E_OK); check_assert((rtex.texstat & TTEX_ENA) != 0); check_assert(rtex.pndptn == 0); /* * タスク例外処理を要求 */ check_point(3); ercd = ras_tex(TSK_SELF, 0x0001); /* ここでタスク例外処理ルーチンが動作する */ check_ercd(ercd, E_OK); /* * タスク例外処理からのリターンにより元の状態に戻っていることを * チェック */ check_point(6); check_state(false, false, TIPM_ENAALL, false, false, false); /* * ディスパッチ禁止,割込み優先度マスク変更,タスク例外処理禁止 */ check_point(7); ercd = dis_dsp(); check_ercd(ercd, E_OK); ercd = chg_ipm(TMIN_INTPRI); check_ercd(ercd, E_OK); ercd = dis_tex(); check_ercd(ercd, E_OK); check_state(false, false, TMIN_INTPRI, true, true, true); /* * タスク例外処理を要求 */ check_point(8); ercd = ras_tex(TASK1, 0x0002); check_ercd(ercd, E_OK); ercd = ref_tex(TSK_SELF, &rtex); check_ercd(ercd, E_OK); check_assert((rtex.texstat & TTEX_DIS) != 0); check_assert(rtex.pndptn == 0x0002); /* * タスク例外処理を許可 */ check_point(9); ercd = ena_tex(); /* ここでタスク例外処理ルーチンが動作する */ check_ercd(ercd, E_OK); /* * タスク例外処理からのリターンにより元の状態に戻っていることを * チェック */ check_point(19); check_state(false, false, TMIN_INTPRI, true, true, false); /* * タスク2に切り換える */ check_point(20); ercd = ena_dsp(); check_ercd(ercd, E_OK); ercd = chg_ipm(TIPM_ENAALL); check_ercd(ercd, E_OK); ercd = rot_rdq(TPRI_SELF); /* ここで他のタスクが動作する */ check_ercd(ercd, E_OK); /* * タスク2に対してタスク例外処理を要求 */ check_point(26); ercd = ras_tex(TASK2, 0x0001); check_ercd(ercd, E_OK); ercd = ref_tex(TASK2, &rtex); check_ercd(ercd, E_OK); check_assert((rtex.texstat & TTEX_ENA) != 0); check_assert(rtex.pndptn == 0x0001); /* * タスク2に切り換える */ check_point(27); ercd = rot_rdq(TPRI_SELF); /* ここで他のタスクが動作する */ check_ercd(ercd, E_OK); /* * タスク終了 */ check_point(33); }