task_except.c

#include "kernel_impl.h"
#include "check.h"
#include "task.h"

ソースコードを見る。

マクロ定義

#define LOG_RAS_TEX_ENTER(tskid, rasptn)
#define LOG_RAS_TEX_LEAVE(ercd)
#define LOG_IRAS_TEX_ENTER(tskid, rasptn)
#define LOG_IRAS_TEX_LEAVE(ercd)
#define LOG_DIS_TEX_ENTER()
#define LOG_DIS_TEX_LEAVE(ercd)
#define LOG_ENA_TEX_ENTER()
#define LOG_ENA_TEX_LEAVE(ercd)
#define LOG_SNS_TEX_ENTER()
#define LOG_SNS_TEX_LEAVE(state)
#define LOG_REF_TEX_ENTER(tskid, pk_rtex)
#define LOG_REF_TEX_LEAVE(ercd, pk_rtex)

関数

ER ras_tex (ID tskid, TEXPTN rasptn)
ER iras_tex (ID tskid, TEXPTN rasptn)
ER dis_tex (void)
ER ena_tex (void)
bool_t sns_tex (void)
ER ref_tex (ID tskid, T_RTEX *pk_rtex)


マクロ定義

 
#define LOG_DIS_TEX_ENTER (  ) 

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

参照元 dis_tex().

#define LOG_DIS_TEX_LEAVE ( ercd   ) 

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

参照元 dis_tex().

 
#define LOG_ENA_TEX_ENTER (  ) 

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

参照元 ena_tex().

#define LOG_ENA_TEX_LEAVE ( ercd   ) 

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

参照元 ena_tex().

#define LOG_IRAS_TEX_ENTER ( tskid,
rasptn   ) 

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

参照元 iras_tex().

#define LOG_IRAS_TEX_LEAVE ( ercd   ) 

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

参照元 iras_tex().

#define LOG_RAS_TEX_ENTER ( tskid,
rasptn   ) 

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

参照元 ras_tex().

#define LOG_RAS_TEX_LEAVE ( ercd   ) 

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

参照元 ras_tex().

#define LOG_REF_TEX_ENTER ( tskid,
pk_rtex   ) 

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

参照元 ref_tex().

#define LOG_REF_TEX_LEAVE ( ercd,
pk_rtex   ) 

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

参照元 ref_tex().

 
#define LOG_SNS_TEX_ENTER (  ) 

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

参照元 sns_tex().

#define LOG_SNS_TEX_LEAVE ( state   ) 

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

参照元 sns_tex().


関数

ER dis_tex ( void   ) 

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 ena_tex ( void   ) 

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 iras_tex ( ID  tskid,
TEXPTN  rasptn 
)

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 ras_tex ( ID  tskid,
TEXPTN  rasptn 
)

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 ref_tex ( ID  tskid,
T_RTEX pk_rtex 
)

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 }

bool_t sns_tex ( void   ) 

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 }


Copyright © 2008 by Kijineko Inc.

ホームページ制作