#include <t_stddef.h>
#include "target_kernel.h"
データ構造 | |
struct | t_msg |
struct | t_msg_pri |
struct | t_rtsk |
struct | t_rtex |
struct | t_rsem |
struct | t_rflg |
struct | t_rdtq |
struct | t_rpdq |
struct | t_rmbx |
struct | t_rmpf |
struct | t_rcyc |
struct | t_ralm |
マクロ定義 | |
#define | TOPPERS_STK_T intptr_t |
#define | TOPPERS_MPF_T intptr_t |
#define | TA_ACT UINT_C(0x02) |
#define | TA_TPRI UINT_C(0x01) |
#define | TA_MPRI UINT_C(0x02) |
#define | TA_WMUL UINT_C(0x02) |
#define | TA_CLR UINT_C(0x04) |
#define | TA_STA UINT_C(0x02) |
#define | TA_NONKERNEL UINT_C(0x02) |
#define | TA_ENAINT UINT_C(0x01) |
#define | TA_EDGE UINT_C(0x02) |
#define | TWF_ORW UINT_C(0x01) |
#define | TWF_ANDW UINT_C(0x02) |
#define | TTS_RUN UINT_C(0x01) |
#define | TTS_RDY UINT_C(0x02) |
#define | TTS_WAI UINT_C(0x04) |
#define | TTS_SUS UINT_C(0x08) |
#define | TTS_WAS UINT_C(0x0c) |
#define | TTS_DMT UINT_C(0x10) |
#define | TTW_SLP UINT_C(0x0001) |
#define | TTW_DLY UINT_C(0x0002) |
#define | TTW_SEM UINT_C(0x0004) |
#define | TTW_FLG UINT_C(0x0008) |
#define | TTW_SDTQ UINT_C(0x0010) |
#define | TTW_RDTQ UINT_C(0x0020) |
#define | TTW_SPDQ UINT_C(0x0100) |
#define | TTW_RPDQ UINT_C(0x0200) |
#define | TTW_MBX UINT_C(0x0040) |
#define | TTW_MPF UINT_C(0x2000) |
#define | TTEX_ENA UINT_C(0x01) |
#define | TTEX_DIS UINT_C(0x02) |
#define | TCYC_STP UINT_C(0x01) |
#define | TCYC_STA UINT_C(0x02) |
#define | TALM_STP UINT_C(0x01) |
#define | TALM_STA UINT_C(0x02) |
#define | TSK_SELF 0 |
#define | TSK_NONE 0 |
#define | TPRI_SELF 0 |
#define | TPRI_INI 0 |
#define | TIPM_ENAALL 0 |
#define | TMIN_TPRI 1 |
#define | TMAX_TPRI 16 |
#define | TMIN_DPRI 1 |
#define | TMAX_DPRI 16 |
#define | TMIN_MPRI 1 |
#define | TMAX_MPRI 16 |
#define | TKERNEL_MAKER UINT_C(0x0118) |
#define | TKERNEL_PRID UINT_C(0x0007) |
#define | TKERNEL_SPVER UINT_C(0xf5b0) |
#define | TKERNEL_PRVER UINT_C(0x1031) |
#define | TMAX_ACTCNT UINT_C(1) |
#define | TMAX_WUPCNT UINT_C(1) |
#define | TBIT_TEXPTN (sizeof(TEXPTN) * CHAR_BIT) |
#define | TBIT_FLGPTN (sizeof(FLGPTN) * CHAR_BIT) |
#define | TOPPERS_COUNT_SZ(sz, unit) (((sz) + (unit) - 1) / (unit)) |
#define | TOPPERS_ROUND_SZ(sz, unit) (((sz) + (unit) - 1) & ~((unit) - 1)) |
#define | COUNT_STK_T(sz) TOPPERS_COUNT_SZ(sz, sizeof(STK_T)) |
#define | ROUND_STK_T(sz) TOPPERS_ROUND_SZ(sz, sizeof(STK_T)) |
#define | COUNT_MPF_T(sz) TOPPERS_COUNT_SZ(sz, sizeof(MPF_T)) |
#define | ROUND_MPF_T(sz) TOPPERS_ROUND_SZ(sz, sizeof(MPF_T)) |
#define | TSZ_MPF(blkcnt, blksz) ((blkcnt) * ROUND_MPF_T(blksz)) |
#define | TMAX_MAXSEM UINT_MAX |
型定義 | |
typedef uint_t | TEXPTN |
typedef uint_t | FLGPTN |
typedef uint_t | INHNO |
typedef uint_t | INTNO |
typedef uint_t | EXCNO |
typedef void(* | TASK )(intptr_t exinf) |
typedef void(* | TEXRTN )(TEXPTN texptn, intptr_t exinf) |
typedef void(* | INTHDR )(void) |
typedef void(* | ISR )(intptr_t exinf) |
typedef void(* | CYCHDR )(intptr_t exinf) |
typedef void(* | ALMHDR )(intptr_t exinf) |
typedef void(* | EXCHDR )(void *p_excinf) |
typedef void(* | INIRTN )(intptr_t exinf) |
typedef void(* | TERRTN )(intptr_t exinf) |
typedef TOPPERS_STK_T | STK_T |
typedef TOPPERS_MPF_T | MPF_T |
typedef struct t_msg | T_MSG |
typedef struct t_msg_pri | T_MSG_PRI |
typedef struct t_rtsk | T_RTSK |
typedef struct t_rtex | T_RTEX |
typedef struct t_rsem | T_RSEM |
typedef struct t_rflg | T_RFLG |
typedef struct t_rdtq | T_RDTQ |
typedef struct t_rpdq | T_RPDQ |
typedef struct t_rmbx | T_RMBX |
typedef struct t_rmpf | T_RMPF |
typedef struct t_rcyc | T_RCYC |
typedef struct t_ralm | T_RALM |
関数 | |
ER | act_tsk (ID tskid) throw () |
ER | iact_tsk (ID tskid) throw () |
ER_UINT | can_act (ID tskid) throw () |
ER | ext_tsk (void) throw () |
ER | ter_tsk (ID tskid) throw () |
ER | chg_pri (ID tskid, PRI tskpri) throw () |
ER | get_pri (ID tskid, PRI *p_tskpri) throw () |
ER | get_inf (intptr_t *p_exinf) throw () |
ER | ref_tsk (ID tskid, T_RTSK *pk_rtsk) throw () |
ER | slp_tsk (void) throw () |
ER | tslp_tsk (TMO tmout) throw () |
ER | wup_tsk (ID tskid) throw () |
ER | iwup_tsk (ID tskid) throw () |
ER_UINT | can_wup (ID tskid) throw () |
ER | rel_wai (ID tskid) throw () |
ER | irel_wai (ID tskid) throw () |
ER | sus_tsk (ID tskid) throw () |
ER | rsm_tsk (ID tskid) throw () |
ER | dly_tsk (RELTIM dlytim) throw () |
ER | ras_tex (ID tskid, TEXPTN rasptn) throw () |
ER | iras_tex (ID tskid, TEXPTN rasptn) throw () |
ER | dis_tex (void) throw () |
ER | ena_tex (void) throw () |
bool_t | sns_tex (void) throw () |
ER | ref_tex (ID tskid, T_RTEX *pk_rtex) throw () |
ER | sig_sem (ID semid) throw () |
ER | isig_sem (ID semid) throw () |
ER | wai_sem (ID semid) throw () |
ER | pol_sem (ID semid) throw () |
ER | twai_sem (ID semid, TMO tmout) throw () |
ER | ini_sem (ID semid) throw () |
ER | ref_sem (ID semid, T_RSEM *pk_rsem) throw () |
ER | set_flg (ID flgid, FLGPTN setptn) throw () |
ER | iset_flg (ID flgid, FLGPTN setptn) throw () |
ER | clr_flg (ID flgid, FLGPTN clrptn) throw () |
ER | wai_flg (ID flgid, FLGPTN waiptn, MODE wfmode, FLGPTN *p_flgptn) throw () |
ER | pol_flg (ID flgid, FLGPTN waiptn, MODE wfmode, FLGPTN *p_flgptn) throw () |
ER | twai_flg (ID flgid, FLGPTN waiptn, MODE wfmode, FLGPTN *p_flgptn, TMO tmout) throw () |
ER | ini_flg (ID flgid) throw () |
ER | ref_flg (ID flgid, T_RFLG *pk_rflg) throw () |
ER | snd_dtq (ID dtqid, intptr_t data) throw () |
ER | psnd_dtq (ID dtqid, intptr_t data) throw () |
ER | ipsnd_dtq (ID dtqid, intptr_t data) throw () |
ER | tsnd_dtq (ID dtqid, intptr_t data, TMO tmout) throw () |
ER | fsnd_dtq (ID dtqid, intptr_t data) throw () |
ER | ifsnd_dtq (ID dtqid, intptr_t data) throw () |
ER | rcv_dtq (ID dtqid, intptr_t *p_data) throw () |
ER | prcv_dtq (ID dtqid, intptr_t *p_data) throw () |
ER | trcv_dtq (ID dtqid, intptr_t *p_data, TMO tmout) throw () |
ER | ini_dtq (ID dtqid) throw () |
ER | ref_dtq (ID dtqid, T_RDTQ *pk_rdtq) throw () |
ER | snd_pdq (ID pdqid, intptr_t data, PRI datapri) throw () |
ER | psnd_pdq (ID pdqid, intptr_t data, PRI datapri) throw () |
ER | ipsnd_pdq (ID pdqid, intptr_t data, PRI datapri) throw () |
ER | tsnd_pdq (ID pdqid, intptr_t data, PRI datapri, TMO tmout) throw () |
ER | rcv_pdq (ID pdqid, intptr_t *p_data, PRI *p_datapri) throw () |
ER | prcv_pdq (ID pdqid, intptr_t *p_data, PRI *p_datapri) throw () |
ER | trcv_pdq (ID pdqid, intptr_t *p_data, PRI *p_datapri, TMO tmout) throw () |
ER | ini_pdq (ID pdqid) throw () |
ER | ref_pdq (ID pdqid, T_RPDQ *pk_rpdq) throw () |
ER | snd_mbx (ID mbxid, T_MSG *pk_msg) throw () |
ER | rcv_mbx (ID mbxid, T_MSG **ppk_msg) throw () |
ER | prcv_mbx (ID mbxid, T_MSG **ppk_msg) throw () |
ER | trcv_mbx (ID mbxid, T_MSG **ppk_msg, TMO tmout) throw () |
ER | ini_mbx (ID mbxid) throw () |
ER | ref_mbx (ID mbxid, T_RMBX *pk_rmbx) throw () |
ER | get_mpf (ID mpfid, void **p_blk) throw () |
ER | pget_mpf (ID mpfid, void **p_blk) throw () |
ER | tget_mpf (ID mpfid, void **p_blk, TMO tmout) throw () |
ER | rel_mpf (ID mpfid, void *blk) throw () |
ER | ini_mpf (ID mpfid) throw () |
ER | ref_mpf (ID mpfid, T_RMPF *pk_rmpf) throw () |
ER | get_tim (SYSTIM *p_systim) throw () |
ER | get_utm (SYSUTM *p_sysutm) throw () |
ER | sta_cyc (ID cycid) throw () |
ER | stp_cyc (ID cycid) throw () |
ER | ref_cyc (ID cycid, T_RCYC *pk_rcyc) throw () |
ER | sta_alm (ID almid, RELTIM almtim) throw () |
ER | ista_alm (ID almid, RELTIM almtim) throw () |
ER | stp_alm (ID almid) throw () |
ER | istp_alm (ID almid) throw () |
ER | ref_alm (ID almid, T_RALM *pk_ralm) throw () |
ER | rot_rdq (PRI tskpri) throw () |
ER | irot_rdq (PRI tskpri) throw () |
ER | get_tid (ID *p_tskid) throw () |
ER | iget_tid (ID *p_tskid) throw () |
ER | loc_cpu (void) throw () |
ER | iloc_cpu (void) throw () |
ER | unl_cpu (void) throw () |
ER | iunl_cpu (void) throw () |
ER | dis_dsp (void) throw () |
ER | ena_dsp (void) throw () |
bool_t | sns_ctx (void) throw () |
bool_t | sns_loc (void) throw () |
bool_t | sns_dsp (void) throw () |
bool_t | sns_dpn (void) throw () |
bool_t | sns_ker (void) throw () |
ER | ext_ker (void) throw () |
ER | dis_int (INTNO intno) throw () |
ER | ena_int (INTNO intno) throw () |
ER | chg_ipm (PRI intpri) throw () |
ER | get_ipm (PRI *p_intpri) throw () |
bool_t | xsns_dpn (void *p_excinf) throw () |
bool_t | xsns_xpn (void *p_excinf) throw () |
#define TA_ACT UINT_C(0x02) |
#define TA_CLR UINT_C(0x04) |
#define TA_EDGE UINT_C(0x02) |
#define TA_ENAINT UINT_C(0x01) |
#define TA_STA UINT_C(0x02) |
#define TA_TPRI UINT_C(0x01) |
#define TA_WMUL UINT_C(0x02) |
#define TKERNEL_PRVER UINT_C(0x1031) |
#define TMIN_DPRI 1 |
#define TOPPERS_ROUND_SZ | ( | sz, | |||
unit | ) | (((sz) + (unit) - 1) & ~((unit) - 1)) |
#define TSK_NONE 0 |
#define TWF_ANDW UINT_C(0x02) |
#define TWF_ORW UINT_C(0x01) |
task_manage.c の 125 行で定義されています。
参照先 task_control_block::actque, CHECK_TSKCTX_UNL, CHECK_TSKID_SELF, dispatch, E_OK, E_QOVR, get_tcb_self, LOG_ACT_TSK_ENTER, LOG_ACT_TSK_LEAVE, make_active, t_lock_cpu, t_unlock_cpu, task_control_block::tstat, と TSTAT_DORMANT.
参照元 main_task().
00126 { 00127 TCB *p_tcb; 00128 ER ercd; 00129 00130 LOG_ACT_TSK_ENTER(tskid); 00131 CHECK_TSKCTX_UNL(); 00132 CHECK_TSKID_SELF(tskid); 00133 p_tcb = get_tcb_self(tskid); 00134 00135 t_lock_cpu(); 00136 if (TSTAT_DORMANT(p_tcb->tstat)) { 00137 if (make_active(p_tcb)) { 00138 dispatch(); 00139 } 00140 ercd = E_OK; 00141 } 00142 else if (!(p_tcb->actque)) { 00143 p_tcb->actque = true; 00144 ercd = E_OK; 00145 } 00146 else { 00147 ercd = E_QOVR; 00148 } 00149 t_unlock_cpu(); 00150 00151 error_exit: 00152 LOG_ACT_TSK_LEAVE(ercd); 00153 return(ercd); 00154 }
task_manage.c の 203 行で定義されています。
参照先 task_control_block::actque, CHECK_TSKCTX_UNL, CHECK_TSKID_SELF, get_tcb_self, LOG_CAN_ACT_ENTER, LOG_CAN_ACT_LEAVE, t_lock_cpu, と t_unlock_cpu.
参照元 main_task().
00204 { 00205 TCB *p_tcb; 00206 ER_UINT ercd; 00207 00208 LOG_CAN_ACT_ENTER(tskid); 00209 CHECK_TSKCTX_UNL(); 00210 CHECK_TSKID_SELF(tskid); 00211 p_tcb = get_tcb_self(tskid); 00212 00213 t_lock_cpu(); 00214 ercd = p_tcb->actque ? 1 : 0; 00215 p_tcb->actque = false; 00216 t_unlock_cpu(); 00217 00218 error_exit: 00219 LOG_CAN_ACT_LEAVE(ercd); 00220 return(ercd); 00221 }
task_sync.c の 300 行で定義されています。
参照先 CHECK_TSKCTX_UNL, CHECK_TSKID_SELF, E_OBJ, get_tcb_self, LOG_CAN_WUP_ENTER, LOG_CAN_WUP_LEAVE, t_lock_cpu, t_unlock_cpu, task_control_block::tstat, TSTAT_DORMANT, と task_control_block::wupque.
参照元 main_task().
00301 { 00302 TCB *p_tcb; 00303 ER_UINT ercd; 00304 00305 LOG_CAN_WUP_ENTER(tskid); 00306 CHECK_TSKCTX_UNL(); 00307 CHECK_TSKID_SELF(tskid); 00308 p_tcb = get_tcb_self(tskid); 00309 00310 t_lock_cpu(); 00311 if (TSTAT_DORMANT(p_tcb->tstat)) { 00312 ercd = E_OBJ; 00313 } 00314 else { 00315 ercd = p_tcb->wupque ? 1 : 0; 00316 p_tcb->wupque = false; 00317 } 00318 t_unlock_cpu(); 00319 00320 error_exit: 00321 LOG_CAN_WUP_LEAVE(ercd); 00322 return(ercd); 00323 }
interrupt.c の 193 行で定義されています。
参照先 CHECK_INTPRI_CHGIPM, CHECK_TSKCTX, disdsp, dispatch, dspflg, E_OK, LOG_CHG_IPM_ENTER, LOG_CHG_IPM_LEAVE, p_runtsk, p_schedtsk, t_lock_cpu, t_sense_lock, t_set_ipm, t_unlock_cpu, と TIPM_ENAALL.
00194 { 00195 bool_t locked; 00196 ER ercd; 00197 00198 LOG_CHG_IPM_ENTER(intpri); 00199 CHECK_TSKCTX(); 00200 CHECK_INTPRI_CHGIPM(intpri); 00201 00202 locked = t_sense_lock(); 00203 if (!locked) { 00204 t_lock_cpu(); 00205 } 00206 t_set_ipm(intpri); 00207 if (intpri != TIPM_ENAALL) { 00208 dspflg = false; 00209 } 00210 else if (!disdsp) { 00211 dspflg = true; 00212 if (p_runtsk != p_schedtsk) { 00213 dispatch(); 00214 } 00215 } 00216 ercd = E_OK; 00217 if (!locked) { 00218 t_unlock_cpu(); 00219 } 00220 00221 error_exit: 00222 LOG_CHG_IPM_LEAVE(ercd); 00223 return(ercd); 00224 }
task_manage.c の 339 行で定義されています。
参照先 change_priority, CHECK_TPRI_INI, CHECK_TSKCTX_UNL, CHECK_TSKID_SELF, dispatch, E_OBJ, E_OK, get_tcb_self, INT_PRIORITY, task_initialization_block::ipriority, LOG_CHG_PRI_ENTER, LOG_CHG_PRI_LEAVE, task_control_block::p_tinib, t_lock_cpu, t_unlock_cpu, TPRI_INI, task_control_block::tstat, と TSTAT_DORMANT.
参照元 main_task().
00340 { 00341 TCB *p_tcb; 00342 uint_t newpri; 00343 ER ercd; 00344 00345 LOG_CHG_PRI_ENTER(tskid, tskpri); 00346 CHECK_TSKCTX_UNL(); 00347 CHECK_TSKID_SELF(tskid); 00348 CHECK_TPRI_INI(tskpri); 00349 p_tcb = get_tcb_self(tskid); 00350 newpri = (tskpri == TPRI_INI) ? p_tcb->p_tinib->ipriority 00351 : INT_PRIORITY(tskpri); 00352 00353 t_lock_cpu(); 00354 if (TSTAT_DORMANT(p_tcb->tstat)) { 00355 ercd = E_OBJ; 00356 } 00357 else { 00358 if (change_priority(p_tcb, newpri)) { 00359 dispatch(); 00360 } 00361 ercd = E_OK; 00362 } 00363 t_unlock_cpu(); 00364 00365 error_exit: 00366 LOG_CHG_PRI_LEAVE(ercd); 00367 return(ercd); 00368 }
eventflag.c の 276 行で定義されています。
参照先 CHECK_FLGID, CHECK_TSKCTX_UNL, E_OK, eventflag_control_block::flgptn, get_flgcb, LOG_CLR_FLG_ENTER, LOG_CLR_FLG_LEAVE, t_lock_cpu, と t_unlock_cpu.
00277 { 00278 FLGCB *p_flgcb; 00279 ER ercd; 00280 00281 LOG_CLR_FLG_ENTER(flgid, clrptn); 00282 CHECK_TSKCTX_UNL(); 00283 CHECK_FLGID(flgid); 00284 p_flgcb = get_flgcb(flgid); 00285 00286 t_lock_cpu(); 00287 p_flgcb->flgptn &= clrptn; 00288 ercd = E_OK; 00289 t_unlock_cpu(); 00290 00291 error_exit: 00292 LOG_CLR_FLG_LEAVE(ercd); 00293 return(ercd); 00294 }
ER dis_dsp | ( | void | ) | throw () |
sys_manage.c の 396 行で定義されています。
参照先 CHECK_TSKCTX_UNL, disdsp, dspflg, E_OK, LOG_DIS_DSP_ENTER, LOG_DIS_DSP_LEAVE, t_lock_cpu, と t_unlock_cpu.
参照元 serial_cls_por(), と serial_opn_por().
00397 { 00398 ER ercd; 00399 00400 LOG_DIS_DSP_ENTER(); 00401 CHECK_TSKCTX_UNL(); 00402 00403 t_lock_cpu(); 00404 disdsp = true; 00405 dspflg = false; 00406 ercd = E_OK; 00407 t_unlock_cpu(); 00408 00409 error_exit: 00410 LOG_DIS_DSP_LEAVE(ercd); 00411 return(ercd); 00412 }
参照元 sio_cls_por().
ER dis_tex | ( | void | ) | throw () |
task_except.c の 182 行で定義されています。
参照先 CHECK_TSKCTX_UNL, E_OBJ, E_OK, LOG_DIS_TEX_ENTER, LOG_DIS_TEX_LEAVE, NULL, p_runtsk, t_lock_cpu, と t_unlock_cpu.
参照元 task().
00183 { 00184 ER ercd; 00185 00186 LOG_DIS_TEX_ENTER(); 00187 CHECK_TSKCTX_UNL(); 00188 00189 t_lock_cpu(); 00190 if (p_runtsk->p_tinib->texrtn == NULL) { 00191 ercd = E_OBJ; 00192 } 00193 else { 00194 p_runtsk->enatex = false; 00195 ercd = E_OK; 00196 } 00197 t_unlock_cpu(); 00198 00199 error_exit: 00200 LOG_DIS_TEX_LEAVE(ercd); 00201 return(ercd); 00202 }
task_sync.c の 503 行で定義されています。
参照先 CHECK_DISPATCH, CHECK_PAR, dispatch, LOG_DLY_TSK_ENTER, LOG_DLY_TSK_LEAVE, LOG_TSKSTAT, make_non_runnable, p_runtsk, waiting_information::p_tmevtb, t_lock_cpu, t_unlock_cpu, TMAX_RELTIM, tmevtb_enqueue(), TS_WAIT_DLY, TS_WAITING, wait_tmout_ok, と waiting_information::wercd.
参照元 logtask_flush(), logtask_main(), と task().
00504 { 00505 WINFO winfo; 00506 TMEVTB tmevtb; 00507 ER ercd; 00508 00509 LOG_DLY_TSK_ENTER(dlytim); 00510 CHECK_DISPATCH(); 00511 CHECK_PAR(dlytim <= TMAX_RELTIM); 00512 00513 t_lock_cpu(); 00514 p_runtsk->tstat = (TS_WAITING | TS_WAIT_DLY); 00515 (void) make_non_runnable(p_runtsk); 00516 p_runtsk->p_winfo = &winfo; 00517 winfo.p_tmevtb = &tmevtb; 00518 tmevtb_enqueue(&tmevtb, dlytim, (CBACK) wait_tmout_ok, (void *) p_runtsk); 00519 LOG_TSKSTAT(p_runtsk); 00520 dispatch(); 00521 ercd = winfo.wercd; 00522 t_unlock_cpu(); 00523 00524 error_exit: 00525 LOG_DLY_TSK_LEAVE(ercd); 00526 return(ercd); 00527 }
ER ena_dsp | ( | void | ) | throw () |
sys_manage.c の 422 行で定義されています。
参照先 CHECK_TSKCTX_UNL, disdsp, dispatch, dspflg, E_OK, LOG_ENA_DSP_ENTER, LOG_ENA_DSP_LEAVE, p_runtsk, p_schedtsk, t_get_ipm, t_lock_cpu, t_unlock_cpu, と TIPM_ENAALL.
参照元 serial_cls_por(), と serial_opn_por().
00423 { 00424 ER ercd; 00425 00426 LOG_ENA_DSP_ENTER(); 00427 CHECK_TSKCTX_UNL(); 00428 00429 t_lock_cpu(); 00430 disdsp = false; 00431 if (t_get_ipm() == TIPM_ENAALL) { 00432 dspflg = true; 00433 if (p_runtsk != p_schedtsk) { 00434 dispatch(); 00435 } 00436 } 00437 ercd = E_OK; 00438 t_unlock_cpu(); 00439 00440 error_exit: 00441 LOG_ENA_DSP_LEAVE(ercd); 00442 return(ercd); 00443 }
参照元 sio_opn_por().
ER ena_tex | ( | void | ) | throw () |
task_except.c の 212 行で定義されています。
参照先 call_texrtn, CHECK_TSKCTX_UNL, E_OBJ, E_OK, LOG_ENA_TEX_ENTER, LOG_ENA_TEX_LEAVE, NULL, p_runtsk, t_lock_cpu, と t_unlock_cpu.
参照元 task().
00213 { 00214 ER ercd; 00215 00216 LOG_ENA_TEX_ENTER(); 00217 CHECK_TSKCTX_UNL(); 00218 00219 t_lock_cpu(); 00220 if (p_runtsk->p_tinib->texrtn == NULL) { 00221 ercd = E_OBJ; 00222 } 00223 else { 00224 p_runtsk->enatex = true; 00225 if (p_runtsk->texptn != 0U) { 00226 call_texrtn(); 00227 } 00228 ercd = E_OK; 00229 } 00230 t_unlock_cpu(); 00231 00232 error_exit: 00233 LOG_ENA_TEX_LEAVE(ercd); 00234 return(ercd); 00235 }
ER ext_ker | ( | void | ) | throw () |
参照先 assert, call_exit_kernel, kerflg, LOG_EXT_KER_ENTER, LOG_KER_LEAVE, SIL_LOC_INT, と SIL_PRE_LOC.
参照元 main_task().
00123 { 00124 SIL_PRE_LOC; 00125 00126 LOG_EXT_KER_ENTER(); 00127 00128 /* 00129 * 割込みロック状態に移行 00130 */ 00131 SIL_LOC_INT(); 00132 00133 /* 00134 * カーネル動作の終了 00135 */ 00136 LOG_KER_LEAVE(); 00137 kerflg = false; 00138 00139 /* 00140 * カーネルの終了処理の呼出し 00141 * 00142 * 非タスクコンテキストに切り換えて,exit_kernelを呼び出す. 00143 */ 00144 call_exit_kernel(); 00145 assert(0); 00146 }
ER ext_tsk | ( | void | ) | throw () |
task_manage.c の 231 行で定義されています。
参照先 assert, CHECK_TSKCTX, disdsp, dspflg, exit_and_dispatch, LOG_EXT_TSK_ENTER, LOG_EXT_TSK_LEAVE, make_active, make_dormant, make_non_runnable, p_runtsk, t_get_ipm, t_lock_cpu, t_sense_lock, t_set_ipm, と TIPM_ENAALL.
参照元 task(), と tex_routine().
00232 { 00233 ER ercd; 00234 00235 LOG_EXT_TSK_ENTER(); 00236 CHECK_TSKCTX(); 00237 00238 if (t_sense_lock()) { 00239 /* 00240 * CPUロック状態でext_tskが呼ばれた場合は,CPUロックを解除し 00241 * てからタスクを終了する.実装上は,サービスコール内でのCPU 00242 * ロックを省略すればよいだけ. 00243 */ 00244 } 00245 else { 00246 t_lock_cpu(); 00247 } 00248 if (disdsp) { 00249 /* 00250 * ディスパッチ禁止状態でext_tskが呼ばれた場合は,ディスパッ 00251 * チ許可状態にしてからタスクを終了する. 00252 */ 00253 disdsp = false; 00254 } 00255 if (t_get_ipm() != TIPM_ENAALL) { 00256 /* 00257 * 割込み優先度マスク(IPM)がTIPM_ENAALL以外の状態でext_tsk 00258 * が呼ばれた場合は,IPMをTIPM_ENAALLにしてからタスクを終了す 00259 * る. 00260 */ 00261 t_set_ipm(TIPM_ENAALL); 00262 } 00263 dspflg = true; 00264 00265 (void) make_non_runnable(p_runtsk); 00266 make_dormant(p_runtsk); 00267 if (p_runtsk->actque) { 00268 p_runtsk->actque = false; 00269 (void) make_active(p_runtsk); 00270 } 00271 exit_and_dispatch(); 00272 assert(0); 00273 00274 error_exit: 00275 LOG_EXT_TSK_LEAVE(ercd); 00276 return(ercd); 00277 }
dataqueue.c の 491 行で定義されています。
参照先 CHECK_DTQID, CHECK_ILUSE, CHECK_TSKCTX_UNL, dispatch, dataqueue_initialization_block::dtqcnt, E_OK, force_send_data, get_dtqcb, LOG_FSND_DTQ_ENTER, LOG_FSND_DTQ_LEAVE, dataqueue_control_block::p_dtqinib, t_lock_cpu, と t_unlock_cpu.
00492 { 00493 DTQCB *p_dtqcb; 00494 ER ercd; 00495 00496 LOG_FSND_DTQ_ENTER(dtqid, data); 00497 CHECK_TSKCTX_UNL(); 00498 CHECK_DTQID(dtqid); 00499 p_dtqcb = get_dtqcb(dtqid); 00500 CHECK_ILUSE(p_dtqcb->p_dtqinib->dtqcnt > 0U); 00501 00502 t_lock_cpu(); 00503 if (force_send_data(p_dtqcb, data)) { 00504 dispatch(); 00505 } 00506 ercd = E_OK; 00507 t_unlock_cpu(); 00508 00509 error_exit: 00510 LOG_FSND_DTQ_LEAVE(ercd); 00511 return(ercd); 00512 }
ER get_inf | ( | intptr_t * | p_exinf | ) | throw () |
task_manage.c の 411 行で定義されています。
参照先 CHECK_TSKCTX_UNL, E_OK, LOG_GET_INF_ENTER, LOG_GET_INF_LEAVE, p_runtsk, t_lock_cpu, と t_unlock_cpu.
00412 { 00413 ER ercd; 00414 00415 LOG_GET_INF_ENTER(p_exinf); 00416 CHECK_TSKCTX_UNL(); 00417 00418 t_lock_cpu(); 00419 *p_exinf = p_runtsk->p_tinib->exinf; 00420 ercd = E_OK; 00421 t_unlock_cpu(); 00422 00423 error_exit: 00424 LOG_GET_INF_LEAVE(ercd, *p_exinf); 00425 return(ercd); 00426 }
interrupt.c の 234 行で定義されています。
参照先 CHECK_TSKCTX, E_OK, LOG_GET_IPM_ENTER, LOG_GET_IPM_LEAVE, t_get_ipm, t_lock_cpu, t_sense_lock, と t_unlock_cpu.
00235 { 00236 bool_t locked; 00237 ER ercd; 00238 00239 LOG_GET_IPM_ENTER(p_intpri); 00240 CHECK_TSKCTX(); 00241 00242 locked = t_sense_lock(); 00243 if (!locked) { 00244 t_lock_cpu(); 00245 } 00246 *p_intpri = t_get_ipm(); 00247 ercd = E_OK; 00248 if (!locked) { 00249 t_unlock_cpu(); 00250 } 00251 00252 error_exit: 00253 LOG_GET_IPM_LEAVE(ercd, *p_intpri); 00254 return(ercd); 00255 }
参照先 CHECK_DISPATCH, CHECK_MPFID, dispatch, E_OK, fixed_memorypool_control_block::fblkcnt, get_mpf_block(), get_mpfcb, LOG_GET_MPF_ENTER, LOG_GET_MPF_LEAVE, p_runtsk, t_lock_cpu, t_unlock_cpu, TS_WAIT_MPF, TS_WAITING, waiting_information::wercd, wait_object_waiting_information::winfo, と wobj_make_wait.
00177 { 00178 MPFCB *p_mpfcb; 00179 WINFO_MPF winfo_mpf; 00180 ER ercd; 00181 00182 LOG_GET_MPF_ENTER(mpfid, p_blk); 00183 CHECK_DISPATCH(); 00184 CHECK_MPFID(mpfid); 00185 p_mpfcb = get_mpfcb(mpfid); 00186 00187 t_lock_cpu(); 00188 if (p_mpfcb->fblkcnt > 0) { 00189 get_mpf_block(p_mpfcb, p_blk); 00190 ercd = E_OK; 00191 } 00192 else { 00193 p_runtsk->tstat = (TS_WAITING | TS_WAIT_MPF); 00194 wobj_make_wait((WOBJCB *) p_mpfcb, (WINFO_WOBJ *) &winfo_mpf); 00195 dispatch(); 00196 ercd = winfo_mpf.winfo.wercd; 00197 if (ercd == E_OK) { 00198 *p_blk = winfo_mpf.blk; 00199 } 00200 } 00201 t_unlock_cpu(); 00202 00203 error_exit: 00204 LOG_GET_MPF_LEAVE(ercd, *p_blk); 00205 return(ercd); 00206 }
task_manage.c の 378 行で定義されています。
参照先 CHECK_TSKCTX_UNL, CHECK_TSKID_SELF, E_OBJ, E_OK, EXT_TSKPRI, get_tcb_self, LOG_GET_PRI_ENTER, LOG_GET_PRI_LEAVE, task_control_block::priority, t_lock_cpu, t_unlock_cpu, task_control_block::tstat, と TSTAT_DORMANT.
参照元 main_task().
00379 { 00380 TCB *p_tcb; 00381 ER ercd; 00382 00383 LOG_GET_PRI_ENTER(tskid, p_tskpri); 00384 CHECK_TSKCTX_UNL(); 00385 CHECK_TSKID_SELF(tskid); 00386 p_tcb = get_tcb_self(tskid); 00387 00388 t_lock_cpu(); 00389 if (TSTAT_DORMANT(p_tcb->tstat)) { 00390 ercd = E_OBJ; 00391 } 00392 else { 00393 *p_tskpri = EXT_TSKPRI(p_tcb->priority); 00394 ercd = E_OK; 00395 } 00396 t_unlock_cpu(); 00397 00398 error_exit: 00399 LOG_GET_PRI_LEAVE(ercd, *p_tskpri); 00400 return(ercd); 00401 }
sys_manage.c の 238 行で定義されています。
参照先 CHECK_TSKCTX_UNL, E_OK, LOG_GET_TID_ENTER, LOG_GET_TID_LEAVE, p_runtsk, t_lock_cpu, t_unlock_cpu, と TSKID.
00239 { 00240 ER ercd; 00241 00242 LOG_GET_TID_ENTER(p_tskid); 00243 CHECK_TSKCTX_UNL(); 00244 00245 t_lock_cpu(); 00246 *p_tskid = TSKID(p_runtsk); 00247 ercd = E_OK; 00248 t_unlock_cpu(); 00249 00250 error_exit: 00251 LOG_GET_TID_LEAVE(ercd, *p_tskid); 00252 return(ercd); 00253 }
time_manage.c の 76 行で定義されています。
参照先 CHECK_TSKCTX_UNL, current_time, E_OK, LOG_GET_TIM_ENTER, LOG_GET_TIM_LEAVE, t_lock_cpu, と t_unlock_cpu.
参照元 main_task().
00077 { 00078 ER ercd; 00079 00080 LOG_GET_TIM_ENTER(p_systim); 00081 CHECK_TSKCTX_UNL(); 00082 00083 t_lock_cpu(); 00084 *p_systim = current_time; 00085 ercd = E_OK; 00086 t_unlock_cpu(); 00087 00088 error_exit: 00089 LOG_GET_TIM_LEAVE(ercd, *p_systim); 00090 return(ercd); 00091 }
参照元 begin_measure(), end_measure(), と main_task().
task_manage.c の 164 行で定義されています。
参照先 task_control_block::actque, CHECK_INTCTX_UNL, CHECK_TSKID, E_OK, E_QOVR, get_tcb, i_lock_cpu, i_unlock_cpu, LOG_IACT_TSK_ENTER, LOG_IACT_TSK_LEAVE, make_active, reqflg, task_control_block::tstat, と TSTAT_DORMANT.
00165 { 00166 TCB *p_tcb; 00167 ER ercd; 00168 00169 LOG_IACT_TSK_ENTER(tskid); 00170 CHECK_INTCTX_UNL(); 00171 CHECK_TSKID(tskid); 00172 p_tcb = get_tcb(tskid); 00173 00174 i_lock_cpu(); 00175 if (TSTAT_DORMANT(p_tcb->tstat)) { 00176 if (make_active(p_tcb)) { 00177 reqflg = true; 00178 } 00179 ercd = E_OK; 00180 } 00181 else if (!(p_tcb->actque)) { 00182 p_tcb->actque = true; 00183 ercd = E_OK; 00184 } 00185 else { 00186 ercd = E_QOVR; 00187 } 00188 i_unlock_cpu(); 00189 00190 error_exit: 00191 LOG_IACT_TSK_LEAVE(ercd); 00192 return(ercd); 00193 }
dataqueue.c の 522 行で定義されています。
参照先 CHECK_DTQID, CHECK_ILUSE, CHECK_INTCTX_UNL, dataqueue_initialization_block::dtqcnt, E_OK, force_send_data, get_dtqcb, i_lock_cpu, i_unlock_cpu, LOG_IFSND_DTQ_ENTER, LOG_IFSND_DTQ_LEAVE, dataqueue_control_block::p_dtqinib, と reqflg.
00523 { 00524 DTQCB *p_dtqcb; 00525 ER ercd; 00526 00527 LOG_IFSND_DTQ_ENTER(dtqid, data); 00528 CHECK_INTCTX_UNL(); 00529 CHECK_DTQID(dtqid); 00530 p_dtqcb = get_dtqcb(dtqid); 00531 CHECK_ILUSE(p_dtqcb->p_dtqinib->dtqcnt > 0U); 00532 00533 i_lock_cpu(); 00534 if (force_send_data(p_dtqcb, data)) { 00535 reqflg = true; 00536 } 00537 ercd = E_OK; 00538 i_unlock_cpu(); 00539 00540 error_exit: 00541 LOG_IFSND_DTQ_LEAVE(ercd); 00542 return(ercd); 00543 }
sys_manage.c の 263 行で定義されています。
参照先 CHECK_INTCTX_UNL, E_OK, i_lock_cpu, i_unlock_cpu, LOG_IGET_TID_ENTER, LOG_IGET_TID_LEAVE, NULL, p_runtsk, TSK_NONE, と TSKID.
00264 { 00265 ER ercd; 00266 00267 LOG_IGET_TID_ENTER(p_tskid); 00268 CHECK_INTCTX_UNL(); 00269 00270 i_lock_cpu(); 00271 *p_tskid = (p_runtsk == NULL) ? TSK_NONE : TSKID(p_runtsk); 00272 ercd = E_OK; 00273 i_unlock_cpu(); 00274 00275 error_exit: 00276 LOG_IGET_TID_LEAVE(ercd, *p_tskid); 00277 return(ercd); 00278 }
ER iloc_cpu | ( | void | ) | throw () |
sys_manage.c の 313 行で定義されています。
参照先 CHECK_INTCTX, E_OK, i_lock_cpu, i_sense_lock, LOG_ILOC_CPU_ENTER, と LOG_ILOC_CPU_LEAVE.
00314 { 00315 ER ercd; 00316 00317 LOG_ILOC_CPU_ENTER(); 00318 CHECK_INTCTX(); 00319 00320 if (!i_sense_lock()) { 00321 i_lock_cpu(); 00322 } 00323 ercd = E_OK; 00324 00325 error_exit: 00326 LOG_ILOC_CPU_LEAVE(ercd); 00327 return(ercd); 00328 }
dataqueue.c の 686 行で定義されています。
参照先 CHECK_DTQID, CHECK_TSKCTX_UNL, dataqueue_control_block::count, dispatch, E_OK, get_dtqcb, dataqueue_control_block::head, init_wait_queue, LOG_INI_DTQ_ENTER, LOG_INI_DTQ_LEAVE, dataqueue_control_block::rwait_queue, dataqueue_control_block::swait_queue, t_lock_cpu, t_unlock_cpu, と dataqueue_control_block::tail.
00687 { 00688 DTQCB *p_dtqcb; 00689 bool_t dspreq; 00690 ER ercd; 00691 00692 LOG_INI_DTQ_ENTER(dtqid); 00693 CHECK_TSKCTX_UNL(); 00694 CHECK_DTQID(dtqid); 00695 p_dtqcb = get_dtqcb(dtqid); 00696 00697 t_lock_cpu(); 00698 dspreq = init_wait_queue(&(p_dtqcb->swait_queue)); 00699 if (init_wait_queue(&(p_dtqcb->rwait_queue))) { 00700 dspreq = true; 00701 }; 00702 p_dtqcb->count = 0U; 00703 p_dtqcb->head = 0U; 00704 p_dtqcb->tail = 0U; 00705 if (dspreq) { 00706 dispatch(); 00707 } 00708 ercd = E_OK; 00709 t_unlock_cpu(); 00710 00711 error_exit: 00712 LOG_INI_DTQ_LEAVE(ercd); 00713 return(ercd); 00714 }
eventflag.c の 442 行で定義されています。
参照先 CHECK_FLGID, CHECK_TSKCTX_UNL, dispatch, E_OK, eventflag_control_block::flgptn, get_flgcb, eventflag_initialization_block::iflgptn, init_wait_queue, LOG_INI_FLG_ENTER, LOG_INI_FLG_LEAVE, eventflag_control_block::p_flginib, t_lock_cpu, t_unlock_cpu, と eventflag_control_block::wait_queue.
00443 { 00444 FLGCB *p_flgcb; 00445 bool_t dspreq; 00446 ER ercd; 00447 00448 LOG_INI_FLG_ENTER(flgid); 00449 CHECK_TSKCTX_UNL(); 00450 CHECK_FLGID(flgid); 00451 p_flgcb = get_flgcb(flgid); 00452 00453 t_lock_cpu(); 00454 dspreq = init_wait_queue(&(p_flgcb->wait_queue)); 00455 p_flgcb->flgptn = p_flgcb->p_flginib->iflgptn; 00456 if (dspreq) { 00457 dispatch(); 00458 } 00459 ercd = E_OK; 00460 t_unlock_cpu(); 00461 00462 error_exit: 00463 LOG_INI_FLG_LEAVE(ercd); 00464 return(ercd); 00465 }
参照先 CHECK_MBXID, CHECK_TSKCTX_UNL, dispatch, E_OK, get_mbxcb, init_wait_queue, LOG_INI_MBX_ENTER, LOG_INI_MBX_LEAVE, NULL, mailbox_control_block::pk_head, t_lock_cpu, t_unlock_cpu, と mailbox_control_block::wait_queue.
00340 { 00341 MBXCB *p_mbxcb; 00342 bool_t dspreq; 00343 ER ercd; 00344 00345 LOG_INI_MBX_ENTER(mbxid); 00346 CHECK_TSKCTX_UNL(); 00347 CHECK_MBXID(mbxid); 00348 p_mbxcb = get_mbxcb(mbxid); 00349 00350 t_lock_cpu(); 00351 dspreq = init_wait_queue(&(p_mbxcb->wait_queue)); 00352 p_mbxcb->pk_head = NULL; 00353 if (dspreq) { 00354 dispatch(); 00355 } 00356 ercd = E_OK; 00357 t_unlock_cpu(); 00358 00359 error_exit: 00360 LOG_INI_MBX_LEAVE(ercd); 00361 return(ercd); 00362 }
参照先 fixed_memorypool_initialization_block::blkcnt, CHECK_MPFID, CHECK_TSKCTX_UNL, dispatch, E_OK, fixed_memorypool_control_block::fblkcnt, fixed_memorypool_control_block::freelist, get_mpfcb, INDEX_NULL, init_wait_queue, LOG_INI_MPF_ENTER, LOG_INI_MPF_LEAVE, fixed_memorypool_control_block::p_mpfinib, t_lock_cpu, t_unlock_cpu, fixed_memorypool_control_block::unused, と fixed_memorypool_control_block::wait_queue.
00345 { 00346 MPFCB *p_mpfcb; 00347 bool_t dspreq; 00348 ER ercd; 00349 00350 LOG_INI_MPF_ENTER(mpfid); 00351 CHECK_TSKCTX_UNL(); 00352 CHECK_MPFID(mpfid); 00353 p_mpfcb = get_mpfcb(mpfid); 00354 00355 t_lock_cpu(); 00356 dspreq = init_wait_queue(&(p_mpfcb->wait_queue)); 00357 p_mpfcb->fblkcnt = p_mpfcb->p_mpfinib->blkcnt; 00358 p_mpfcb->unused = 0U; 00359 p_mpfcb->freelist = INDEX_NULL; 00360 if (dspreq) { 00361 dispatch(); 00362 } 00363 ercd = E_OK; 00364 t_unlock_cpu(); 00365 00366 error_exit: 00367 LOG_INI_MPF_LEAVE(ercd); 00368 return(ercd); 00369 }
pridataq.c の 601 行で定義されています。
参照先 CHECK_PDQID, CHECK_TSKCTX_UNL, pridataq_control_block::count, dispatch, E_OK, get_pdqcb, init_wait_queue, LOG_INI_PDQ_ENTER, LOG_INI_PDQ_LEAVE, NULL, pridataq_control_block::p_freelist, pridataq_control_block::p_head, pridataq_control_block::rwait_queue, pridataq_control_block::swait_queue, t_lock_cpu, t_unlock_cpu, と pridataq_control_block::unused.
00602 { 00603 PDQCB *p_pdqcb; 00604 bool_t dspreq; 00605 ER ercd; 00606 00607 LOG_INI_PDQ_ENTER(pdqid); 00608 CHECK_TSKCTX_UNL(); 00609 CHECK_PDQID(pdqid); 00610 p_pdqcb = get_pdqcb(pdqid); 00611 00612 t_lock_cpu(); 00613 dspreq = init_wait_queue(&(p_pdqcb->swait_queue)); 00614 if (init_wait_queue(&(p_pdqcb->rwait_queue))) { 00615 dspreq = true; 00616 } 00617 p_pdqcb->count = 0U; 00618 p_pdqcb->p_head = NULL; 00619 p_pdqcb->unused = 0U; 00620 p_pdqcb->p_freelist = NULL; 00621 if (dspreq) { 00622 dispatch(); 00623 } 00624 ercd = E_OK; 00625 t_unlock_cpu(); 00626 00627 error_exit: 00628 LOG_INI_PDQ_LEAVE(ercd); 00629 return(ercd); 00630 }
semaphore.c の 344 行で定義されています。
参照先 CHECK_SEMID, CHECK_TSKCTX_UNL, dispatch, E_OK, get_semcb, init_wait_queue, semaphore_initialization_block::isemcnt, LOG_INI_SEM_ENTER, LOG_INI_SEM_LEAVE, semaphore_control_block::p_seminib, semaphore_control_block::semcnt, t_lock_cpu, t_unlock_cpu, と semaphore_control_block::wait_queue.
参照元 serial_cls_por().
00345 { 00346 SEMCB *p_semcb; 00347 bool_t dspreq; 00348 ER ercd; 00349 00350 LOG_INI_SEM_ENTER(semid); 00351 CHECK_TSKCTX_UNL(); 00352 CHECK_SEMID(semid); 00353 p_semcb = get_semcb(semid); 00354 00355 t_lock_cpu(); 00356 dspreq = init_wait_queue(&(p_semcb->wait_queue)); 00357 p_semcb->semcnt = p_semcb->p_seminib->isemcnt; 00358 if (dspreq) { 00359 dispatch(); 00360 } 00361 ercd = E_OK; 00362 t_unlock_cpu(); 00363 00364 error_exit: 00365 LOG_INI_SEM_LEAVE(ercd); 00366 return(ercd); 00367 }
dataqueue.c の 408 行で定義されています。
参照先 CHECK_DTQID, CHECK_INTCTX_UNL, E_OK, E_TMOUT, get_dtqcb, i_lock_cpu, i_unlock_cpu, LOG_IPSND_DTQ_ENTER, LOG_IPSND_DTQ_LEAVE, reqflg, と send_data.
00409 { 00410 DTQCB *p_dtqcb; 00411 bool_t reqdsp; 00412 ER ercd; 00413 00414 LOG_IPSND_DTQ_ENTER(dtqid, data); 00415 CHECK_INTCTX_UNL(); 00416 CHECK_DTQID(dtqid); 00417 p_dtqcb = get_dtqcb(dtqid); 00418 00419 i_lock_cpu(); 00420 if (send_data(p_dtqcb, data, &reqdsp)) { 00421 if (reqdsp) { 00422 reqflg = true; 00423 } 00424 ercd = E_OK; 00425 } 00426 else { 00427 ercd = E_TMOUT; 00428 } 00429 i_unlock_cpu(); 00430 00431 error_exit: 00432 LOG_IPSND_DTQ_LEAVE(ercd); 00433 return(ercd); 00434 }
pridataq.c の 380 行で定義されています。
参照先 CHECK_INTCTX_UNL, CHECK_PAR, CHECK_PDQID, E_OK, E_TMOUT, get_pdqcb, i_lock_cpu, i_unlock_cpu, LOG_IPSND_PDQ_ENTER, LOG_IPSND_PDQ_LEAVE, reqflg, send_pridata, と TMIN_DPRI.
00381 { 00382 PDQCB *p_pdqcb; 00383 bool_t reqdsp; 00384 ER ercd; 00385 00386 LOG_IPSND_PDQ_ENTER(pdqid, data, datapri); 00387 CHECK_INTCTX_UNL(); 00388 CHECK_PDQID(pdqid); 00389 p_pdqcb = get_pdqcb(pdqid); 00390 CHECK_PAR(TMIN_DPRI <= datapri && datapri <= p_pdqcb->p_pdqinib->maxdpri); 00391 00392 i_lock_cpu(); 00393 if (send_pridata(p_pdqcb, data, datapri, &reqdsp)) { 00394 if (reqdsp) { 00395 reqflg = true; 00396 } 00397 ercd = E_OK; 00398 } 00399 else { 00400 ercd = E_TMOUT; 00401 } 00402 i_unlock_cpu(); 00403 00404 error_exit: 00405 LOG_IPSND_PDQ_LEAVE(ercd); 00406 return(ercd); 00407 }
task_except.c の 145 行で定義されています。
参照先 CHECK_INTCTX_UNL, CHECK_PAR, CHECK_TSKID, E_OBJ, E_OK, get_tcb, i_lock_cpu, i_unlock_cpu, LOG_IRAS_TEX_ENTER, LOG_IRAS_TEX_LEAVE, NULL, p_runtsk, task_control_block::p_tinib, reqflg, task_control_block::texptn, task_initialization_block::texrtn, task_control_block::tstat, と TSTAT_DORMANT.
00146 { 00147 TCB *p_tcb; 00148 ER ercd; 00149 00150 LOG_IRAS_TEX_ENTER(tskid, rasptn); 00151 CHECK_INTCTX_UNL(); 00152 CHECK_TSKID(tskid); 00153 CHECK_PAR(rasptn != 0U); 00154 p_tcb = get_tcb(tskid); 00155 00156 i_lock_cpu(); 00157 if (TSTAT_DORMANT(p_tcb->tstat) || p_tcb->p_tinib->texrtn == NULL) { 00158 ercd = E_OBJ; 00159 } 00160 else { 00161 p_tcb->texptn |= rasptn; 00162 if (p_tcb == p_runtsk && p_runtsk->enatex) { 00163 reqflg = true; 00164 } 00165 ercd = E_OK; 00166 } 00167 i_unlock_cpu(); 00168 00169 error_exit: 00170 LOG_IRAS_TEX_LEAVE(ercd); 00171 return(ercd); 00172 }
task_sync.c の 368 行で定義されています。
参照先 CHECK_INTCTX_UNL, CHECK_TSKID, E_OBJ, E_OK, get_tcb, i_lock_cpu, i_unlock_cpu, LOG_IREL_WAI_ENTER, LOG_IREL_WAI_LEAVE, reqflg, task_control_block::tstat, TSTAT_WAITING, と wait_release.
00369 { 00370 TCB *p_tcb; 00371 ER ercd; 00372 00373 LOG_IREL_WAI_ENTER(tskid); 00374 CHECK_INTCTX_UNL(); 00375 CHECK_TSKID(tskid); 00376 p_tcb = get_tcb(tskid); 00377 00378 i_lock_cpu(); 00379 if (!TSTAT_WAITING(p_tcb->tstat)) { 00380 ercd = E_OBJ; 00381 } 00382 else { 00383 if (wait_release(p_tcb)) { 00384 reqflg = true; 00385 } 00386 ercd = E_OK; 00387 } 00388 i_unlock_cpu(); 00389 00390 error_exit: 00391 LOG_IREL_WAI_LEAVE(ercd); 00392 return(ercd); 00393 }
sys_manage.c の 210 行で定義されています。
参照先 CHECK_INTCTX_UNL, CHECK_TPRI, E_OK, i_lock_cpu, i_unlock_cpu, INT_PRIORITY, LOG_IROT_RDQ_ENTER, LOG_IROT_RDQ_LEAVE, reqflg, と rotate_ready_queue.
参照元 alarm_handler(), と cyclic_handler().
00211 { 00212 ER ercd; 00213 00214 LOG_IROT_RDQ_ENTER(tskpri); 00215 CHECK_INTCTX_UNL(); 00216 CHECK_TPRI(tskpri); 00217 00218 i_lock_cpu(); 00219 if (rotate_ready_queue(INT_PRIORITY(tskpri))) { 00220 reqflg = true; 00221 } 00222 ercd = E_OK; 00223 i_unlock_cpu(); 00224 00225 error_exit: 00226 LOG_IROT_RDQ_LEAVE(ercd); 00227 return(ercd); 00228 }
eventflag.c の 229 行で定義されています。
参照先 check_flg_cond(), CHECK_FLGID, CHECK_INTCTX_UNL, E_OK, eventflag_initialization_block::flgatr, eventflag_waiting_information::flgptn, eventflag_control_block::flgptn, get_flgcb, i_lock_cpu, i_unlock_cpu, LOG_ISET_FLG_ENTER, LOG_ISET_FLG_LEAVE, eventflag_control_block::p_flginib, queue::p_next, task_control_block::p_winfo, queue_delete(), reqflg, TA_CLR, task_control_block::task_queue, eventflag_waiting_information::waiptn, wait_complete, eventflag_control_block::wait_queue, と eventflag_waiting_information::wfmode.
00230 { 00231 FLGCB *p_flgcb; 00232 QUEUE *p_queue; 00233 TCB *p_tcb; 00234 WINFO_FLG *p_winfo_flg; 00235 ER ercd; 00236 00237 LOG_ISET_FLG_ENTER(flgid, setptn); 00238 CHECK_INTCTX_UNL(); 00239 CHECK_FLGID(flgid); 00240 p_flgcb = get_flgcb(flgid); 00241 00242 i_lock_cpu(); 00243 p_flgcb->flgptn |= setptn; 00244 p_queue = p_flgcb->wait_queue.p_next; 00245 while (p_queue != &(p_flgcb->wait_queue)) { 00246 p_tcb = (TCB *) p_queue; 00247 p_queue = p_queue->p_next; 00248 p_winfo_flg = (WINFO_FLG *)(p_tcb->p_winfo); 00249 if (check_flg_cond(p_flgcb, p_winfo_flg->waiptn, 00250 p_winfo_flg->wfmode, &(p_winfo_flg->flgptn))) { 00251 queue_delete(&(p_tcb->task_queue)); 00252 if (wait_complete(p_tcb)) { 00253 reqflg = true; 00254 } 00255 if ((p_flgcb->p_flginib->flgatr & TA_CLR) != 0U) { 00256 break; 00257 } 00258 } 00259 } 00260 ercd = E_OK; 00261 i_unlock_cpu(); 00262 00263 error_exit: 00264 LOG_ISET_FLG_LEAVE(ercd); 00265 return(ercd); 00266 }
semaphore.c の 190 行で定義されています。
参照先 CHECK_INTCTX_UNL, CHECK_SEMID, E_OK, E_QOVR, get_semcb, i_lock_cpu, i_unlock_cpu, LOG_ISIG_SEM_ENTER, LOG_ISIG_SEM_LEAVE, semaphore_initialization_block::maxsem, semaphore_control_block::p_seminib, queue_delete_next(), queue_empty(), reqflg, semaphore_control_block::semcnt, wait_complete, と semaphore_control_block::wait_queue.
参照元 sio_irdy_rcv(), と sio_irdy_snd().
00191 { 00192 SEMCB *p_semcb; 00193 TCB *p_tcb; 00194 ER ercd; 00195 00196 LOG_ISIG_SEM_ENTER(semid); 00197 CHECK_INTCTX_UNL(); 00198 CHECK_SEMID(semid); 00199 p_semcb = get_semcb(semid); 00200 00201 i_lock_cpu(); 00202 if (!queue_empty(&(p_semcb->wait_queue))) { 00203 p_tcb = (TCB *) queue_delete_next(&(p_semcb->wait_queue)); 00204 if (wait_complete(p_tcb)) { 00205 reqflg = true; 00206 } 00207 ercd = E_OK; 00208 } 00209 else if (p_semcb->semcnt < p_semcb->p_seminib->maxsem) { 00210 p_semcb->semcnt += 1; 00211 ercd = E_OK; 00212 } 00213 else { 00214 ercd = E_QOVR; 00215 } 00216 i_unlock_cpu(); 00217 00218 error_exit: 00219 LOG_ISIG_SEM_LEAVE(ercd); 00220 return(ercd); 00221 }
参照先 alarm_handler_control_block::almsta, call_almhdr, CHECK_ALMID, CHECK_INTCTX_UNL, CHECK_PAR, E_OK, get_almcb, i_lock_cpu, i_unlock_cpu, LOG_ISTA_ALM_ENTER, LOG_ISTA_ALM_LEAVE, TMAX_RELTIM, alarm_handler_control_block::tmevtb, tmevtb_dequeue(), と tmevtb_enqueue().
00175 { 00176 ALMCB *p_almcb; 00177 ER ercd; 00178 00179 LOG_ISTA_ALM_ENTER(almid, almtim); 00180 CHECK_INTCTX_UNL(); 00181 CHECK_ALMID(almid); 00182 CHECK_PAR(almtim <= TMAX_RELTIM); 00183 p_almcb = get_almcb(almid); 00184 00185 i_lock_cpu(); 00186 if (p_almcb->almsta) { 00187 tmevtb_dequeue(&(p_almcb->tmevtb)); 00188 } 00189 else { 00190 p_almcb->almsta = true; 00191 } 00192 tmevtb_enqueue(&(p_almcb->tmevtb), almtim, 00193 (CBACK) call_almhdr, (void *) p_almcb); 00194 ercd = E_OK; 00195 i_unlock_cpu(); 00196 00197 error_exit: 00198 LOG_ISTA_ALM_LEAVE(ercd); 00199 return(ercd); 00200 }
参照先 alarm_handler_control_block::almsta, CHECK_ALMID, CHECK_INTCTX_UNL, E_OK, get_almcb, i_lock_cpu, i_unlock_cpu, LOG_ISTP_ALM_ENTER, LOG_ISTP_ALM_LEAVE, alarm_handler_control_block::tmevtb, と tmevtb_dequeue().
00242 { 00243 ALMCB *p_almcb; 00244 ER ercd; 00245 00246 LOG_ISTP_ALM_ENTER(almid); 00247 CHECK_INTCTX_UNL(); 00248 CHECK_ALMID(almid); 00249 p_almcb = get_almcb(almid); 00250 00251 i_lock_cpu(); 00252 if (p_almcb->almsta) { 00253 p_almcb->almsta = false; 00254 tmevtb_dequeue(&(p_almcb->tmevtb)); 00255 } 00256 ercd = E_OK; 00257 i_unlock_cpu(); 00258 00259 error_exit: 00260 LOG_ISTP_ALM_LEAVE(ercd); 00261 return(ercd); 00262 }
ER iunl_cpu | ( | void | ) | throw () |
sys_manage.c の 371 行で定義されています。
参照先 CHECK_INTCTX, E_OK, i_sense_lock, i_unlock_cpu, LOG_IUNL_CPU_ENTER, と LOG_IUNL_CPU_LEAVE.
00372 { 00373 ER ercd; 00374 00375 LOG_IUNL_CPU_ENTER(); 00376 CHECK_INTCTX(); 00377 00378 if (i_sense_lock()) { 00379 i_unlock_cpu(); 00380 } 00381 ercd = E_OK; 00382 00383 error_exit: 00384 LOG_IUNL_CPU_LEAVE(ercd); 00385 return(ercd); 00386 }
task_sync.c の 258 行で定義されています。
参照先 CHECK_INTCTX_UNL, CHECK_TSKID, E_OBJ, E_OK, E_QOVR, get_tcb, i_lock_cpu, i_unlock_cpu, LOG_IWUP_TSK_ENTER, LOG_IWUP_TSK_LEAVE, reqflg, task_control_block::tstat, TSTAT_DORMANT, TSTAT_WAIT_SLP, wait_complete, と task_control_block::wupque.
00259 { 00260 TCB *p_tcb; 00261 ER ercd; 00262 00263 LOG_IWUP_TSK_ENTER(tskid); 00264 CHECK_INTCTX_UNL(); 00265 CHECK_TSKID(tskid); 00266 p_tcb = get_tcb(tskid); 00267 00268 i_lock_cpu(); 00269 if (TSTAT_DORMANT(p_tcb->tstat)) { 00270 ercd = E_OBJ; 00271 } 00272 else if (TSTAT_WAIT_SLP(p_tcb->tstat)) { 00273 if (wait_complete(p_tcb)) { 00274 reqflg = true; 00275 } 00276 ercd = E_OK; 00277 } 00278 else if (!(p_tcb->wupque)) { 00279 p_tcb->wupque = true; 00280 ercd = E_OK; 00281 } 00282 else { 00283 ercd = E_QOVR; 00284 } 00285 i_unlock_cpu(); 00286 00287 error_exit: 00288 LOG_IWUP_TSK_LEAVE(ercd); 00289 return(ercd); 00290 }
ER loc_cpu | ( | void | ) | throw () |
sys_manage.c の 288 行で定義されています。
参照先 CHECK_TSKCTX, E_OK, LOG_LOC_CPU_ENTER, LOG_LOC_CPU_LEAVE, t_lock_cpu, と t_sense_lock.
参照元 main_task(), serial_cls_por(), serial_opn_por(), serial_rea_chr(), serial_wri_chr(), と task().
00289 { 00290 ER ercd; 00291 00292 LOG_LOC_CPU_ENTER(); 00293 CHECK_TSKCTX(); 00294 00295 if (!t_sense_lock()) { 00296 t_lock_cpu(); 00297 } 00298 ercd = E_OK; 00299 00300 error_exit: 00301 LOG_LOC_CPU_LEAVE(ercd); 00302 return(ercd); 00303 }
参照先 CHECK_MPFID, CHECK_TSKCTX_UNL, E_OK, E_TMOUT, fixed_memorypool_control_block::fblkcnt, get_mpf_block(), get_mpfcb, LOG_PGET_MPF_ENTER, LOG_PGET_MPF_LEAVE, t_lock_cpu, と t_unlock_cpu.
00217 { 00218 MPFCB *p_mpfcb; 00219 ER ercd; 00220 00221 LOG_PGET_MPF_ENTER(mpfid, p_blk); 00222 CHECK_TSKCTX_UNL(); 00223 CHECK_MPFID(mpfid); 00224 p_mpfcb = get_mpfcb(mpfid); 00225 00226 t_lock_cpu(); 00227 if (p_mpfcb->fblkcnt > 0) { 00228 get_mpf_block(p_mpfcb, p_blk); 00229 ercd = E_OK; 00230 } 00231 else { 00232 ercd = E_TMOUT; 00233 } 00234 t_unlock_cpu(); 00235 00236 error_exit: 00237 LOG_PGET_MPF_LEAVE(ercd, *p_blk); 00238 return(ercd); 00239 }
eventflag.c の 351 行で定義されています。
参照先 check_flg_cond(), CHECK_FLGID, CHECK_PAR, CHECK_TSKCTX_UNL, E_ILUSE, E_OK, E_TMOUT, eventflag_initialization_block::flgatr, get_flgcb, LOG_POL_FLG_ENTER, LOG_POL_FLG_LEAVE, eventflag_control_block::p_flginib, queue_empty(), t_lock_cpu, t_unlock_cpu, TA_WMUL, TWF_ANDW, TWF_ORW, と eventflag_control_block::wait_queue.
00352 { 00353 FLGCB *p_flgcb; 00354 ER ercd; 00355 00356 LOG_POL_FLG_ENTER(flgid, waiptn, wfmode, p_flgptn); 00357 CHECK_TSKCTX_UNL(); 00358 CHECK_FLGID(flgid); 00359 CHECK_PAR(waiptn != 0U); 00360 CHECK_PAR(wfmode == TWF_ORW || wfmode == TWF_ANDW); 00361 p_flgcb = get_flgcb(flgid); 00362 00363 t_lock_cpu(); 00364 if ((p_flgcb->p_flginib->flgatr & TA_WMUL) == 0U 00365 && !queue_empty(&(p_flgcb->wait_queue))) { 00366 ercd = E_ILUSE; 00367 } 00368 else if (check_flg_cond(p_flgcb, waiptn, wfmode, p_flgptn)) { 00369 ercd = E_OK; 00370 } 00371 else { 00372 ercd = E_TMOUT; 00373 } 00374 t_unlock_cpu(); 00375 00376 error_exit: 00377 LOG_POL_FLG_LEAVE(ercd, *p_flgptn); 00378 return(ercd); 00379 }
semaphore.c の 268 行で定義されています。
参照先 CHECK_SEMID, CHECK_TSKCTX_UNL, E_OK, E_TMOUT, get_semcb, LOG_POL_SEM_ENTER, LOG_POL_SEM_LEAVE, semaphore_control_block::semcnt, t_lock_cpu, と t_unlock_cpu.
00269 { 00270 SEMCB *p_semcb; 00271 ER ercd; 00272 00273 LOG_POL_SEM_ENTER(semid); 00274 CHECK_TSKCTX_UNL(); 00275 CHECK_SEMID(semid); 00276 p_semcb = get_semcb(semid); 00277 00278 t_lock_cpu(); 00279 if (p_semcb->semcnt >= 1) { 00280 p_semcb->semcnt -= 1; 00281 ercd = E_OK; 00282 } 00283 else { 00284 ercd = E_TMOUT; 00285 } 00286 t_unlock_cpu(); 00287 00288 error_exit: 00289 LOG_POL_SEM_LEAVE(ercd); 00290 return(ercd); 00291 }
dataqueue.c の 599 行で定義されています。
参照先 CHECK_DTQID, CHECK_TSKCTX_UNL, dispatch, E_OK, E_TMOUT, get_dtqcb, LOG_PRCV_DTQ_ENTER, LOG_PRCV_DTQ_LEAVE, receive_data, t_lock_cpu, と t_unlock_cpu.
00600 { 00601 DTQCB *p_dtqcb; 00602 bool_t reqdsp; 00603 ER ercd; 00604 00605 LOG_PRCV_DTQ_ENTER(dtqid, p_data); 00606 CHECK_TSKCTX_UNL(); 00607 CHECK_DTQID(dtqid); 00608 p_dtqcb = get_dtqcb(dtqid); 00609 00610 t_lock_cpu(); 00611 if (receive_data(p_dtqcb, p_data, &reqdsp)) { 00612 if (reqdsp) { 00613 dispatch(); 00614 } 00615 ercd = E_OK; 00616 } 00617 else { 00618 ercd = E_TMOUT; 00619 } 00620 t_unlock_cpu(); 00621 00622 error_exit: 00623 LOG_PRCV_DTQ_LEAVE(ercd, *p_data); 00624 return(ercd); 00625 }
参照先 CHECK_MBXID, CHECK_TSKCTX_UNL, E_OK, E_TMOUT, get_mbxcb, LOG_PRCV_MBX_ENTER, LOG_PRCV_MBX_LEAVE, NULL, mailbox_control_block::pk_head, t_msg::pk_next, t_lock_cpu, と t_unlock_cpu.
00259 { 00260 MBXCB *p_mbxcb; 00261 ER ercd; 00262 00263 LOG_PRCV_MBX_ENTER(mbxid, ppk_msg); 00264 CHECK_TSKCTX_UNL(); 00265 CHECK_MBXID(mbxid); 00266 p_mbxcb = get_mbxcb(mbxid); 00267 00268 t_lock_cpu(); 00269 if (p_mbxcb->pk_head != NULL) { 00270 *ppk_msg = p_mbxcb->pk_head; 00271 p_mbxcb->pk_head = (*ppk_msg)->pk_next; 00272 ercd = E_OK; 00273 } 00274 else { 00275 ercd = E_TMOUT; 00276 } 00277 t_unlock_cpu(); 00278 00279 error_exit: 00280 LOG_PRCV_MBX_LEAVE(ercd, *ppk_msg); 00281 return(ercd); 00282 }
pridataq.c の 513 行で定義されています。
参照先 CHECK_PDQID, CHECK_TSKCTX_UNL, dispatch, E_OK, E_TMOUT, get_pdqcb, LOG_PRCV_PDQ_ENTER, LOG_PRCV_PDQ_LEAVE, receive_pridata, t_lock_cpu, と t_unlock_cpu.
00514 { 00515 PDQCB *p_pdqcb; 00516 bool_t reqdsp; 00517 ER ercd; 00518 00519 LOG_PRCV_PDQ_ENTER(pdqid, p_data, p_datapri); 00520 CHECK_TSKCTX_UNL(); 00521 CHECK_PDQID(pdqid); 00522 p_pdqcb = get_pdqcb(pdqid); 00523 00524 t_lock_cpu(); 00525 if (receive_pridata(p_pdqcb, p_data, p_datapri, &reqdsp)) { 00526 if (reqdsp) { 00527 dispatch(); 00528 } 00529 ercd = E_OK; 00530 } 00531 else { 00532 ercd = E_TMOUT; 00533 } 00534 t_unlock_cpu(); 00535 00536 error_exit: 00537 LOG_PRCV_PDQ_LEAVE(ercd, *p_data, *p_datapri); 00538 return(ercd); 00539 }
dataqueue.c の 372 行で定義されています。
参照先 CHECK_DTQID, CHECK_TSKCTX_UNL, dispatch, E_OK, E_TMOUT, get_dtqcb, LOG_PSND_DTQ_ENTER, LOG_PSND_DTQ_LEAVE, send_data, t_lock_cpu, と t_unlock_cpu.
00373 { 00374 DTQCB *p_dtqcb; 00375 bool_t reqdsp; 00376 ER ercd; 00377 00378 LOG_PSND_DTQ_ENTER(dtqid, data); 00379 CHECK_TSKCTX_UNL(); 00380 CHECK_DTQID(dtqid); 00381 p_dtqcb = get_dtqcb(dtqid); 00382 00383 t_lock_cpu(); 00384 if (send_data(p_dtqcb, data, &reqdsp)) { 00385 if (reqdsp) { 00386 dispatch(); 00387 } 00388 ercd = E_OK; 00389 } 00390 else { 00391 ercd = E_TMOUT; 00392 } 00393 t_unlock_cpu(); 00394 00395 error_exit: 00396 LOG_PSND_DTQ_LEAVE(ercd); 00397 return(ercd); 00398 }
pridataq.c の 343 行で定義されています。
参照先 CHECK_PAR, CHECK_PDQID, CHECK_TSKCTX_UNL, dispatch, E_OK, E_TMOUT, get_pdqcb, LOG_PSND_PDQ_ENTER, LOG_PSND_PDQ_LEAVE, send_pridata, t_lock_cpu, t_unlock_cpu, と TMIN_DPRI.
00344 { 00345 PDQCB *p_pdqcb; 00346 bool_t reqdsp; 00347 ER ercd; 00348 00349 LOG_PSND_PDQ_ENTER(pdqid, data, datapri); 00350 CHECK_TSKCTX_UNL(); 00351 CHECK_PDQID(pdqid); 00352 p_pdqcb = get_pdqcb(pdqid); 00353 CHECK_PAR(TMIN_DPRI <= datapri && datapri <= p_pdqcb->p_pdqinib->maxdpri); 00354 00355 t_lock_cpu(); 00356 if (send_pridata(p_pdqcb, data, datapri, &reqdsp)) { 00357 if (reqdsp) { 00358 dispatch(); 00359 } 00360 ercd = E_OK; 00361 } 00362 else { 00363 ercd = E_TMOUT; 00364 } 00365 t_unlock_cpu(); 00366 00367 error_exit: 00368 LOG_PSND_PDQ_LEAVE(ercd); 00369 return(ercd); 00370 }
task_except.c の 108 行で定義されています。
参照先 call_texrtn, CHECK_PAR, CHECK_TSKCTX_UNL, CHECK_TSKID_SELF, E_OBJ, E_OK, get_tcb_self, LOG_RAS_TEX_ENTER, LOG_RAS_TEX_LEAVE, NULL, p_runtsk, task_control_block::p_tinib, t_lock_cpu, t_unlock_cpu, task_control_block::texptn, task_initialization_block::texrtn, task_control_block::tstat, と TSTAT_DORMANT.
参照元 main_task().
00109 { 00110 TCB *p_tcb; 00111 ER ercd; 00112 00113 LOG_RAS_TEX_ENTER(tskid, rasptn); 00114 CHECK_TSKCTX_UNL(); 00115 CHECK_TSKID_SELF(tskid); 00116 CHECK_PAR(rasptn != 0U); 00117 p_tcb = get_tcb_self(tskid); 00118 00119 t_lock_cpu(); 00120 if (TSTAT_DORMANT(p_tcb->tstat) || p_tcb->p_tinib->texrtn == NULL) { 00121 ercd = E_OBJ; 00122 } 00123 else { 00124 p_tcb->texptn |= rasptn; 00125 if (p_tcb == p_runtsk && p_runtsk->enatex) { 00126 call_texrtn(); 00127 } 00128 ercd = E_OK; 00129 } 00130 t_unlock_cpu(); 00131 00132 error_exit: 00133 LOG_RAS_TEX_LEAVE(ercd); 00134 return(ercd); 00135 }
dataqueue.c の 553 行で定義されています。
参照先 CHECK_DISPATCH, CHECK_DTQID, dispatch, E_OK, get_dtqcb, LOG_RCV_DTQ_ENTER, LOG_RCV_DTQ_LEAVE, LOG_TSKSTAT, make_wait(), p_runtsk, queue_insert_prev(), receive_data, dataqueue_control_block::rwait_queue, t_lock_cpu, t_unlock_cpu, TS_WAIT_RDTQ, TS_WAITING, と waiting_information::wercd.
00554 { 00555 DTQCB *p_dtqcb; 00556 WINFO_DTQ winfo_dtq; 00557 bool_t reqdsp; 00558 ER ercd; 00559 00560 LOG_RCV_DTQ_ENTER(dtqid, p_data); 00561 CHECK_DISPATCH(); 00562 CHECK_DTQID(dtqid); 00563 p_dtqcb = get_dtqcb(dtqid); 00564 00565 t_lock_cpu(); 00566 if (receive_data(p_dtqcb, p_data, &reqdsp)) { 00567 if (reqdsp) { 00568 dispatch(); 00569 } 00570 ercd = E_OK; 00571 } 00572 else { 00573 p_runtsk->tstat = (TS_WAITING | TS_WAIT_RDTQ); 00574 make_wait((WINFO *) &winfo_dtq); 00575 queue_insert_prev(&(p_dtqcb->rwait_queue), &(p_runtsk->task_queue)); 00576 winfo_dtq.p_dtqcb = p_dtqcb; 00577 LOG_TSKSTAT(p_runtsk); 00578 dispatch(); 00579 ercd = winfo_dtq.winfo.wercd; 00580 if (ercd == E_OK) { 00581 *p_data = winfo_dtq.data; 00582 } 00583 } 00584 t_unlock_cpu(); 00585 00586 error_exit: 00587 LOG_RCV_DTQ_LEAVE(ercd, *p_data); 00588 return(ercd); 00589 }
参照先 CHECK_DISPATCH, CHECK_MBXID, dispatch, E_OK, get_mbxcb, LOG_RCV_MBX_ENTER, LOG_RCV_MBX_LEAVE, NULL, p_runtsk, mailbox_control_block::pk_head, t_msg::pk_next, t_lock_cpu, t_unlock_cpu, TS_WAIT_MBX, TS_WAITING, waiting_information::wercd, wait_object_waiting_information::winfo, と wobj_make_wait.
00218 { 00219 MBXCB *p_mbxcb; 00220 WINFO_MBX winfo_mbx; 00221 ER ercd; 00222 00223 LOG_RCV_MBX_ENTER(mbxid, ppk_msg); 00224 CHECK_DISPATCH(); 00225 CHECK_MBXID(mbxid); 00226 p_mbxcb = get_mbxcb(mbxid); 00227 00228 t_lock_cpu(); 00229 if (p_mbxcb->pk_head != NULL) { 00230 *ppk_msg = p_mbxcb->pk_head; 00231 p_mbxcb->pk_head = (*ppk_msg)->pk_next; 00232 ercd = E_OK; 00233 } 00234 else { 00235 p_runtsk->tstat = (TS_WAITING | TS_WAIT_MBX); 00236 wobj_make_wait((WOBJCB *) p_mbxcb, (WINFO_WOBJ *) &winfo_mbx); 00237 dispatch(); 00238 ercd = winfo_mbx.winfo.wercd; 00239 if (ercd == E_OK) { 00240 *ppk_msg = winfo_mbx.pk_msg; 00241 } 00242 } 00243 t_unlock_cpu(); 00244 00245 error_exit: 00246 LOG_RCV_MBX_LEAVE(ercd, *ppk_msg); 00247 return(ercd); 00248 }
pridataq.c の 466 行で定義されています。
参照先 CHECK_DISPATCH, CHECK_PDQID, dispatch, E_OK, get_pdqcb, LOG_RCV_PDQ_ENTER, LOG_RCV_PDQ_LEAVE, LOG_TSKSTAT, make_wait(), p_runtsk, queue_insert_prev(), receive_pridata, pridataq_control_block::rwait_queue, t_lock_cpu, t_unlock_cpu, TS_WAIT_RPDQ, TS_WAITING, と waiting_information::wercd.
00467 { 00468 PDQCB *p_pdqcb; 00469 WINFO_PDQ winfo_pdq; 00470 bool_t reqdsp; 00471 ER ercd; 00472 00473 LOG_RCV_PDQ_ENTER(pdqid, p_data, p_datapri); 00474 CHECK_DISPATCH(); 00475 CHECK_PDQID(pdqid); 00476 p_pdqcb = get_pdqcb(pdqid); 00477 00478 t_lock_cpu(); 00479 if (receive_pridata(p_pdqcb, p_data, p_datapri, &reqdsp)) { 00480 if (reqdsp) { 00481 dispatch(); 00482 } 00483 ercd = E_OK; 00484 } 00485 else { 00486 p_runtsk->tstat = (TS_WAITING | TS_WAIT_RPDQ); 00487 make_wait((WINFO *) &winfo_pdq); 00488 queue_insert_prev(&(p_pdqcb->rwait_queue), &(p_runtsk->task_queue)); 00489 winfo_pdq.p_pdqcb = p_pdqcb; 00490 LOG_TSKSTAT(p_runtsk); 00491 dispatch(); 00492 ercd = winfo_pdq.winfo.wercd; 00493 if (ercd == E_OK) { 00494 *p_data = winfo_pdq.data; 00495 *p_datapri = winfo_pdq.datapri; 00496 } 00497 } 00498 t_unlock_cpu(); 00499 00500 error_exit: 00501 LOG_RCV_PDQ_LEAVE(ercd, *p_data, *p_datapri); 00502 return(ercd); 00503 }
参照先 alarm_handler_control_block::almsta, t_ralm::almstat, CHECK_ALMID, CHECK_TSKCTX_UNL, E_OK, get_almcb, t_ralm::lefttim, LOG_REF_ALM_ENTER, LOG_REF_ALM_LEAVE, t_lock_cpu, t_unlock_cpu, TALM_STA, TALM_STP, tmevt_lefttim, と alarm_handler_control_block::tmevtb.
00273 { 00274 ALMCB *p_almcb; 00275 ER ercd; 00276 00277 LOG_REF_ALM_ENTER(almid, pk_ralm); 00278 CHECK_TSKCTX_UNL(); 00279 CHECK_ALMID(almid); 00280 p_almcb = get_almcb(almid); 00281 00282 t_lock_cpu(); 00283 if (p_almcb->almsta) { 00284 pk_ralm->almstat = TALM_STA; 00285 pk_ralm->lefttim = tmevt_lefttim(&(p_almcb->tmevtb)); 00286 } 00287 else { 00288 pk_ralm->almstat = TALM_STP; 00289 } 00290 ercd = E_OK; 00291 t_unlock_cpu(); 00292 00293 error_exit: 00294 LOG_REF_ALM_LEAVE(ercd, pk_ralm); 00295 return(ercd); 00296 }
参照先 CHECK_CYCID, CHECK_TSKCTX_UNL, cyclic_handler_control_block::cycsta, t_rcyc::cycstat, E_OK, get_cyccb, t_rcyc::lefttim, LOG_REF_CYC_ENTER, LOG_REF_CYC_LEAVE, t_lock_cpu, t_unlock_cpu, TCYC_STA, TCYC_STP, tmevt_lefttim, と cyclic_handler_control_block::tmevtb.
00205 { 00206 CYCCB *p_cyccb; 00207 ER ercd; 00208 00209 LOG_REF_CYC_ENTER(cycid, pk_rcyc); 00210 CHECK_TSKCTX_UNL(); 00211 CHECK_CYCID(cycid); 00212 p_cyccb = get_cyccb(cycid); 00213 00214 t_lock_cpu(); 00215 if (p_cyccb->cycsta) { 00216 pk_rcyc->cycstat = TCYC_STA; 00217 pk_rcyc->lefttim = tmevt_lefttim(&(p_cyccb->tmevtb)); 00218 } 00219 else { 00220 pk_rcyc->cycstat = TCYC_STP; 00221 } 00222 ercd = E_OK; 00223 t_unlock_cpu(); 00224 00225 error_exit: 00226 LOG_REF_CYC_LEAVE(ercd, pk_rcyc); 00227 return(ercd); 00228 }
dataqueue.c の 724 行で定義されています。
参照先 CHECK_DTQID, CHECK_TSKCTX_UNL, dataqueue_control_block::count, E_OK, get_dtqcb, LOG_REF_DTQ_ENTER, LOG_REF_DTQ_LEAVE, t_rdtq::rtskid, dataqueue_control_block::rwait_queue, t_rdtq::sdtqcnt, t_rdtq::stskid, dataqueue_control_block::swait_queue, t_lock_cpu, t_unlock_cpu, と wait_tskid().
00725 { 00726 DTQCB *p_dtqcb; 00727 ER ercd; 00728 00729 LOG_REF_DTQ_ENTER(dtqid, pk_rdtq); 00730 CHECK_TSKCTX_UNL(); 00731 CHECK_DTQID(dtqid); 00732 p_dtqcb = get_dtqcb(dtqid); 00733 00734 t_lock_cpu(); 00735 pk_rdtq->stskid = wait_tskid(&(p_dtqcb->swait_queue)); 00736 pk_rdtq->rtskid = wait_tskid(&(p_dtqcb->rwait_queue)); 00737 pk_rdtq->sdtqcnt = p_dtqcb->count; 00738 ercd = E_OK; 00739 t_unlock_cpu(); 00740 00741 error_exit: 00742 LOG_REF_DTQ_LEAVE(ercd, pk_rdtq); 00743 return(ercd); 00744 }
eventflag.c の 475 行で定義されています。
参照先 CHECK_FLGID, CHECK_TSKCTX_UNL, E_OK, eventflag_control_block::flgptn, t_rflg::flgptn, get_flgcb, LOG_REF_FLG_ENTER, LOG_REF_FLG_LEAVE, t_lock_cpu, t_unlock_cpu, eventflag_control_block::wait_queue, wait_tskid(), と t_rflg::wtskid.
00476 { 00477 FLGCB *p_flgcb; 00478 ER ercd; 00479 00480 LOG_REF_FLG_ENTER(flgid, pk_rflg); 00481 CHECK_TSKCTX_UNL(); 00482 CHECK_FLGID(flgid); 00483 p_flgcb = get_flgcb(flgid); 00484 00485 t_lock_cpu(); 00486 pk_rflg->wtskid = wait_tskid(&(p_flgcb->wait_queue)); 00487 pk_rflg->flgptn = p_flgcb->flgptn; 00488 ercd = E_OK; 00489 t_unlock_cpu(); 00490 00491 error_exit: 00492 LOG_REF_FLG_LEAVE(ercd, pk_rflg); 00493 return(ercd); 00494 }
参照先 CHECK_MBXID, CHECK_TSKCTX_UNL, E_OK, get_mbxcb, LOG_REF_MBX_ENTER, LOG_REF_MBX_LEAVE, mailbox_control_block::pk_head, t_rmbx::pk_msg, t_lock_cpu, t_unlock_cpu, mailbox_control_block::wait_queue, wait_tskid(), と t_rmbx::wtskid.
00373 { 00374 MBXCB *p_mbxcb; 00375 ER ercd; 00376 00377 LOG_REF_MBX_ENTER(mbxid, pk_rmbx); 00378 CHECK_TSKCTX_UNL(); 00379 CHECK_MBXID(mbxid); 00380 p_mbxcb = get_mbxcb(mbxid); 00381 00382 t_lock_cpu(); 00383 pk_rmbx->wtskid = wait_tskid(&(p_mbxcb->wait_queue)); 00384 pk_rmbx->pk_msg = p_mbxcb->pk_head; 00385 ercd = E_OK; 00386 t_unlock_cpu(); 00387 00388 error_exit: 00389 LOG_REF_MBX_LEAVE(ercd, pk_rmbx); 00390 return(ercd); 00391 }
参照先 CHECK_MPFID, CHECK_TSKCTX_UNL, E_OK, fixed_memorypool_control_block::fblkcnt, t_rmpf::fblkcnt, get_mpfcb, LOG_REF_MPF_ENTER, LOG_REF_MPF_LEAVE, t_lock_cpu, t_unlock_cpu, fixed_memorypool_control_block::wait_queue, wait_tskid(), と t_rmpf::wtskid.
00380 { 00381 MPFCB *p_mpfcb; 00382 ER ercd; 00383 00384 LOG_REF_MPF_ENTER(mpfid, pk_rmpf); 00385 CHECK_TSKCTX_UNL(); 00386 CHECK_MPFID(mpfid); 00387 p_mpfcb = get_mpfcb(mpfid); 00388 00389 t_lock_cpu(); 00390 pk_rmpf->wtskid = wait_tskid(&(p_mpfcb->wait_queue)); 00391 pk_rmpf->fblkcnt = p_mpfcb->fblkcnt; 00392 ercd = E_OK; 00393 t_unlock_cpu(); 00394 00395 error_exit: 00396 LOG_REF_MPF_LEAVE(ercd, pk_rmpf); 00397 return(ercd); 00398 }
pridataq.c の 640 行で定義されています。
参照先 CHECK_PDQID, CHECK_TSKCTX_UNL, pridataq_control_block::count, E_OK, get_pdqcb, LOG_REF_PDQ_ENTER, LOG_REF_PDQ_LEAVE, t_rpdq::rtskid, pridataq_control_block::rwait_queue, t_rpdq::spdqcnt, t_rpdq::stskid, pridataq_control_block::swait_queue, t_lock_cpu, t_unlock_cpu, と wait_tskid().
00641 { 00642 PDQCB *p_pdqcb; 00643 ER ercd; 00644 00645 LOG_REF_PDQ_ENTER(pdqid, pk_rpdq); 00646 CHECK_TSKCTX_UNL(); 00647 CHECK_PDQID(pdqid); 00648 p_pdqcb = get_pdqcb(pdqid); 00649 00650 t_lock_cpu(); 00651 pk_rpdq->stskid = wait_tskid(&(p_pdqcb->swait_queue)); 00652 pk_rpdq->rtskid = wait_tskid(&(p_pdqcb->rwait_queue)); 00653 pk_rpdq->spdqcnt = p_pdqcb->count; 00654 ercd = E_OK; 00655 t_unlock_cpu(); 00656 00657 error_exit: 00658 LOG_REF_PDQ_LEAVE(ercd, pk_rpdq); 00659 return(ercd); 00660 }
semaphore.c の 377 行で定義されています。
参照先 CHECK_SEMID, CHECK_TSKCTX_UNL, E_OK, get_semcb, LOG_REF_SEM_ENTER, LOG_REF_SEM_LEAVE, semaphore_control_block::semcnt, t_rsem::semcnt, t_lock_cpu, t_unlock_cpu, semaphore_control_block::wait_queue, wait_tskid(), と t_rsem::wtskid.
00378 { 00379 SEMCB *p_semcb; 00380 ER ercd; 00381 00382 LOG_REF_SEM_ENTER(semid, pk_rsem); 00383 CHECK_TSKCTX_UNL(); 00384 CHECK_SEMID(semid); 00385 p_semcb = get_semcb(semid); 00386 00387 t_lock_cpu(); 00388 pk_rsem->wtskid = wait_tskid(&(p_semcb->wait_queue)); 00389 pk_rsem->semcnt = p_semcb->semcnt; 00390 ercd = E_OK; 00391 t_unlock_cpu(); 00392 00393 error_exit: 00394 LOG_REF_SEM_LEAVE(ercd, pk_rsem); 00395 return(ercd); 00396 }
task_except.c の 263 行で定義されています。
参照先 CHECK_TSKCTX_UNL, CHECK_TSKID_SELF, E_OBJ, E_OK, task_control_block::enatex, get_tcb_self, LOG_REF_TEX_ENTER, LOG_REF_TEX_LEAVE, NULL, task_control_block::p_tinib, t_rtex::pndptn, t_lock_cpu, t_unlock_cpu, task_control_block::texptn, task_initialization_block::texrtn, t_rtex::texstat, task_control_block::tstat, TSTAT_DORMANT, TTEX_DIS, と TTEX_ENA.
00264 { 00265 TCB *p_tcb; 00266 ER ercd; 00267 00268 LOG_REF_TEX_ENTER(tskid, pk_rtex); 00269 CHECK_TSKCTX_UNL(); 00270 CHECK_TSKID_SELF(tskid); 00271 p_tcb = get_tcb_self(tskid); 00272 00273 t_lock_cpu(); 00274 if (TSTAT_DORMANT(p_tcb->tstat) || p_tcb->p_tinib->texrtn == NULL) { 00275 ercd = E_OBJ; 00276 } 00277 else { 00278 pk_rtex->texstat = (p_tcb->enatex) ? TTEX_ENA : TTEX_DIS; 00279 pk_rtex->pndptn = p_tcb->texptn; 00280 ercd = E_OK; 00281 } 00282 t_unlock_cpu(); 00283 00284 error_exit: 00285 LOG_REF_TEX_LEAVE(ercd, pk_rtex); 00286 return(ercd); 00287 }
task_refer.c の 74 行で定義されています。
参照先 t_rtsk::actcnt, task_control_block::actque, CHECK_TSKCTX_UNL, CHECK_TSKID_SELF, DTQID, E_OK, EXT_TSKPRI, FLGID, get_tcb_self, t_rtsk::lefttmo, LOG_REF_TSK_ENTER, LOG_REF_TSK_LEAVE, MBXID, MPFID, NULL, p_runtsk, waiting_information::p_tmevtb, task_control_block::p_winfo, PDQID, task_control_block::priority, SEMID, t_lock_cpu, t_unlock_cpu, tmevt_lefttim, TMO_FEVR, TS_WAIT_DLY, TS_WAIT_FLG, TS_WAIT_MASK, TS_WAIT_MBX, TS_WAIT_MPF, TS_WAIT_RDTQ, TS_WAIT_RPDQ, TS_WAIT_SDTQ, TS_WAIT_SEM, TS_WAIT_SLP, TS_WAIT_SPDQ, t_rtsk::tskbpri, t_rtsk::tskpri, t_rtsk::tskstat, t_rtsk::tskwait, task_control_block::tstat, TSTAT_DORMANT, TSTAT_SUSPENDED, TSTAT_WAITING, TTS_DMT, TTS_RDY, TTS_RUN, TTS_SUS, TTS_WAI, TTS_WAS, TTW_DLY, TTW_FLG, TTW_MBX, TTW_MPF, TTW_RDTQ, TTW_RPDQ, TTW_SDTQ, TTW_SEM, TTW_SLP, TTW_SPDQ, t_rtsk::wobjid, t_rtsk::wupcnt, と task_control_block::wupque.
00075 { 00076 TCB *p_tcb; 00077 uint_t tstat; 00078 ER ercd; 00079 00080 LOG_REF_TSK_ENTER(tskid, pk_rtsk); 00081 CHECK_TSKCTX_UNL(); 00082 CHECK_TSKID_SELF(tskid); 00083 p_tcb = get_tcb_self(tskid); 00084 00085 t_lock_cpu(); 00086 tstat = p_tcb->tstat; 00087 if (TSTAT_DORMANT(tstat)) { 00088 /* 00089 * 対象タスクが休止状態の場合 00090 */ 00091 pk_rtsk->tskstat = TTS_DMT; 00092 } 00093 else { 00094 /* 00095 * タスク状態の取出し 00096 */ 00097 if (TSTAT_SUSPENDED(tstat)) { 00098 if (TSTAT_WAITING(tstat)) { 00099 pk_rtsk->tskstat = TTS_WAS; 00100 } 00101 else { 00102 pk_rtsk->tskstat = TTS_SUS; 00103 } 00104 } 00105 else if (TSTAT_WAITING(tstat)) { 00106 pk_rtsk->tskstat = TTS_WAI; 00107 } 00108 else if (p_tcb == p_runtsk) { 00109 pk_rtsk->tskstat = TTS_RUN; 00110 } 00111 else { 00112 pk_rtsk->tskstat = TTS_RDY; 00113 } 00114 00115 /* 00116 * 現在優先度とベース優先度の取出し 00117 */ 00118 pk_rtsk->tskpri = EXT_TSKPRI(p_tcb->priority); 00119 pk_rtsk->tskbpri = EXT_TSKPRI(p_tcb->priority); 00120 00121 if (TSTAT_WAITING(tstat)) { 00122 /* 00123 * 待ち要因と待ち対象のオブジェクトのIDの取出し 00124 */ 00125 switch (tstat & TS_WAIT_MASK) { 00126 case TS_WAIT_SLP: 00127 pk_rtsk->tskwait = TTW_SLP; 00128 break; 00129 case TS_WAIT_DLY: 00130 pk_rtsk->tskwait = TTW_DLY; 00131 break; 00132 case TS_WAIT_SEM: 00133 pk_rtsk->tskwait = TTW_SEM; 00134 pk_rtsk->wobjid = SEMID(((WINFO_SEM *)(p_tcb->p_winfo)) 00135 ->p_semcb); 00136 break; 00137 case TS_WAIT_FLG: 00138 pk_rtsk->tskwait = TTW_FLG; 00139 pk_rtsk->wobjid = FLGID(((WINFO_FLG *)(p_tcb->p_winfo)) 00140 ->p_flgcb); 00141 break; 00142 case TS_WAIT_SDTQ: 00143 pk_rtsk->tskwait = TTW_SDTQ; 00144 pk_rtsk->wobjid = DTQID(((WINFO_DTQ *)(p_tcb->p_winfo)) 00145 ->p_dtqcb); 00146 break; 00147 case TS_WAIT_RDTQ: 00148 pk_rtsk->tskwait = TTW_RDTQ; 00149 pk_rtsk->wobjid = DTQID(((WINFO_DTQ *)(p_tcb->p_winfo)) 00150 ->p_dtqcb); 00151 break; 00152 case TS_WAIT_SPDQ: 00153 pk_rtsk->tskwait = TTW_SPDQ; 00154 pk_rtsk->wobjid = PDQID(((WINFO_PDQ *)(p_tcb->p_winfo)) 00155 ->p_pdqcb); 00156 break; 00157 case TS_WAIT_RPDQ: 00158 pk_rtsk->tskwait = TTW_RPDQ; 00159 pk_rtsk->wobjid = PDQID(((WINFO_PDQ *)(p_tcb->p_winfo)) 00160 ->p_pdqcb); 00161 break; 00162 case TS_WAIT_MBX: 00163 pk_rtsk->tskwait = TTW_MBX; 00164 pk_rtsk->wobjid = MBXID(((WINFO_MBX *)(p_tcb->p_winfo)) 00165 ->p_mbxcb); 00166 break; 00167 case TS_WAIT_MPF: 00168 pk_rtsk->tskwait = TTW_MPF; 00169 pk_rtsk->wobjid = MPFID(((WINFO_MPF *)(p_tcb->p_winfo)) 00170 ->p_mpfcb); 00171 break; 00172 } 00173 00174 /* 00175 * タイムアウトするまでの時間の取出し 00176 */ 00177 if (p_tcb->p_winfo->p_tmevtb != NULL) { 00178 pk_rtsk->lefttmo 00179 = (TMO) tmevt_lefttim(p_tcb->p_winfo->p_tmevtb); 00180 } 00181 else { 00182 pk_rtsk->lefttmo = TMO_FEVR; 00183 } 00184 } 00185 00186 /* 00187 * 起床要求キューイング数の取出し 00188 */ 00189 pk_rtsk->wupcnt = p_tcb->wupque ? 1U : 0U; 00190 } 00191 00192 /* 00193 * 起動要求キューイング数の取出し 00194 */ 00195 pk_rtsk->actcnt = p_tcb->actque ? 1U : 0U; 00196 ercd = E_OK; 00197 t_unlock_cpu(); 00198 00199 error_exit: 00200 LOG_REF_TSK_LEAVE(ercd, pk_rtsk); 00201 return(ercd); 00202 }
参照先 fixed_memorypool_initialization_block::blksz, CHECK_MPFID, CHECK_PAR, CHECK_TSKCTX_UNL, dispatch, E_OK, fixed_memorypool_control_block::fblkcnt, fixed_memorypool_control_block::freelist, get_mpfcb, INDEX_ALLOC, LOG_REL_MPF_ENTER, LOG_REL_MPF_LEAVE, fixed_memorypool_initialization_block::mpf, fixed_memorypool_control_block::p_mpfinib, fixed_memorypool_initialization_block::p_mpfmb, task_control_block::p_winfo, queue_delete_next(), queue_empty(), t_lock_cpu, t_unlock_cpu, fixed_memorypool_control_block::unused, wait_complete, と fixed_memorypool_control_block::wait_queue.
00296 { 00297 MPFCB *p_mpfcb; 00298 SIZE blkoffset; 00299 uint_t blkidx; 00300 TCB *p_tcb; 00301 ER ercd; 00302 00303 LOG_REL_MPF_ENTER(mpfid, blk); 00304 CHECK_TSKCTX_UNL(); 00305 CHECK_MPFID(mpfid); 00306 p_mpfcb = get_mpfcb(mpfid); 00307 CHECK_PAR(p_mpfcb->p_mpfinib->mpf <= blk); 00308 blkoffset = ((char *) blk) - (char *)(p_mpfcb->p_mpfinib->mpf); 00309 CHECK_PAR(blkoffset % p_mpfcb->p_mpfinib->blksz == 0U); 00310 CHECK_PAR(blkoffset / p_mpfcb->p_mpfinib->blksz < p_mpfcb->unused); 00311 blkidx = (uint_t)(blkoffset / p_mpfcb->p_mpfinib->blksz); 00312 CHECK_PAR((p_mpfcb->p_mpfinib->p_mpfmb + blkidx)->next == INDEX_ALLOC); 00313 00314 t_lock_cpu(); 00315 if (!queue_empty(&(p_mpfcb->wait_queue))) { 00316 p_tcb = (TCB *) queue_delete_next(&(p_mpfcb->wait_queue)); 00317 ((WINFO_MPF *)(p_tcb->p_winfo))->blk = blk; 00318 if (wait_complete(p_tcb)) { 00319 dispatch(); 00320 } 00321 ercd = E_OK; 00322 } 00323 else { 00324 p_mpfcb->fblkcnt++; 00325 (p_mpfcb->p_mpfinib->p_mpfmb + blkidx)->next = p_mpfcb->freelist; 00326 p_mpfcb->freelist = blkidx; 00327 ercd = E_OK; 00328 } 00329 t_unlock_cpu(); 00330 00331 error_exit: 00332 LOG_REL_MPF_LEAVE(ercd); 00333 return(ercd); 00334 }
task_sync.c の 333 行で定義されています。
参照先 CHECK_TSKCTX_UNL, CHECK_TSKID, dispatch, E_OBJ, E_OK, get_tcb, LOG_REL_WAI_ENTER, LOG_REL_WAI_LEAVE, t_lock_cpu, t_unlock_cpu, task_control_block::tstat, TSTAT_WAITING, と wait_release.
参照元 main_task().
00334 { 00335 TCB *p_tcb; 00336 ER ercd; 00337 00338 LOG_REL_WAI_ENTER(tskid); 00339 CHECK_TSKCTX_UNL(); 00340 CHECK_TSKID(tskid); 00341 p_tcb = get_tcb(tskid); 00342 00343 t_lock_cpu(); 00344 if (!TSTAT_WAITING(p_tcb->tstat)) { 00345 ercd = E_OBJ; 00346 } 00347 else { 00348 if (wait_release(p_tcb)) { 00349 dispatch(); 00350 } 00351 ercd = E_OK; 00352 } 00353 t_unlock_cpu(); 00354 00355 error_exit: 00356 LOG_REL_WAI_LEAVE(ercd); 00357 return(ercd); 00358 }
sys_manage.c の 180 行で定義されています。
参照先 CHECK_TPRI_SELF, CHECK_TSKCTX_UNL, dispatch, E_OK, INT_PRIORITY, LOG_ROT_RDQ_ENTER, LOG_ROT_RDQ_LEAVE, p_runtsk, rotate_ready_queue, t_lock_cpu, t_unlock_cpu, と TPRI_SELF.
参照元 main_task().
00181 { 00182 uint_t pri; 00183 ER ercd; 00184 00185 LOG_ROT_RDQ_ENTER(tskpri); 00186 CHECK_TSKCTX_UNL(); 00187 CHECK_TPRI_SELF(tskpri); 00188 00189 t_lock_cpu(); 00190 pri = (tskpri == TPRI_SELF) ? p_runtsk->priority : INT_PRIORITY(tskpri); 00191 if (rotate_ready_queue(pri)) { 00192 dispatch(); 00193 } 00194 ercd = E_OK; 00195 t_unlock_cpu(); 00196 00197 error_exit: 00198 LOG_ROT_RDQ_LEAVE(ercd); 00199 return(ercd); 00200 }
task_sync.c の 457 行で定義されています。
参照先 CHECK_TSKCTX_UNL, CHECK_TSKID, dispatch, E_OBJ, E_OK, get_tcb, LOG_RSM_TSK_ENTER, LOG_RSM_TSK_LEAVE, LOG_TSKSTAT, make_runnable, t_lock_cpu, t_unlock_cpu, TS_SUSPENDED, task_control_block::tstat, TSTAT_SUSPENDED, と TSTAT_WAITING.
参照元 main_task().
00458 { 00459 TCB *p_tcb; 00460 ER ercd; 00461 00462 LOG_RSM_TSK_ENTER(tskid); 00463 CHECK_TSKCTX_UNL(); 00464 CHECK_TSKID(tskid); 00465 p_tcb = get_tcb(tskid); 00466 00467 t_lock_cpu(); 00468 if (!TSTAT_SUSPENDED(p_tcb->tstat)) { 00469 ercd = E_OBJ; 00470 } 00471 else if (!TSTAT_WAITING(p_tcb->tstat)) { 00472 /* 00473 * 強制待ち状態から実行できる状態への遷移 00474 */ 00475 if (make_runnable(p_tcb)) { 00476 dispatch(); 00477 } 00478 ercd = E_OK; 00479 } 00480 else { 00481 /* 00482 * 二重待ち状態から待ち状態への遷移 00483 */ 00484 p_tcb->tstat &= ~TS_SUSPENDED; 00485 LOG_TSKSTAT(p_tcb); 00486 ercd = E_OK; 00487 } 00488 t_unlock_cpu(); 00489 00490 error_exit: 00491 LOG_RSM_TSK_LEAVE(ercd); 00492 return(ercd); 00493 }
eventflag.c の 178 行で定義されています。
参照先 check_flg_cond(), CHECK_FLGID, CHECK_TSKCTX_UNL, dispatch, E_OK, eventflag_initialization_block::flgatr, eventflag_waiting_information::flgptn, eventflag_control_block::flgptn, get_flgcb, LOG_SET_FLG_ENTER, LOG_SET_FLG_LEAVE, eventflag_control_block::p_flginib, queue::p_next, task_control_block::p_winfo, queue_delete(), t_lock_cpu, t_unlock_cpu, TA_CLR, task_control_block::task_queue, eventflag_waiting_information::waiptn, wait_complete, eventflag_control_block::wait_queue, と eventflag_waiting_information::wfmode.
00179 { 00180 FLGCB *p_flgcb; 00181 QUEUE *p_queue; 00182 TCB *p_tcb; 00183 WINFO_FLG *p_winfo_flg; 00184 bool_t dspreq = false; 00185 ER ercd; 00186 00187 LOG_SET_FLG_ENTER(flgid, setptn); 00188 CHECK_TSKCTX_UNL(); 00189 CHECK_FLGID(flgid); 00190 p_flgcb = get_flgcb(flgid); 00191 00192 t_lock_cpu(); 00193 p_flgcb->flgptn |= setptn; 00194 p_queue = p_flgcb->wait_queue.p_next; 00195 while (p_queue != &(p_flgcb->wait_queue)) { 00196 p_tcb = (TCB *) p_queue; 00197 p_queue = p_queue->p_next; 00198 p_winfo_flg = (WINFO_FLG *)(p_tcb->p_winfo); 00199 if (check_flg_cond(p_flgcb, p_winfo_flg->waiptn, 00200 p_winfo_flg->wfmode, &(p_winfo_flg->flgptn))) { 00201 queue_delete(&(p_tcb->task_queue)); 00202 if (wait_complete(p_tcb)) { 00203 dspreq = true; 00204 } 00205 if ((p_flgcb->p_flginib->flgatr & TA_CLR) != 0U) { 00206 break; 00207 } 00208 } 00209 } 00210 if (dspreq) { 00211 dispatch(); 00212 } 00213 ercd = E_OK; 00214 t_unlock_cpu(); 00215 00216 error_exit: 00217 LOG_SET_FLG_LEAVE(ercd); 00218 return(ercd); 00219 }
semaphore.c の 149 行で定義されています。
参照先 CHECK_SEMID, CHECK_TSKCTX_UNL, dispatch, E_OK, E_QOVR, get_semcb, LOG_SIG_SEM_ENTER, LOG_SIG_SEM_LEAVE, semaphore_initialization_block::maxsem, semaphore_control_block::p_seminib, queue_delete_next(), queue_empty(), semaphore_control_block::semcnt, t_lock_cpu, t_unlock_cpu, wait_complete, と semaphore_control_block::wait_queue.
参照元 serial_rea_dat(), と serial_wri_dat().
00150 { 00151 SEMCB *p_semcb; 00152 TCB *p_tcb; 00153 ER ercd; 00154 00155 LOG_SIG_SEM_ENTER(semid); 00156 CHECK_TSKCTX_UNL(); 00157 CHECK_SEMID(semid); 00158 p_semcb = get_semcb(semid); 00159 00160 t_lock_cpu(); 00161 if (!queue_empty(&(p_semcb->wait_queue))) { 00162 p_tcb = (TCB *) queue_delete_next(&(p_semcb->wait_queue)); 00163 if (wait_complete(p_tcb)) { 00164 dispatch(); 00165 } 00166 ercd = E_OK; 00167 } 00168 else if (p_semcb->semcnt < p_semcb->p_seminib->maxsem) { 00169 p_semcb->semcnt += 1; 00170 ercd = E_OK; 00171 } 00172 else { 00173 ercd = E_QOVR; 00174 } 00175 t_unlock_cpu(); 00176 00177 error_exit: 00178 LOG_SIG_SEM_LEAVE(ercd); 00179 return(ercd); 00180 }
ER slp_tsk | ( | void | ) | throw () |
task_sync.c の 141 行で定義されています。
参照先 CHECK_DISPATCH, dispatch, E_OK, LOG_SLP_TSK_ENTER, LOG_SLP_TSK_LEAVE, LOG_TSKSTAT, make_wait(), p_runtsk, t_lock_cpu, t_unlock_cpu, TS_WAIT_SLP, TS_WAITING, と waiting_information::wercd.
参照元 task().
00142 { 00143 WINFO winfo; 00144 ER ercd; 00145 00146 LOG_SLP_TSK_ENTER(); 00147 CHECK_DISPATCH(); 00148 00149 t_lock_cpu(); 00150 if (p_runtsk->wupque) { 00151 p_runtsk->wupque = false; 00152 ercd = E_OK; 00153 } 00154 else { 00155 p_runtsk->tstat = (TS_WAITING | TS_WAIT_SLP); 00156 make_wait(&winfo); 00157 LOG_TSKSTAT(p_runtsk); 00158 dispatch(); 00159 ercd = winfo.wercd; 00160 } 00161 t_unlock_cpu(); 00162 00163 error_exit: 00164 LOG_SLP_TSK_LEAVE(ercd); 00165 return(ercd); 00166 }
dataqueue.c の 331 行で定義されています。
参照先 CHECK_DISPATCH, CHECK_DTQID, dataqueue_waiting_information::data, dispatch, E_OK, get_dtqcb, LOG_SND_DTQ_ENTER, LOG_SND_DTQ_LEAVE, p_runtsk, send_data, t_lock_cpu, t_unlock_cpu, TS_WAIT_SDTQ, TS_WAITING, waiting_information::wercd, wait_object_waiting_information::winfo, と wobj_make_wait.
00332 { 00333 DTQCB *p_dtqcb; 00334 WINFO_DTQ winfo_dtq; 00335 bool_t reqdsp; 00336 ER ercd; 00337 00338 LOG_SND_DTQ_ENTER(dtqid, data); 00339 CHECK_DISPATCH(); 00340 CHECK_DTQID(dtqid); 00341 p_dtqcb = get_dtqcb(dtqid); 00342 00343 t_lock_cpu(); 00344 if (send_data(p_dtqcb, data, &reqdsp)) { 00345 if (reqdsp) { 00346 dispatch(); 00347 } 00348 ercd = E_OK; 00349 } 00350 else { 00351 winfo_dtq.data = data; 00352 p_runtsk->tstat = (TS_WAITING | TS_WAIT_SDTQ); 00353 wobj_make_wait((WOBJCB *) p_dtqcb, (WINFO_WOBJ *) &winfo_dtq); 00354 dispatch(); 00355 ercd = winfo_dtq.winfo.wercd; 00356 } 00357 t_unlock_cpu(); 00358 00359 error_exit: 00360 LOG_SND_DTQ_LEAVE(ercd); 00361 return(ercd); 00362 }
参照先 CHECK_MBXID, CHECK_PAR, CHECK_TSKCTX_UNL, dispatch, E_OK, enqueue_msg_pri(), get_mbxcb, LOG_SND_MBX_ENTER, LOG_SND_MBX_LEAVE, mailbox_initialization_block::maxmpri, mailbox_initialization_block::mbxatr, MSGPRI, NULL, mailbox_control_block::p_mbxinib, task_control_block::p_winfo, mailbox_control_block::pk_head, mailbox_control_block::pk_last, t_msg::pk_next, queue_delete_next(), queue_empty(), t_lock_cpu, t_unlock_cpu, TA_MPRI, TMIN_MPRI, wait_complete, と mailbox_control_block::wait_queue.
00165 { 00166 MBXCB *p_mbxcb; 00167 TCB *p_tcb; 00168 ER ercd; 00169 00170 LOG_SND_MBX_ENTER(mbxid, pk_msg); 00171 CHECK_TSKCTX_UNL(); 00172 CHECK_MBXID(mbxid); 00173 p_mbxcb = get_mbxcb(mbxid); 00174 CHECK_PAR((p_mbxcb->p_mbxinib->mbxatr & TA_MPRI) == 0U 00175 || (TMIN_MPRI <= MSGPRI(pk_msg) 00176 && MSGPRI(pk_msg) <= p_mbxcb->p_mbxinib->maxmpri)); 00177 00178 t_lock_cpu(); 00179 if (!queue_empty(&(p_mbxcb->wait_queue))) { 00180 p_tcb = (TCB *) queue_delete_next(&(p_mbxcb->wait_queue)); 00181 ((WINFO_MBX *)(p_tcb->p_winfo))->pk_msg = pk_msg; 00182 if (wait_complete(p_tcb)) { 00183 dispatch(); 00184 } 00185 ercd = E_OK; 00186 } 00187 else if ((p_mbxcb->p_mbxinib->mbxatr & TA_MPRI) != 0U) { 00188 enqueue_msg_pri(&(p_mbxcb->pk_head), pk_msg); 00189 ercd = E_OK; 00190 } 00191 else { 00192 pk_msg->pk_next = NULL; 00193 if (p_mbxcb->pk_head != NULL) { 00194 p_mbxcb->pk_last->pk_next = pk_msg; 00195 } 00196 else { 00197 p_mbxcb->pk_head = pk_msg; 00198 } 00199 p_mbxcb->pk_last = pk_msg; 00200 ercd = E_OK; 00201 } 00202 t_unlock_cpu(); 00203 00204 error_exit: 00205 LOG_SND_MBX_LEAVE(ercd); 00206 return(ercd); 00207 }
pridataq.c の 300 行で定義されています。
参照先 CHECK_DISPATCH, CHECK_PAR, CHECK_PDQID, pridataq_waiting_information::data, pridataq_waiting_information::datapri, dispatch, E_OK, get_pdqcb, LOG_SND_PDQ_ENTER, LOG_SND_PDQ_LEAVE, p_runtsk, send_pridata, t_lock_cpu, t_unlock_cpu, TMIN_DPRI, TS_WAIT_SPDQ, TS_WAITING, waiting_information::wercd, wait_object_waiting_information::winfo, と wobj_make_wait.
00301 { 00302 PDQCB *p_pdqcb; 00303 WINFO_PDQ winfo_pdq; 00304 bool_t reqdsp; 00305 ER ercd; 00306 00307 LOG_SND_PDQ_ENTER(pdqid, data, datapri); 00308 CHECK_DISPATCH(); 00309 CHECK_PDQID(pdqid); 00310 p_pdqcb = get_pdqcb(pdqid); 00311 CHECK_PAR(TMIN_DPRI <= datapri && datapri <= p_pdqcb->p_pdqinib->maxdpri); 00312 00313 t_lock_cpu(); 00314 if (send_pridata(p_pdqcb, data, datapri, &reqdsp)) { 00315 if (reqdsp) { 00316 dispatch(); 00317 } 00318 ercd = E_OK; 00319 } 00320 else { 00321 winfo_pdq.data = data; 00322 winfo_pdq.datapri = datapri; 00323 p_runtsk->tstat = (TS_WAITING | TS_WAIT_SPDQ); 00324 wobj_make_wait((WOBJCB *) p_pdqcb, (WINFO_WOBJ *) &winfo_pdq); 00325 dispatch(); 00326 ercd = winfo_pdq.winfo.wercd; 00327 } 00328 t_unlock_cpu(); 00329 00330 error_exit: 00331 LOG_SND_PDQ_LEAVE(ercd); 00332 return(ercd); 00333 }
bool_t sns_ctx | ( | void | ) | throw () |
sys_manage.c の 453 行で定義されています。
参照先 LOG_SNS_CTX_ENTER, LOG_SNS_CTX_LEAVE, と sense_context().
00454 { 00455 bool_t state; 00456 00457 LOG_SNS_CTX_ENTER(); 00458 state = sense_context() ? true : false; 00459 LOG_SNS_CTX_LEAVE(state); 00460 return(state); 00461 }
bool_t sns_dpn | ( | void | ) | throw () |
sys_manage.c の 507 行で定義されています。
参照先 dspflg, LOG_SNS_DPN_ENTER, LOG_SNS_DPN_LEAVE, sense_context(), と t_sense_lock.
参照元 logtask_flush(), serial_cls_por(), serial_ctl_por(), serial_opn_por(), serial_rea_dat(), serial_ref_por(), と serial_wri_dat().
00508 { 00509 bool_t state; 00510 00511 LOG_SNS_DPN_ENTER(); 00512 state = (sense_context() || t_sense_lock() || !dspflg) ? true : false; 00513 LOG_SNS_DPN_LEAVE(state); 00514 return(state); 00515 }
bool_t sns_dsp | ( | void | ) | throw () |
sys_manage.c の 489 行で定義されています。
参照先 disdsp, LOG_SNS_DSP_ENTER, と LOG_SNS_DSP_LEAVE.
00490 { 00491 bool_t state; 00492 00493 LOG_SNS_DSP_ENTER(); 00494 state = disdsp; 00495 LOG_SNS_DSP_LEAVE(state); 00496 return(state); 00497 }
bool_t sns_ker | ( | void | ) | throw () |
sys_manage.c の 525 行で定義されています。
参照先 kerflg, LOG_SNS_KER_ENTER, と LOG_SNS_KER_LEAVE.
00526 { 00527 bool_t state; 00528 00529 LOG_SNS_KER_ENTER(); 00530 state = kerflg ? false : true; 00531 LOG_SNS_KER_LEAVE(state); 00532 return(state); 00533 }
bool_t sns_loc | ( | void | ) | throw () |
sys_manage.c の 471 行で定義されています。
参照先 LOG_SNS_LOC_ENTER, LOG_SNS_LOC_LEAVE, と x_sense_lock().
00472 { 00473 bool_t state; 00474 00475 LOG_SNS_LOC_ENTER(); 00476 state = x_sense_lock() ? true : false; 00477 LOG_SNS_LOC_LEAVE(state); 00478 return(state); 00479 }
bool_t sns_tex | ( | void | ) | throw () |
task_except.c の 245 行で定義されています。
参照先 LOG_SNS_TEX_ENTER, LOG_SNS_TEX_LEAVE, NULL, と p_runtsk.
00246 { 00247 bool_t state; 00248 00249 LOG_SNS_TEX_ENTER(); 00250 state = (p_runtsk != NULL && p_runtsk->enatex) ? false : true; 00251 LOG_SNS_TEX_LEAVE(state); 00252 return(state); 00253 }
参照先 alarm_handler_control_block::almsta, call_almhdr, CHECK_ALMID, CHECK_PAR, CHECK_TSKCTX_UNL, E_OK, get_almcb, LOG_STA_ALM_ENTER, LOG_STA_ALM_LEAVE, t_lock_cpu, t_unlock_cpu, TMAX_RELTIM, alarm_handler_control_block::tmevtb, tmevtb_dequeue(), と tmevtb_enqueue().
参照元 main_task().
00139 { 00140 ALMCB *p_almcb; 00141 ER ercd; 00142 00143 LOG_STA_ALM_ENTER(almid, almtim); 00144 CHECK_TSKCTX_UNL(); 00145 CHECK_ALMID(almid); 00146 CHECK_PAR(almtim <= TMAX_RELTIM); 00147 p_almcb = get_almcb(almid); 00148 00149 t_lock_cpu(); 00150 if (p_almcb->almsta) { 00151 tmevtb_dequeue(&(p_almcb->tmevtb)); 00152 } 00153 else { 00154 p_almcb->almsta = true; 00155 } 00156 tmevtb_enqueue(&(p_almcb->tmevtb), almtim, 00157 (CBACK) call_almhdr, (void *) p_almcb); 00158 ercd = E_OK; 00159 t_unlock_cpu(); 00160 00161 error_exit: 00162 LOG_STA_ALM_LEAVE(ercd); 00163 return(ercd); 00164 }
参照先 base_time, CHECK_CYCID, CHECK_TSKCTX_UNL, cyclic_handler_control_block::cycsta, cyclic_handler_initialization_block::cyctim, E_OK, get_cyccb, LOG_STA_CYC_ENTER, LOG_STA_CYC_LEAVE, cyclic_handler_control_block::p_cycinib, t_lock_cpu, t_unlock_cpu, cyclic_handler_control_block::tmevtb, tmevtb_dequeue(), と tmevtb_enqueue_cyc().
参照元 main_task().
00140 { 00141 CYCCB *p_cyccb; 00142 ER ercd; 00143 00144 LOG_STA_CYC_ENTER(cycid); 00145 CHECK_TSKCTX_UNL(); 00146 CHECK_CYCID(cycid); 00147 p_cyccb = get_cyccb(cycid); 00148 00149 t_lock_cpu(); 00150 if (p_cyccb->cycsta) { 00151 tmevtb_dequeue(&(p_cyccb->tmevtb)); 00152 } 00153 else { 00154 p_cyccb->cycsta = true; 00155 } 00156 tmevtb_enqueue_cyc(p_cyccb, base_time + p_cyccb->p_cycinib->cyctim); 00157 ercd = E_OK; 00158 t_unlock_cpu(); 00159 00160 error_exit: 00161 LOG_STA_CYC_LEAVE(ercd); 00162 return(ercd); 00163 }
参照先 alarm_handler_control_block::almsta, CHECK_ALMID, CHECK_TSKCTX_UNL, E_OK, get_almcb, LOG_STP_ALM_ENTER, LOG_STP_ALM_LEAVE, t_lock_cpu, t_unlock_cpu, alarm_handler_control_block::tmevtb, と tmevtb_dequeue().
参照元 main_task().
00211 { 00212 ALMCB *p_almcb; 00213 ER ercd; 00214 00215 LOG_STP_ALM_ENTER(almid); 00216 CHECK_TSKCTX_UNL(); 00217 CHECK_ALMID(almid); 00218 p_almcb = get_almcb(almid); 00219 00220 t_lock_cpu(); 00221 if (p_almcb->almsta) { 00222 p_almcb->almsta = false; 00223 tmevtb_dequeue(&(p_almcb->tmevtb)); 00224 } 00225 ercd = E_OK; 00226 t_unlock_cpu(); 00227 00228 error_exit: 00229 LOG_STP_ALM_LEAVE(ercd); 00230 return(ercd); 00231 }
参照先 CHECK_CYCID, CHECK_TSKCTX_UNL, cyclic_handler_control_block::cycsta, E_OK, get_cyccb, LOG_STP_CYC_ENTER, LOG_STP_CYC_LEAVE, t_lock_cpu, t_unlock_cpu, cyclic_handler_control_block::tmevtb, と tmevtb_dequeue().
参照元 main_task().
00174 { 00175 CYCCB *p_cyccb; 00176 ER ercd; 00177 00178 LOG_STP_CYC_ENTER(cycid); 00179 CHECK_TSKCTX_UNL(); 00180 CHECK_CYCID(cycid); 00181 p_cyccb = get_cyccb(cycid); 00182 00183 t_lock_cpu(); 00184 if (p_cyccb->cycsta) { 00185 p_cyccb->cycsta = false; 00186 tmevtb_dequeue(&(p_cyccb->tmevtb)); 00187 } 00188 ercd = E_OK; 00189 t_unlock_cpu(); 00190 00191 error_exit: 00192 LOG_STP_CYC_LEAVE(ercd); 00193 return(ercd); 00194 }
task_sync.c の 403 行で定義されています。
参照先 CHECK_TSKCTX_UNL, CHECK_TSKID_SELF, dispatch, dspflg, E_CTX, E_OBJ, E_OK, E_QOVR, get_tcb_self, LOG_SUS_TSK_ENTER, LOG_SUS_TSK_LEAVE, LOG_TSKSTAT, make_non_runnable, p_runtsk, t_lock_cpu, t_unlock_cpu, TS_SUSPENDED, task_control_block::tstat, TSTAT_DORMANT, TSTAT_RUNNABLE, と TSTAT_SUSPENDED.
参照元 main_task().
00404 { 00405 TCB *p_tcb; 00406 ER ercd; 00407 00408 LOG_SUS_TSK_ENTER(tskid); 00409 CHECK_TSKCTX_UNL(); 00410 CHECK_TSKID_SELF(tskid); 00411 p_tcb = get_tcb_self(tskid); 00412 00413 t_lock_cpu(); 00414 if (p_tcb == p_runtsk && !dspflg) { 00415 ercd = E_CTX; 00416 } 00417 else if (TSTAT_DORMANT(p_tcb->tstat)) { 00418 ercd = E_OBJ; 00419 } 00420 else if (TSTAT_RUNNABLE(p_tcb->tstat)) { 00421 /* 00422 * 実行できる状態から強制待ち状態への遷移 00423 */ 00424 p_tcb->tstat = TS_SUSPENDED; 00425 LOG_TSKSTAT(p_tcb); 00426 if (make_non_runnable(p_tcb)) { 00427 dispatch(); 00428 } 00429 ercd = E_OK; 00430 } 00431 else if (TSTAT_SUSPENDED(p_tcb->tstat)) { 00432 ercd = E_QOVR; 00433 } 00434 else { 00435 /* 00436 * 待ち状態から二重待ち状態への遷移 00437 */ 00438 p_tcb->tstat |= TS_SUSPENDED; 00439 LOG_TSKSTAT(p_tcb); 00440 ercd = E_OK; 00441 } 00442 t_unlock_cpu(); 00443 00444 error_exit: 00445 LOG_SUS_TSK_LEAVE(ercd); 00446 return(ercd); 00447 }
task_manage.c の 287 行で定義されています。
参照先 task_control_block::actque, CHECK_NONSELF, CHECK_TSKCTX_UNL, CHECK_TSKID, dispatch, E_OBJ, E_OK, get_tcb, LOG_TER_TSK_ENTER, LOG_TER_TSK_LEAVE, make_active, make_dormant, make_non_runnable, t_lock_cpu, t_unlock_cpu, task_control_block::tstat, TSTAT_DORMANT, TSTAT_RUNNABLE, TSTAT_WAITING, wait_dequeue_tmevtb(), と wait_dequeue_wobj().
参照元 main_task().
00288 { 00289 TCB *p_tcb; 00290 ER ercd; 00291 00292 LOG_TER_TSK_ENTER(tskid); 00293 CHECK_TSKCTX_UNL(); 00294 CHECK_TSKID(tskid); 00295 p_tcb = get_tcb(tskid); 00296 CHECK_NONSELF(p_tcb); 00297 00298 t_lock_cpu(); 00299 if (TSTAT_DORMANT(p_tcb->tstat)) { 00300 ercd = E_OBJ; 00301 } 00302 else { 00303 if (TSTAT_RUNNABLE(p_tcb->tstat)) { 00304 /* 00305 * p_tcbは自タスクでないため,(シングルプロセッサでは)実 00306 * 行状態でなく,make_non_runnable(p_tcb)でタスクディスパッ 00307 * チが必要になることはない. 00308 */ 00309 (void) make_non_runnable(p_tcb); 00310 } 00311 else if (TSTAT_WAITING(p_tcb->tstat)) { 00312 wait_dequeue_wobj(p_tcb); 00313 wait_dequeue_tmevtb(p_tcb); 00314 } 00315 make_dormant(p_tcb); 00316 if (p_tcb->actque) { 00317 p_tcb->actque = false; 00318 if (make_active(p_tcb)) { 00319 dispatch(); 00320 } 00321 } 00322 ercd = E_OK; 00323 } 00324 t_unlock_cpu(); 00325 00326 error_exit: 00327 LOG_TER_TSK_LEAVE(ercd); 00328 return(ercd); 00329 }
参照先 CHECK_DISPATCH, CHECK_MPFID, CHECK_TMOUT, dispatch, E_OK, E_TMOUT, fixed_memorypool_control_block::fblkcnt, get_mpf_block(), get_mpfcb, LOG_TGET_MPF_ENTER, LOG_TGET_MPF_LEAVE, p_runtsk, t_lock_cpu, t_unlock_cpu, TMO_POL, TS_WAIT_MPF, TS_WAITING, waiting_information::wercd, wait_object_waiting_information::winfo, と wobj_make_wait_tmout.
00250 { 00251 MPFCB *p_mpfcb; 00252 WINFO_MPF winfo_mpf; 00253 TMEVTB tmevtb; 00254 ER ercd; 00255 00256 LOG_TGET_MPF_ENTER(mpfid, p_blk, tmout); 00257 CHECK_DISPATCH(); 00258 CHECK_MPFID(mpfid); 00259 CHECK_TMOUT(tmout); 00260 p_mpfcb = get_mpfcb(mpfid); 00261 00262 t_lock_cpu(); 00263 if (p_mpfcb->fblkcnt > 0) { 00264 get_mpf_block(p_mpfcb, p_blk); 00265 ercd = E_OK; 00266 } 00267 else if (tmout == TMO_POL) { 00268 ercd = E_TMOUT; 00269 } 00270 else { 00271 p_runtsk->tstat = (TS_WAITING | TS_WAIT_MPF); 00272 wobj_make_wait_tmout((WOBJCB *) p_mpfcb, (WINFO_WOBJ *) &winfo_mpf, 00273 &tmevtb, tmout); 00274 dispatch(); 00275 ercd = winfo_mpf.winfo.wercd; 00276 if (ercd == E_OK) { 00277 *p_blk = winfo_mpf.blk; 00278 } 00279 } 00280 t_unlock_cpu(); 00281 00282 error_exit: 00283 LOG_TGET_MPF_LEAVE(ercd, *p_blk); 00284 return(ercd); 00285 }
dataqueue.c の 635 行で定義されています。
参照先 CHECK_DISPATCH, CHECK_DTQID, CHECK_TMOUT, dispatch, E_OK, E_TMOUT, get_dtqcb, LOG_TRCV_DTQ_ENTER, LOG_TRCV_DTQ_LEAVE, LOG_TSKSTAT, make_wait_tmout, p_runtsk, queue_insert_prev(), receive_data, dataqueue_control_block::rwait_queue, t_lock_cpu, t_unlock_cpu, TMO_POL, TS_WAIT_RDTQ, TS_WAITING, と waiting_information::wercd.
00636 { 00637 DTQCB *p_dtqcb; 00638 WINFO_DTQ winfo_dtq; 00639 TMEVTB tmevtb; 00640 bool_t reqdsp; 00641 ER ercd; 00642 00643 LOG_TRCV_DTQ_ENTER(dtqid, p_data, tmout); 00644 CHECK_DISPATCH(); 00645 CHECK_DTQID(dtqid); 00646 CHECK_TMOUT(tmout); 00647 p_dtqcb = get_dtqcb(dtqid); 00648 00649 t_lock_cpu(); 00650 if (receive_data(p_dtqcb, p_data, &reqdsp)) { 00651 if (reqdsp) { 00652 dispatch(); 00653 } 00654 ercd = E_OK; 00655 } 00656 else if (tmout == TMO_POL) { 00657 ercd = E_TMOUT; 00658 } 00659 else { 00660 p_runtsk->tstat = (TS_WAITING | TS_WAIT_RDTQ); 00661 make_wait_tmout((WINFO *) &winfo_dtq, &tmevtb, tmout); 00662 queue_insert_prev(&(p_dtqcb->rwait_queue), &(p_runtsk->task_queue)); 00663 winfo_dtq.p_dtqcb = p_dtqcb; 00664 LOG_TSKSTAT(p_runtsk); 00665 dispatch(); 00666 ercd = winfo_dtq.winfo.wercd; 00667 if (ercd == E_OK) { 00668 *p_data = winfo_dtq.data; 00669 } 00670 } 00671 t_unlock_cpu(); 00672 00673 error_exit: 00674 LOG_TRCV_DTQ_LEAVE(ercd, *p_data); 00675 return(ercd); 00676 }
参照先 CHECK_DISPATCH, CHECK_MBXID, CHECK_TMOUT, dispatch, E_OK, E_TMOUT, get_mbxcb, LOG_TRCV_MBX_ENTER, LOG_TRCV_MBX_LEAVE, NULL, p_runtsk, mailbox_control_block::pk_head, t_msg::pk_next, t_lock_cpu, t_unlock_cpu, TMO_POL, TS_WAIT_MBX, TS_WAITING, waiting_information::wercd, wait_object_waiting_information::winfo, と wobj_make_wait_tmout.
00293 { 00294 MBXCB *p_mbxcb; 00295 WINFO_MBX winfo_mbx; 00296 TMEVTB tmevtb; 00297 ER ercd; 00298 00299 LOG_TRCV_MBX_ENTER(mbxid, ppk_msg, tmout); 00300 CHECK_DISPATCH(); 00301 CHECK_MBXID(mbxid); 00302 CHECK_TMOUT(tmout); 00303 p_mbxcb = get_mbxcb(mbxid); 00304 00305 t_lock_cpu(); 00306 if (p_mbxcb->pk_head != NULL) { 00307 *ppk_msg = p_mbxcb->pk_head; 00308 p_mbxcb->pk_head = (*ppk_msg)->pk_next; 00309 ercd = E_OK; 00310 } 00311 else if (tmout == TMO_POL) { 00312 ercd = E_TMOUT; 00313 } 00314 else { 00315 p_runtsk->tstat = (TS_WAITING | TS_WAIT_MBX); 00316 wobj_make_wait_tmout((WOBJCB *) p_mbxcb, (WINFO_WOBJ *) &winfo_mbx, 00317 &tmevtb, tmout); 00318 dispatch(); 00319 ercd = winfo_mbx.winfo.wercd; 00320 if (ercd == E_OK) { 00321 *ppk_msg = winfo_mbx.pk_msg; 00322 } 00323 } 00324 t_unlock_cpu(); 00325 00326 error_exit: 00327 LOG_TRCV_MBX_LEAVE(ercd, *ppk_msg); 00328 return(ercd); 00329 }
pridataq.c の 549 行で定義されています。
参照先 CHECK_DISPATCH, CHECK_PDQID, CHECK_TMOUT, dispatch, E_OK, E_TMOUT, get_pdqcb, LOG_TRCV_PDQ_ENTER, LOG_TRCV_PDQ_LEAVE, LOG_TSKSTAT, make_wait_tmout, p_runtsk, queue_insert_prev(), receive_pridata, pridataq_control_block::rwait_queue, t_lock_cpu, t_unlock_cpu, TMO_POL, TS_WAIT_RPDQ, TS_WAITING, と waiting_information::wercd.
00550 { 00551 PDQCB *p_pdqcb; 00552 WINFO_PDQ winfo_pdq; 00553 TMEVTB tmevtb; 00554 bool_t reqdsp; 00555 ER ercd; 00556 00557 LOG_TRCV_PDQ_ENTER(pdqid, p_data, p_datapri, tmout); 00558 CHECK_DISPATCH(); 00559 CHECK_PDQID(pdqid); 00560 CHECK_TMOUT(tmout); 00561 p_pdqcb = get_pdqcb(pdqid); 00562 00563 t_lock_cpu(); 00564 if (receive_pridata(p_pdqcb, p_data, p_datapri, &reqdsp)) { 00565 if (reqdsp) { 00566 dispatch(); 00567 } 00568 ercd = E_OK; 00569 } 00570 else if (tmout == TMO_POL) { 00571 ercd = E_TMOUT; 00572 } 00573 else { 00574 p_runtsk->tstat = (TS_WAITING | TS_WAIT_RPDQ); 00575 make_wait_tmout((WINFO *) &winfo_pdq, &tmevtb, tmout); 00576 queue_insert_prev(&(p_pdqcb->rwait_queue), &(p_runtsk->task_queue)); 00577 winfo_pdq.p_pdqcb = p_pdqcb; 00578 LOG_TSKSTAT(p_runtsk); 00579 dispatch(); 00580 ercd = winfo_pdq.winfo.wercd; 00581 if (ercd == E_OK) { 00582 *p_data = winfo_pdq.data; 00583 *p_datapri = winfo_pdq.datapri; 00584 } 00585 } 00586 t_unlock_cpu(); 00587 00588 error_exit: 00589 LOG_TRCV_PDQ_LEAVE(ercd, *p_data, *p_datapri); 00590 return(ercd); 00591 }
task_sync.c の 176 行で定義されています。
参照先 CHECK_DISPATCH, CHECK_TMOUT, dispatch, E_OK, E_TMOUT, LOG_TSKSTAT, LOG_TSLP_TSK_ENTER, LOG_TSLP_TSK_LEAVE, make_wait_tmout, p_runtsk, t_lock_cpu, t_unlock_cpu, TMO_POL, TS_WAIT_SLP, TS_WAITING, と waiting_information::wercd.
参照元 task().
00177 { 00178 WINFO winfo; 00179 TMEVTB tmevtb; 00180 ER ercd; 00181 00182 LOG_TSLP_TSK_ENTER(tmout); 00183 CHECK_DISPATCH(); 00184 CHECK_TMOUT(tmout); 00185 00186 t_lock_cpu(); 00187 if (p_runtsk->wupque) { 00188 p_runtsk->wupque = false; 00189 ercd = E_OK; 00190 } 00191 else if (tmout == TMO_POL) { 00192 ercd = E_TMOUT; 00193 } 00194 else { 00195 p_runtsk->tstat = (TS_WAITING | TS_WAIT_SLP); 00196 make_wait_tmout(&winfo, &tmevtb, tmout); 00197 LOG_TSKSTAT(p_runtsk); 00198 dispatch(); 00199 ercd = winfo.wercd; 00200 } 00201 t_unlock_cpu(); 00202 00203 error_exit: 00204 LOG_TSLP_TSK_LEAVE(ercd); 00205 return(ercd); 00206 }
dataqueue.c の 444 行で定義されています。
参照先 CHECK_DISPATCH, CHECK_DTQID, CHECK_TMOUT, dataqueue_waiting_information::data, dispatch, E_OK, E_TMOUT, get_dtqcb, LOG_TSND_DTQ_ENTER, LOG_TSND_DTQ_LEAVE, p_runtsk, send_data, t_lock_cpu, t_unlock_cpu, TMO_POL, TS_WAIT_SDTQ, TS_WAITING, waiting_information::wercd, wait_object_waiting_information::winfo, と wobj_make_wait_tmout.
00445 { 00446 DTQCB *p_dtqcb; 00447 WINFO_DTQ winfo_dtq; 00448 TMEVTB tmevtb; 00449 bool_t reqdsp; 00450 ER ercd; 00451 00452 LOG_TSND_DTQ_ENTER(dtqid, data, tmout); 00453 CHECK_DISPATCH(); 00454 CHECK_DTQID(dtqid); 00455 CHECK_TMOUT(tmout); 00456 p_dtqcb = get_dtqcb(dtqid); 00457 00458 t_lock_cpu(); 00459 if (send_data(p_dtqcb, data, &reqdsp)) { 00460 if (reqdsp) { 00461 dispatch(); 00462 } 00463 ercd = E_OK; 00464 } 00465 else if (tmout == TMO_POL) { 00466 ercd = E_TMOUT; 00467 } 00468 else { 00469 winfo_dtq.data = data; 00470 p_runtsk->tstat = (TS_WAITING | TS_WAIT_SDTQ); 00471 wobj_make_wait_tmout((WOBJCB *) p_dtqcb, (WINFO_WOBJ *) &winfo_dtq, 00472 &tmevtb, tmout); 00473 dispatch(); 00474 ercd = winfo_dtq.winfo.wercd; 00475 } 00476 t_unlock_cpu(); 00477 00478 error_exit: 00479 LOG_TSND_DTQ_LEAVE(ercd); 00480 return(ercd); 00481 }
pridataq.c の 417 行で定義されています。
参照先 CHECK_DISPATCH, CHECK_PAR, CHECK_PDQID, CHECK_TMOUT, pridataq_waiting_information::data, pridataq_waiting_information::datapri, dispatch, E_OK, E_TMOUT, get_pdqcb, LOG_TSND_PDQ_ENTER, LOG_TSND_PDQ_LEAVE, p_runtsk, send_pridata, t_lock_cpu, t_unlock_cpu, TMIN_DPRI, TMO_POL, TS_WAIT_SPDQ, TS_WAITING, waiting_information::wercd, wait_object_waiting_information::winfo, と wobj_make_wait_tmout.
00418 { 00419 PDQCB *p_pdqcb; 00420 WINFO_PDQ winfo_pdq; 00421 TMEVTB tmevtb; 00422 bool_t reqdsp; 00423 ER ercd; 00424 00425 LOG_TSND_PDQ_ENTER(pdqid, data, datapri, tmout); 00426 CHECK_DISPATCH(); 00427 CHECK_PDQID(pdqid); 00428 CHECK_TMOUT(tmout); 00429 p_pdqcb = get_pdqcb(pdqid); 00430 CHECK_PAR(TMIN_DPRI <= datapri && datapri <= p_pdqcb->p_pdqinib->maxdpri); 00431 00432 t_lock_cpu(); 00433 if (send_pridata(p_pdqcb, data, datapri, &reqdsp)) { 00434 if (reqdsp) { 00435 dispatch(); 00436 } 00437 ercd = E_OK; 00438 } 00439 else if (tmout == TMO_POL) { 00440 ercd = E_TMOUT; 00441 } 00442 else { 00443 winfo_pdq.data = data; 00444 winfo_pdq.datapri = datapri; 00445 p_runtsk->tstat = (TS_WAITING | TS_WAIT_SPDQ); 00446 wobj_make_wait_tmout((WOBJCB *) p_pdqcb, (WINFO_WOBJ *) &winfo_pdq, 00447 &tmevtb, tmout); 00448 dispatch(); 00449 ercd = winfo_pdq.winfo.wercd; 00450 } 00451 t_unlock_cpu(); 00452 00453 error_exit: 00454 LOG_TSND_PDQ_LEAVE(ercd); 00455 return(ercd); 00456 }
eventflag.c の 389 行で定義されています。
参照先 CHECK_DISPATCH, check_flg_cond(), CHECK_FLGID, CHECK_PAR, CHECK_TMOUT, dispatch, E_ILUSE, E_OK, E_TMOUT, eventflag_initialization_block::flgatr, get_flgcb, LOG_TWAI_FLG_ENTER, LOG_TWAI_FLG_LEAVE, eventflag_control_block::p_flginib, p_runtsk, queue_empty(), t_lock_cpu, t_unlock_cpu, TA_WMUL, TMO_POL, TS_WAIT_FLG, TS_WAITING, TWF_ANDW, TWF_ORW, eventflag_waiting_information::waiptn, eventflag_control_block::wait_queue, waiting_information::wercd, eventflag_waiting_information::wfmode, wait_object_waiting_information::winfo, と wobj_make_wait_tmout.
00390 { 00391 FLGCB *p_flgcb; 00392 WINFO_FLG winfo_flg; 00393 TMEVTB tmevtb; 00394 ER ercd; 00395 00396 LOG_TWAI_FLG_ENTER(flgid, waiptn, wfmode, p_flgptn, tmout); 00397 CHECK_DISPATCH(); 00398 CHECK_FLGID(flgid); 00399 CHECK_PAR(waiptn != 0U); 00400 CHECK_PAR(wfmode == TWF_ORW || wfmode == TWF_ANDW); 00401 CHECK_TMOUT(tmout); 00402 p_flgcb = get_flgcb(flgid); 00403 00404 t_lock_cpu(); 00405 if ((p_flgcb->p_flginib->flgatr & TA_WMUL) == 0U 00406 && !queue_empty(&(p_flgcb->wait_queue))) { 00407 ercd = E_ILUSE; 00408 } 00409 else if (check_flg_cond(p_flgcb, waiptn, wfmode, p_flgptn)) { 00410 ercd = E_OK; 00411 } 00412 else if (tmout == TMO_POL) { 00413 ercd = E_TMOUT; 00414 } 00415 else { 00416 winfo_flg.waiptn = waiptn; 00417 winfo_flg.wfmode = wfmode; 00418 p_runtsk->tstat = (TS_WAITING | TS_WAIT_FLG); 00419 wobj_make_wait_tmout((WOBJCB *) p_flgcb, (WINFO_WOBJ *) &winfo_flg, 00420 &tmevtb, tmout); 00421 dispatch(); 00422 ercd = winfo_flg.winfo.wercd; 00423 if (ercd == E_OK) { 00424 *p_flgptn = winfo_flg.flgptn; 00425 } 00426 } 00427 t_unlock_cpu(); 00428 00429 error_exit: 00430 LOG_TWAI_FLG_LEAVE(ercd, *p_flgptn); 00431 return(ercd); 00432 }
semaphore.c の 301 行で定義されています。
参照先 CHECK_DISPATCH, CHECK_SEMID, CHECK_TMOUT, dispatch, E_OK, E_TMOUT, get_semcb, LOG_TWAI_SEM_ENTER, LOG_TWAI_SEM_LEAVE, p_runtsk, semaphore_control_block::semcnt, t_lock_cpu, t_unlock_cpu, TMO_POL, TS_WAIT_SEM, TS_WAITING, waiting_information::wercd, wait_object_waiting_information::winfo, と wobj_make_wait_tmout.
00302 { 00303 SEMCB *p_semcb; 00304 WINFO_SEM winfo_sem; 00305 TMEVTB tmevtb; 00306 ER ercd; 00307 00308 LOG_TWAI_SEM_ENTER(semid, tmout); 00309 CHECK_DISPATCH(); 00310 CHECK_SEMID(semid); 00311 CHECK_TMOUT(tmout); 00312 p_semcb = get_semcb(semid); 00313 00314 t_lock_cpu(); 00315 if (p_semcb->semcnt >= 1) { 00316 p_semcb->semcnt -= 1; 00317 ercd = E_OK; 00318 } 00319 else if (tmout == TMO_POL) { 00320 ercd = E_TMOUT; 00321 } 00322 else { 00323 p_runtsk->tstat = (TS_WAITING | TS_WAIT_SEM); 00324 wobj_make_wait_tmout((WOBJCB *) p_semcb, (WINFO_WOBJ *) &winfo_sem, 00325 &tmevtb, tmout); 00326 dispatch(); 00327 ercd = winfo_sem.winfo.wercd; 00328 } 00329 t_unlock_cpu(); 00330 00331 error_exit: 00332 LOG_TWAI_SEM_LEAVE(ercd); 00333 return(ercd); 00334 }
ER unl_cpu | ( | void | ) | throw () |
sys_manage.c の 342 行で定義されています。
参照先 CHECK_TSKCTX, E_OK, LOG_UNL_CPU_ENTER, LOG_UNL_CPU_LEAVE, t_sense_lock, と t_unlock_cpu.
参照元 main_task(), serial_cls_por(), serial_opn_por(), serial_rea_chr(), serial_wri_chr(), と task().
00343 { 00344 ER ercd; 00345 00346 LOG_UNL_CPU_ENTER(); 00347 CHECK_TSKCTX(); 00348 00349 if (t_sense_lock()) { 00350 t_unlock_cpu(); 00351 } 00352 ercd = E_OK; 00353 00354 error_exit: 00355 LOG_UNL_CPU_LEAVE(ercd); 00356 return(ercd); 00357 }
eventflag.c の 304 行で定義されています。
参照先 CHECK_DISPATCH, check_flg_cond(), CHECK_FLGID, CHECK_PAR, dispatch, E_ILUSE, E_OK, eventflag_initialization_block::flgatr, get_flgcb, LOG_WAI_FLG_ENTER, LOG_WAI_FLG_LEAVE, eventflag_control_block::p_flginib, p_runtsk, queue_empty(), t_lock_cpu, t_unlock_cpu, TA_WMUL, TS_WAIT_FLG, TS_WAITING, TWF_ANDW, TWF_ORW, eventflag_waiting_information::waiptn, eventflag_control_block::wait_queue, waiting_information::wercd, eventflag_waiting_information::wfmode, wait_object_waiting_information::winfo, と wobj_make_wait.
00305 { 00306 FLGCB *p_flgcb; 00307 WINFO_FLG winfo_flg; 00308 ER ercd; 00309 00310 LOG_WAI_FLG_ENTER(flgid, waiptn, wfmode, p_flgptn); 00311 CHECK_DISPATCH(); 00312 CHECK_FLGID(flgid); 00313 CHECK_PAR(waiptn != 0U); 00314 CHECK_PAR(wfmode == TWF_ORW || wfmode == TWF_ANDW); 00315 p_flgcb = get_flgcb(flgid); 00316 00317 t_lock_cpu(); 00318 if ((p_flgcb->p_flginib->flgatr & TA_WMUL) == 0U 00319 && !queue_empty(&(p_flgcb->wait_queue))) { 00320 ercd = E_ILUSE; 00321 } 00322 else if (check_flg_cond(p_flgcb, waiptn, wfmode, p_flgptn)) { 00323 ercd = E_OK; 00324 } 00325 else { 00326 winfo_flg.waiptn = waiptn; 00327 winfo_flg.wfmode = wfmode; 00328 p_runtsk->tstat = (TS_WAITING | TS_WAIT_FLG); 00329 wobj_make_wait((WOBJCB *) p_flgcb, (WINFO_WOBJ *) &winfo_flg); 00330 dispatch(); 00331 ercd = winfo_flg.winfo.wercd; 00332 if (ercd == E_OK) { 00333 *p_flgptn = winfo_flg.flgptn; 00334 } 00335 } 00336 t_unlock_cpu(); 00337 00338 error_exit: 00339 LOG_WAI_FLG_LEAVE(ercd, *p_flgptn); 00340 return(ercd); 00341 }
semaphore.c の 231 行で定義されています。
参照先 CHECK_DISPATCH, CHECK_SEMID, dispatch, E_OK, get_semcb, LOG_WAI_SEM_ENTER, LOG_WAI_SEM_LEAVE, p_runtsk, semaphore_control_block::semcnt, t_lock_cpu, t_unlock_cpu, TS_WAIT_SEM, TS_WAITING, waiting_information::wercd, wait_object_waiting_information::winfo, と wobj_make_wait.
参照元 serial_rea_dat(), serial_wri_chr(), と serial_wri_dat().
00232 { 00233 SEMCB *p_semcb; 00234 WINFO_SEM winfo_sem; 00235 ER ercd; 00236 00237 LOG_WAI_SEM_ENTER(semid); 00238 CHECK_DISPATCH(); 00239 CHECK_SEMID(semid); 00240 p_semcb = get_semcb(semid); 00241 00242 t_lock_cpu(); 00243 if (p_semcb->semcnt >= 1) { 00244 p_semcb->semcnt -= 1; 00245 ercd = E_OK; 00246 } 00247 else { 00248 p_runtsk->tstat = (TS_WAITING | TS_WAIT_SEM); 00249 wobj_make_wait((WOBJCB *) p_semcb, (WINFO_WOBJ *) &winfo_sem); 00250 dispatch(); 00251 ercd = winfo_sem.winfo.wercd; 00252 } 00253 t_unlock_cpu(); 00254 00255 error_exit: 00256 LOG_WAI_SEM_LEAVE(ercd); 00257 return(ercd); 00258 }
task_sync.c の 216 行で定義されています。
参照先 CHECK_TSKCTX_UNL, CHECK_TSKID_SELF, dispatch, E_OBJ, E_OK, E_QOVR, get_tcb_self, LOG_WUP_TSK_ENTER, LOG_WUP_TSK_LEAVE, t_lock_cpu, t_unlock_cpu, task_control_block::tstat, TSTAT_DORMANT, TSTAT_WAIT_SLP, wait_complete, と task_control_block::wupque.
参照元 main_task().
00217 { 00218 TCB *p_tcb; 00219 ER ercd; 00220 00221 LOG_WUP_TSK_ENTER(tskid); 00222 CHECK_TSKCTX_UNL(); 00223 CHECK_TSKID_SELF(tskid); 00224 p_tcb = get_tcb_self(tskid); 00225 00226 t_lock_cpu(); 00227 if (TSTAT_DORMANT(p_tcb->tstat)) { 00228 ercd = E_OBJ; 00229 } 00230 else if (TSTAT_WAIT_SLP(p_tcb->tstat)) { 00231 if (wait_complete(p_tcb)) { 00232 dispatch(); 00233 } 00234 ercd = E_OK; 00235 } 00236 else if (!(p_tcb->wupque)) { 00237 p_tcb->wupque = true; 00238 ercd = E_OK; 00239 } 00240 else { 00241 ercd = E_QOVR; 00242 } 00243 t_unlock_cpu(); 00244 00245 error_exit: 00246 LOG_WUP_TSK_LEAVE(ercd); 00247 return(ercd); 00248 }
bool_t xsns_dpn | ( | void * | p_excinf | ) | throw () |
exception.c の 103 行で定義されています。
参照先 disdsp, exc_sense_intmask(), LOG_XSNS_DPN_ENTER, と LOG_XSNS_DPN_LEAVE.
00104 { 00105 bool_t state; 00106 00107 LOG_XSNS_DPN_ENTER(p_excinf); 00108 state = (exc_sense_intmask(p_excinf) && !disdsp) ? false : true; 00109 LOG_XSNS_DPN_LEAVE(state); 00110 return(state); 00111 }
bool_t xsns_xpn | ( | void * | p_excinf | ) | throw () |
exception.c の 125 行で定義されています。
参照先 exc_sense_unlock(), LOG_XSNS_XPN_ENTER, LOG_XSNS_XPN_LEAVE, NULL, と p_runtsk.
00126 { 00127 bool_t state; 00128 00129 LOG_XSNS_XPN_ENTER(p_excinf); 00130 state = (exc_sense_unlock(p_excinf) 00131 && p_runtsk != NULL && p_runtsk->enatex) ? false : true; 00132 LOG_XSNS_XPN_LEAVE(state); 00133 return(state); 00134 }
Copyright © 2008 by Kijineko Inc.