/* * シリアルI/Oポートへの非同期文字出力 */ void sio_asnd_chr( INT c ) { SIOPCB* siopcb ; UH uhBase ; int i ; /* * CPUロック状態にする */ BOOL bLocked ; if ( sns_loc() ) bLocked = TRUE ; else { bLocked = FALSE ; if ( sns_ctx() ) iloc_cpu() ; else loc_cpu() ; } /* * 非同期用ポートを開く */ if ( ( siopcb = sio_opn_por( LOGTASK_PORTID, siopcb_table[LOGTASK_PORTID-1].vpiExinf ) ) != NULL ) { uhBase = siopcb->uhBase ; /* * LFならまずCRを送出 */ if ( c == '\n' ) { for ( i = 0 ; i < TXREADY_TIMEOUT ; i++ ) { if ( __SFR(uhBase) & __UxCR_TXEMPTY ) break ; } if ( i < TXREADY_TIMEOUT ) { __SFRW(uhBase+4) = __UxTX_STOPBIT | '\r' ; } } /* * データ送出 */ for ( i = 0 ; i < TXREADY_TIMEOUT ; i++ ) { if ( __SFR(uhBase) & __UxCR_TXEMPTY ) break ; } if ( i < TXREADY_TIMEOUT ) { __SFRW(uhBase+4) = __UxTX_STOPBIT | c ; } } /* * CPUロックを元に戻す */ if ( !bLocked ) { if ( sns_ctx() ) iunl_cpu() ; else unl_cpu() ; } }
void cpuexc_handler(void *p_excinf) { ER ercd; switch (++cpuexc_count) { case 1: check_point(3); check_state_i(true, false, false, true, false); check_assert(xsns_xpn(p_excinf) == false); check_assert(xsns_dpn(p_excinf) == false); check_point(4); ercd = iact_tsk(TASK2); check_ercd(ercd, E_OK); ercd = iloc_cpu(); check_ercd(ercd, E_OK); break; case 2: check_point(11); check_state_i(true, false, false, true, false); check_assert(xsns_xpn(p_excinf) == false); check_assert(xsns_dpn(p_excinf) == false); check_point(12); ercd = iras_tex(TASK1, 1U); check_ercd(ercd, E_OK); ercd = iloc_cpu(); check_ercd(ercd, E_OK); break; default: check_point(0); break; } }
void alarm1_handler(intptr_t exinf) { ER ercd; check_point(3); check_state_i(true, false, true, true, false); ercd = iloc_cpu(); check_ercd(ercd, E_OK); RAISE_CPU_EXCEPTION; check_point(6); check_state_i(true, true, true, true, false); alm1_flag = true; }
void cpuexc_handler(void *p_excinf) { ER ercd; check_point(3); check_state_i(true, false, true, true, false); check_assert(xsns_xpn(p_excinf) == false); check_assert(xsns_dpn(p_excinf) == true); check_point(4); ercd = iras_tex(TASK1, 1U); check_ercd(ercd, E_OK); ercd = iloc_cpu(); check_ercd(ercd, E_OK); }
void cpuexc_handler(void *p_excinf) { ER ercd; check_point(3); check_state_i(true, false, false, true, false); if (xsns_xpn(p_excinf) == true) { syslog_0(LOG_WARNING, "xsns_xpn returns true."); } check_assert(xsns_dpn(p_excinf) == true); check_point(4); ercd = iras_tex(TASK1, 1U); check_ercd(ercd, E_OK); ercd = iloc_cpu(); check_ercd(ercd, E_OK); }
void cpuexc_handler(void *p_excinf) { ER ercd; check_point(3); check_state_i(true, false, false, true, true); check_assert(xsns_xpn(p_excinf) == true); check_assert(xsns_dpn(p_excinf) == true); #ifdef CANNOT_RETURN_CPUEXC check_finish(4); #endif /* CANNOT_RETURN_CPUEXC */ check_point(4); ercd = iloc_cpu(); check_ercd(ercd, E_OK); }
void cyclic_handler(intptr_t exinf) { SYSUTM sysutm, prev_sysutm; char *prev_sysutm_pos; iloc_cpu(); get_utm(&sysutm); prev_sysutm = recent_sysutm; prev_sysutm_pos = recent_sysutm_pos; recent_sysutm = sysutm; recent_sysutm_pos = "CYC"; iunl_cpu(); if (prev_sysutm > sysutm) { syslog(LOG_NOTICE, "system performance time goes back: %ld(%s) %ld(CYC)", ((long_t) prev_sysutm), prev_sysutm_pos, ((ulong_t) sysutm)); } cyclic_count += 1; }
void alarm1_handler(intptr_t exinf) { ER ercd; switch (++alarm1_count) { case 1: check_point(8); ercd = pol_sem(SEM1); check_ercd(ercd, E_CTX); ercd = twai_sem(SEM1, TMO_POL); check_ercd(ercd, E_CTX); check_point(9); ercd = iloc_cpu(); check_ercd(ercd, E_OK); ercd = isig_sem(SEM1); check_ercd(ercd, E_CTX); ercd = iunl_cpu(); check_ercd(ercd, E_OK); check_point(10); ercd = isig_sem(SEM1); check_ercd(ercd, E_OK); return; check_point(0); case 2: check_point(14); ercd = isig_sem(SEM1); check_ercd(ercd, E_OK); signal_var(); return; check_point(0); case 3: check_point(17); ercd = isig_sem(SEM1); check_ercd(ercd, E_OK); signal_var(); return; check_point(0); case 4: check_point(21); ercd = isig_sem(SEM1); check_ercd(ercd, E_OK); signal_var(); return; check_point(0); case 5: check_point(28); ercd = isig_sem(SEM1); check_ercd(ercd, E_OK); signal_var(); return; check_point(0); case 6: check_point(32); ercd = irel_wai(TASK1); check_ercd(ercd, E_OK); return; check_point(0); } check_point(0); }