kernel.h

#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 COUNT_MPF_T ( sz   )     TOPPERS_COUNT_SZ(sz, sizeof(MPF_T))

kernel.h465 行で定義されています。

#define COUNT_STK_T ( sz   )     TOPPERS_COUNT_SZ(sz, sizeof(STK_T))

kernel.h462 行で定義されています。

#define ROUND_MPF_T ( sz   )     TOPPERS_ROUND_SZ(sz, sizeof(MPF_T))

kernel.h466 行で定義されています。

#define ROUND_STK_T ( sz   )     TOPPERS_ROUND_SZ(sz, sizeof(STK_T))

kernel.h463 行で定義されています。

#define TA_ACT   UINT_C(0x02)

kernel.h348 行で定義されています。

参照元 initialize_task().

#define TA_CLR   UINT_C(0x04)

kernel.h354 行で定義されています。

参照元 check_flg_cond(), iset_flg(), と set_flg().

#define TA_EDGE   UINT_C(0x02)

kernel.h361 行で定義されています。

参照元 target_initialize(), と x_config_int().

#define TA_ENAINT   UINT_C(0x01)

kernel.h360 行で定義されています。

参照元 x_config_int().

#define TA_MPRI   UINT_C(0x02)

kernel.h351 行で定義されています。

参照元 snd_mbx().

#define TA_NONKERNEL   UINT_C(0x02)

kernel.h358 行で定義されています。

#define TA_STA   UINT_C(0x02)

kernel.h356 行で定義されています。

参照元 initialize_cyclic().

#define TA_TPRI   UINT_C(0x01)

kernel.h350 行で定義されています。

参照元 wobj_change_priority(), と wobj_queue_insert().

#define TA_WMUL   UINT_C(0x02)

kernel.h353 行で定義されています。

参照元 pol_flg(), twai_flg(), と wai_flg().

#define TALM_STA   UINT_C(0x02)

kernel.h397 行で定義されています。

参照元 ref_alm().

#define TALM_STP   UINT_C(0x01)

kernel.h396 行で定義されています。

参照元 ref_alm().

#define TBIT_FLGPTN   (sizeof(FLGPTN) * CHAR_BIT)

kernel.h446 行で定義されています。

#define TBIT_TEXPTN   (sizeof(TEXPTN) * CHAR_BIT)

kernel.h442 行で定義されています。

#define TCYC_STA   UINT_C(0x02)

kernel.h394 行で定義されています。

参照元 ref_cyc().

#define TCYC_STP   UINT_C(0x01)

kernel.h393 行で定義されています。

参照元 ref_cyc().

#define TIPM_ENAALL   0

kernel.h408 行で定義されています。

参照元 chg_ipm(), ena_dsp(), と ext_tsk().

#define TKERNEL_MAKER   UINT_C(0x0118)

kernel.h427 行で定義されています。

#define TKERNEL_PRID   UINT_C(0x0007)

kernel.h428 行で定義されています。

#define TKERNEL_PRVER   UINT_C(0x1031)

kernel.h430 行で定義されています。

参照元 print_banner().

#define TKERNEL_SPVER   UINT_C(0xf5b0)

kernel.h429 行で定義されています。

#define TMAX_ACTCNT   UINT_C(1)

kernel.h435 行で定義されています。

#define TMAX_DPRI   16

kernel.h420 行で定義されています。

#define TMAX_MAXSEM   UINT_MAX

kernel.h476 行で定義されています。

#define TMAX_MPRI   16

kernel.h422 行で定義されています。

#define TMAX_TPRI   16

kernel.h418 行で定義されています。

#define TMAX_WUPCNT   UINT_C(1)

kernel.h436 行で定義されています。

#define TMIN_DPRI   1

kernel.h419 行で定義されています。

参照元 ipsnd_pdq(), psnd_pdq(), snd_pdq(), と tsnd_pdq().

#define TMIN_MPRI   1

kernel.h421 行で定義されています。

参照元 snd_mbx().

#define TMIN_TPRI   1

kernel.h417 行で定義されています。

#define TOPPERS_COUNT_SZ ( sz,
unit   )     (((sz) + (unit) - 1) / (unit))

kernel.h456 行で定義されています。

#define TOPPERS_MPF_T   intptr_t

kernel.h111 行で定義されています。

#define TOPPERS_ROUND_SZ ( sz,
unit   )     (((sz) + (unit) - 1) & ~((unit) - 1))

kernel.h459 行で定義されています。

#define TOPPERS_STK_T   intptr_t

kernel.h106 行で定義されています。

#define TPRI_INI   0

kernel.h406 行で定義されています。

参照元 chg_pri().

#define TPRI_SELF   0

kernel.h405 行で定義されています。

参照元 rot_rdq().

#define TSK_NONE   0

kernel.h403 行で定義されています。

参照元 iget_tid(), と wait_tskid().

#define TSK_SELF   0

kernel.h402 行で定義されています。

#define TSZ_MPF ( blkcnt,
blksz   )     ((blkcnt) * ROUND_MPF_T(blksz))

kernel.h471 行で定義されています。

#define TTEX_DIS   UINT_C(0x02)

kernel.h391 行で定義されています。

参照元 ref_tex().

#define TTEX_ENA   UINT_C(0x01)

kernel.h390 行で定義されています。

参照元 ref_tex().

#define TTS_DMT   UINT_C(0x10)

kernel.h377 行で定義されています。

参照元 ref_tsk().

#define TTS_RDY   UINT_C(0x02)

kernel.h373 行で定義されています。

参照元 ref_tsk().

#define TTS_RUN   UINT_C(0x01)

kernel.h372 行で定義されています。

参照元 ref_tsk().

#define TTS_SUS   UINT_C(0x08)

kernel.h375 行で定義されています。

参照元 ref_tsk().

#define TTS_WAI   UINT_C(0x04)

kernel.h374 行で定義されています。

参照元 ref_tsk().

#define TTS_WAS   UINT_C(0x0c)

kernel.h376 行で定義されています。

参照元 ref_tsk().

#define TTW_DLY   UINT_C(0x0002)

kernel.h380 行で定義されています。

参照元 ref_tsk().

#define TTW_FLG   UINT_C(0x0008)

kernel.h382 行で定義されています。

参照元 ref_tsk().

#define TTW_MBX   UINT_C(0x0040)

kernel.h387 行で定義されています。

参照元 ref_tsk().

#define TTW_MPF   UINT_C(0x2000)

kernel.h388 行で定義されています。

参照元 ref_tsk().

#define TTW_RDTQ   UINT_C(0x0020)

kernel.h384 行で定義されています。

参照元 ref_tsk().

#define TTW_RPDQ   UINT_C(0x0200)

kernel.h386 行で定義されています。

参照元 ref_tsk().

#define TTW_SDTQ   UINT_C(0x0010)

kernel.h383 行で定義されています。

参照元 ref_tsk().

#define TTW_SEM   UINT_C(0x0004)

kernel.h381 行で定義されています。

参照元 ref_tsk().

#define TTW_SLP   UINT_C(0x0001)

kernel.h379 行で定義されています。

参照元 ref_tsk().

#define TTW_SPDQ   UINT_C(0x0100)

kernel.h385 行で定義されています。

参照元 ref_tsk().

#define TWF_ANDW   UINT_C(0x02)

kernel.h367 行で定義されています。

参照元 pol_flg(), twai_flg(), と wai_flg().

#define TWF_ORW   UINT_C(0x01)

kernel.h366 行で定義されています。

参照元 check_flg_cond(), pol_flg(), twai_flg(), と wai_flg().


型定義

typedef void(* ALMHDR)(intptr_t exinf)

kernel.h97 行で定義されています。

typedef void(* CYCHDR)(intptr_t exinf)

kernel.h96 行で定義されています。

typedef void(* EXCHDR)(void *p_excinf)

kernel.h98 行で定義されています。

typedef uint_t EXCNO

kernel.h87 行で定義されています。

typedef uint_t FLGPTN

kernel.h84 行で定義されています。

typedef uint_t INHNO

kernel.h85 行で定義されています。

typedef void(* INIRTN)(intptr_t exinf)

kernel.h99 行で定義されています。

typedef void(* INTHDR)(void)

kernel.h94 行で定義されています。

typedef uint_t INTNO

kernel.h86 行で定義されています。

typedef void(* ISR)(intptr_t exinf)

kernel.h95 行で定義されています。

typedef TOPPERS_MPF_T MPF_T

kernel.h113 行で定義されています。

typedef TOPPERS_STK_T STK_T

kernel.h108 行で定義されています。

typedef struct t_msg T_MSG

typedef struct t_msg_pri T_MSG_PRI

typedef struct t_ralm T_RALM

typedef struct t_rcyc T_RCYC

typedef struct t_rdtq T_RDTQ

typedef struct t_rflg T_RFLG

typedef struct t_rmbx T_RMBX

typedef struct t_rmpf T_RMPF

typedef struct t_rpdq T_RPDQ

typedef struct t_rsem T_RSEM

typedef struct t_rtex T_RTEX

typedef struct t_rtsk T_RTSK

typedef void(* TASK)(intptr_t exinf)

kernel.h92 行で定義されています。

typedef void(* TERRTN)(intptr_t exinf)

kernel.h100 行で定義されています。

typedef uint_t TEXPTN

kernel.h83 行で定義されています。

typedef void(* TEXRTN)(TEXPTN texptn, intptr_t exinf)

kernel.h93 行で定義されています。


関数

ER act_tsk ( ID  tskid  )  throw ()

task_manage.c125 行で定義されています。

参照先 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 }

ER_UINT can_act ( ID  tskid  )  throw ()

task_manage.c203 行で定義されています。

参照先 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 }

ER_UINT can_wup ( ID  tskid  )  throw ()

task_sync.c300 行で定義されています。

参照先 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 }

ER chg_ipm ( PRI  intpri  )  throw ()

interrupt.c193 行で定義されています。

参照先 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 }

ER chg_pri ( ID  tskid,
PRI  tskpri 
) throw ()

task_manage.c339 行で定義されています。

参照先 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 }

ER clr_flg ( ID  flgid,
FLGPTN  clrptn 
) throw ()

eventflag.c276 行で定義されています。

参照先 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.c396 行で定義されています。

参照先 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 }

ER dis_int ( INTNO  intno  )  throw ()

参照元 sio_cls_por().

ER dis_tex ( void   )  throw ()

task_except.c182 行で定義されています。

参照先 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 }

ER dly_tsk ( RELTIM  dlytim  )  throw ()

task_sync.c503 行で定義されています。

参照先 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.c422 行で定義されています。

参照先 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 }

ER ena_int ( INTNO  intno  )  throw ()

参照元 sio_opn_por().

ER ena_tex ( void   )  throw ()

task_except.c212 行で定義されています。

参照先 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 ()

startup.c122 行で定義されています。

参照先 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.c231 行で定義されています。

参照先 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 }

ER fsnd_dtq ( ID  dtqid,
intptr_t  data 
) throw ()

dataqueue.c491 行で定義されています。

参照先 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.c411 行で定義されています。

参照先 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 }

ER get_ipm ( PRI p_intpri  )  throw ()

interrupt.c234 行で定義されています。

参照先 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 }

ER get_mpf ( ID  mpfid,
void **  p_blk 
) throw ()

mempfix.c176 行で定義されています。

参照先 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 }

ER get_pri ( ID  tskid,
PRI p_tskpri 
) throw ()

task_manage.c378 行で定義されています。

参照先 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 }

ER get_tid ( ID p_tskid  )  throw ()

sys_manage.c238 行で定義されています。

参照先 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 }

ER get_tim ( SYSTIM p_systim  )  throw ()

time_manage.c76 行で定義されています。

参照先 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 }

ER get_utm ( SYSUTM p_sysutm  )  throw ()

ER iact_tsk ( ID  tskid  )  throw ()

task_manage.c164 行で定義されています。

参照先 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 }

ER ifsnd_dtq ( ID  dtqid,
intptr_t  data 
) throw ()

dataqueue.c522 行で定義されています。

参照先 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 }

ER iget_tid ( ID p_tskid  )  throw ()

sys_manage.c263 行で定義されています。

参照先 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.c313 行で定義されています。

参照先 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 }

ER ini_dtq ( ID  dtqid  )  throw ()

dataqueue.c686 行で定義されています。

参照先 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 }

ER ini_flg ( ID  flgid  )  throw ()

eventflag.c442 行で定義されています。

参照先 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 }

ER ini_mbx ( ID  mbxid  )  throw ()

mailbox.c339 行で定義されています。

参照先 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 }

ER ini_mpf ( ID  mpfid  )  throw ()

mempfix.c344 行で定義されています。

参照先 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 }

ER ini_pdq ( ID  pdqid  )  throw ()

pridataq.c601 行で定義されています。

参照先 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 }

ER ini_sem ( ID  semid  )  throw ()

semaphore.c344 行で定義されています。

参照先 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 }

ER ipsnd_dtq ( ID  dtqid,
intptr_t  data 
) throw ()

dataqueue.c408 行で定義されています。

参照先 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 }

ER ipsnd_pdq ( ID  pdqid,
intptr_t  data,
PRI  datapri 
) throw ()

pridataq.c380 行で定義されています。

参照先 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 }

ER iras_tex ( ID  tskid,
TEXPTN  rasptn 
) throw ()

task_except.c145 行で定義されています。

参照先 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 }

ER irel_wai ( ID  tskid  )  throw ()

task_sync.c368 行で定義されています。

参照先 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 }

ER irot_rdq ( PRI  tskpri  )  throw ()

sys_manage.c210 行で定義されています。

参照先 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 }

ER iset_flg ( ID  flgid,
FLGPTN  setptn 
) throw ()

eventflag.c229 行で定義されています。

参照先 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 }

ER isig_sem ( ID  semid  )  throw ()

semaphore.c190 行で定義されています。

参照先 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 }

ER ista_alm ( ID  almid,
RELTIM  almtim 
) throw ()

alarm.c174 行で定義されています。

参照先 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 }

ER istp_alm ( ID  almid  )  throw ()

alarm.c241 行で定義されています。

参照先 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.c371 行で定義されています。

参照先 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 }

ER iwup_tsk ( ID  tskid  )  throw ()

task_sync.c258 行で定義されています。

参照先 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.c288 行で定義されています。

参照先 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 }

ER pget_mpf ( ID  mpfid,
void **  p_blk 
) throw ()

mempfix.c216 行で定義されています。

参照先 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 }

ER pol_flg ( ID  flgid,
FLGPTN  waiptn,
MODE  wfmode,
FLGPTN p_flgptn 
) throw ()

eventflag.c351 行で定義されています。

参照先 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 }

ER pol_sem ( ID  semid  )  throw ()

semaphore.c268 行で定義されています。

参照先 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 }

ER prcv_dtq ( ID  dtqid,
intptr_t *  p_data 
) throw ()

dataqueue.c599 行で定義されています。

参照先 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 }

ER prcv_mbx ( ID  mbxid,
T_MSG **  ppk_msg 
) throw ()

mailbox.c258 行で定義されています。

参照先 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 }

ER prcv_pdq ( ID  pdqid,
intptr_t *  p_data,
PRI p_datapri 
) throw ()

pridataq.c513 行で定義されています。

参照先 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 }

ER psnd_dtq ( ID  dtqid,
intptr_t  data 
) throw ()

dataqueue.c372 行で定義されています。

参照先 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 }

ER psnd_pdq ( ID  pdqid,
intptr_t  data,
PRI  datapri 
) throw ()

pridataq.c343 行で定義されています。

参照先 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 }

ER ras_tex ( ID  tskid,
TEXPTN  rasptn 
) throw ()

task_except.c108 行で定義されています。

参照先 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 }

ER rcv_dtq ( ID  dtqid,
intptr_t *  p_data 
) throw ()

dataqueue.c553 行で定義されています。

参照先 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 }

ER rcv_mbx ( ID  mbxid,
T_MSG **  ppk_msg 
) throw ()

mailbox.c217 行で定義されています。

参照先 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 }

ER rcv_pdq ( ID  pdqid,
intptr_t *  p_data,
PRI p_datapri 
) throw ()

pridataq.c466 行で定義されています。

参照先 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 }

ER ref_alm ( ID  almid,
T_RALM pk_ralm 
) throw ()

alarm.c272 行で定義されています。

参照先 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 }

ER ref_cyc ( ID  cycid,
T_RCYC pk_rcyc 
) throw ()

cyclic.c204 行で定義されています。

参照先 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 }

ER ref_dtq ( ID  dtqid,
T_RDTQ pk_rdtq 
) throw ()

dataqueue.c724 行で定義されています。

参照先 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 }

ER ref_flg ( ID  flgid,
T_RFLG pk_rflg 
) throw ()

eventflag.c475 行で定義されています。

参照先 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 }

ER ref_mbx ( ID  mbxid,
T_RMBX pk_rmbx 
) throw ()

mailbox.c372 行で定義されています。

参照先 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 }

ER ref_mpf ( ID  mpfid,
T_RMPF pk_rmpf 
) throw ()

mempfix.c379 行で定義されています。

参照先 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 }

ER ref_pdq ( ID  pdqid,
T_RPDQ pk_rpdq 
) throw ()

pridataq.c640 行で定義されています。

参照先 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 }

ER ref_sem ( ID  semid,
T_RSEM pk_rsem 
) throw ()

semaphore.c377 行で定義されています。

参照先 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 }

ER ref_tex ( ID  tskid,
T_RTEX pk_rtex 
) throw ()

task_except.c263 行で定義されています。

参照先 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 }

ER ref_tsk ( ID  tskid,
T_RTSK pk_rtsk 
) throw ()

task_refer.c74 行で定義されています。

参照先 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 }

ER rel_mpf ( ID  mpfid,
void *  blk 
) throw ()

mempfix.c295 行で定義されています。

参照先 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 }

ER rel_wai ( ID  tskid  )  throw ()

task_sync.c333 行で定義されています。

参照先 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 }

ER rot_rdq ( PRI  tskpri  )  throw ()

sys_manage.c180 行で定義されています。

参照先 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 }

ER rsm_tsk ( ID  tskid  )  throw ()

task_sync.c457 行で定義されています。

参照先 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 }

ER set_flg ( ID  flgid,
FLGPTN  setptn 
) throw ()

eventflag.c178 行で定義されています。

参照先 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 }

ER sig_sem ( ID  semid  )  throw ()

semaphore.c149 行で定義されています。

参照先 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.c141 行で定義されています。

参照先 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 }

ER snd_dtq ( ID  dtqid,
intptr_t  data 
) throw ()

dataqueue.c331 行で定義されています。

参照先 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 }

ER snd_mbx ( ID  mbxid,
T_MSG pk_msg 
) throw ()

mailbox.c164 行で定義されています。

参照先 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 }

ER snd_pdq ( ID  pdqid,
intptr_t  data,
PRI  datapri 
) throw ()

pridataq.c300 行で定義されています。

参照先 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.c453 行で定義されています。

参照先 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.c507 行で定義されています。

参照先 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.c489 行で定義されています。

参照先 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.c525 行で定義されています。

参照先 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.c471 行で定義されています。

参照先 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.c245 行で定義されています。

参照先 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 }

ER sta_alm ( ID  almid,
RELTIM  almtim 
) throw ()

alarm.c138 行で定義されています。

参照先 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 }

ER sta_cyc ( ID  cycid  )  throw ()

cyclic.c139 行で定義されています。

参照先 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 }

ER stp_alm ( ID  almid  )  throw ()

alarm.c210 行で定義されています。

参照先 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 }

ER stp_cyc ( ID  cycid  )  throw ()

cyclic.c173 行で定義されています。

参照先 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 }

ER sus_tsk ( ID  tskid  )  throw ()

task_sync.c403 行で定義されています。

参照先 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 }

ER ter_tsk ( ID  tskid  )  throw ()

task_manage.c287 行で定義されています。

参照先 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 }

ER tget_mpf ( ID  mpfid,
void **  p_blk,
TMO  tmout 
) throw ()

mempfix.c249 行で定義されています。

参照先 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 }

ER trcv_dtq ( ID  dtqid,
intptr_t *  p_data,
TMO  tmout 
) throw ()

dataqueue.c635 行で定義されています。

参照先 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 }

ER trcv_mbx ( ID  mbxid,
T_MSG **  ppk_msg,
TMO  tmout 
) throw ()

mailbox.c292 行で定義されています。

参照先 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 }

ER trcv_pdq ( ID  pdqid,
intptr_t *  p_data,
PRI p_datapri,
TMO  tmout 
) throw ()

pridataq.c549 行で定義されています。

参照先 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 }

ER tslp_tsk ( TMO  tmout  )  throw ()

task_sync.c176 行で定義されています。

参照先 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 }

ER tsnd_dtq ( ID  dtqid,
intptr_t  data,
TMO  tmout 
) throw ()

dataqueue.c444 行で定義されています。

参照先 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 }

ER tsnd_pdq ( ID  pdqid,
intptr_t  data,
PRI  datapri,
TMO  tmout 
) throw ()

pridataq.c417 行で定義されています。

参照先 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 }

ER twai_flg ( ID  flgid,
FLGPTN  waiptn,
MODE  wfmode,
FLGPTN p_flgptn,
TMO  tmout 
) throw ()

eventflag.c389 行で定義されています。

参照先 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 }

ER twai_sem ( ID  semid,
TMO  tmout 
) throw ()

semaphore.c301 行で定義されています。

参照先 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.c342 行で定義されています。

参照先 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 }

ER wai_flg ( ID  flgid,
FLGPTN  waiptn,
MODE  wfmode,
FLGPTN p_flgptn 
) throw ()

eventflag.c304 行で定義されています。

参照先 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 }

ER wai_sem ( ID  semid  )  throw ()

semaphore.c231 行で定義されています。

参照先 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 }

ER wup_tsk ( ID  tskid  )  throw ()

task_sync.c216 行で定義されています。

参照先 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.c103 行で定義されています。

参照先 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.c125 行で定義されています。

参照先 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.

ホームページ制作