sys_manage.c

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

ソースコードを見る。

マクロ定義

#define LOG_ROT_RDQ_ENTER(tskpri)
#define LOG_ROT_RDQ_LEAVE(ercd)
#define LOG_IROT_RDQ_ENTER(tskpri)
#define LOG_IROT_RDQ_LEAVE(ercd)
#define LOG_GET_TID_ENTER(p_tskid)
#define LOG_GET_TID_LEAVE(ercd, tskid)
#define LOG_IGET_TID_ENTER(p_tskid)
#define LOG_IGET_TID_LEAVE(ercd, tskid)
#define LOG_LOC_CPU_ENTER()
#define LOG_LOC_CPU_LEAVE(ercd)
#define LOG_ILOC_CPU_ENTER()
#define LOG_ILOC_CPU_LEAVE(ercd)
#define LOG_UNL_CPU_ENTER()
#define LOG_UNL_CPU_LEAVE(ercd)
#define LOG_IUNL_CPU_ENTER()
#define LOG_IUNL_CPU_LEAVE(ercd)
#define LOG_DIS_DSP_ENTER()
#define LOG_DIS_DSP_LEAVE(ercd)
#define LOG_ENA_DSP_ENTER()
#define LOG_ENA_DSP_LEAVE(ercd)
#define LOG_SNS_CTX_ENTER()
#define LOG_SNS_CTX_LEAVE(state)
#define LOG_SNS_LOC_ENTER()
#define LOG_SNS_LOC_LEAVE(state)
#define LOG_SNS_DSP_ENTER()
#define LOG_SNS_DSP_LEAVE(state)
#define LOG_SNS_DPN_ENTER()
#define LOG_SNS_DPN_LEAVE(state)
#define LOG_SNS_KER_ENTER()
#define LOG_SNS_KER_LEAVE(state)

関数

ER rot_rdq (PRI tskpri)
ER irot_rdq (PRI tskpri)
ER get_tid (ID *p_tskid)
ER iget_tid (ID *p_tskid)
ER loc_cpu (void)
ER iloc_cpu (void)
ER unl_cpu (void)
ER iunl_cpu (void)
ER dis_dsp (void)
ER ena_dsp (void)
bool_t sns_ctx (void)
bool_t sns_loc (void)
bool_t sns_dsp (void)
bool_t sns_dpn (void)
bool_t sns_ker (void)


マクロ定義

 
#define LOG_DIS_DSP_ENTER (  ) 

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

参照元 dis_dsp().

#define LOG_DIS_DSP_LEAVE ( ercd   ) 

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

参照元 dis_dsp().

 
#define LOG_ENA_DSP_ENTER (  ) 

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

参照元 ena_dsp().

#define LOG_ENA_DSP_LEAVE ( ercd   ) 

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

参照元 ena_dsp().

#define LOG_GET_TID_ENTER ( p_tskid   ) 

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

参照元 get_tid().

#define LOG_GET_TID_LEAVE ( ercd,
tskid   ) 

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

参照元 get_tid().

#define LOG_IGET_TID_ENTER ( p_tskid   ) 

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

参照元 iget_tid().

#define LOG_IGET_TID_LEAVE ( ercd,
tskid   ) 

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

参照元 iget_tid().

 
#define LOG_ILOC_CPU_ENTER (  ) 

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

参照元 iloc_cpu().

#define LOG_ILOC_CPU_LEAVE ( ercd   ) 

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

参照元 iloc_cpu().

#define LOG_IROT_RDQ_ENTER ( tskpri   ) 

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

参照元 irot_rdq().

#define LOG_IROT_RDQ_LEAVE ( ercd   ) 

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

参照元 irot_rdq().

 
#define LOG_IUNL_CPU_ENTER (  ) 

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

参照元 iunl_cpu().

#define LOG_IUNL_CPU_LEAVE ( ercd   ) 

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

参照元 iunl_cpu().

 
#define LOG_LOC_CPU_ENTER (  ) 

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

参照元 loc_cpu().

#define LOG_LOC_CPU_LEAVE ( ercd   ) 

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

参照元 loc_cpu().

#define LOG_ROT_RDQ_ENTER ( tskpri   ) 

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

参照元 rot_rdq().

#define LOG_ROT_RDQ_LEAVE ( ercd   ) 

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

参照元 rot_rdq().

 
#define LOG_SNS_CTX_ENTER (  ) 

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

参照元 sns_ctx().

#define LOG_SNS_CTX_LEAVE ( state   ) 

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

参照元 sns_ctx().

 
#define LOG_SNS_DPN_ENTER (  ) 

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

参照元 sns_dpn().

#define LOG_SNS_DPN_LEAVE ( state   ) 

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

参照元 sns_dpn().

 
#define LOG_SNS_DSP_ENTER (  ) 

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

参照元 sns_dsp().

#define LOG_SNS_DSP_LEAVE ( state   ) 

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

参照元 sns_dsp().

 
#define LOG_SNS_KER_ENTER (  ) 

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

参照元 sns_ker().

#define LOG_SNS_KER_LEAVE ( state   ) 

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

参照元 sns_ker().

 
#define LOG_SNS_LOC_ENTER (  ) 

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

参照元 sns_loc().

#define LOG_SNS_LOC_LEAVE ( state   ) 

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

参照元 sns_loc().

 
#define LOG_UNL_CPU_ENTER (  ) 

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

参照元 unl_cpu().

#define LOG_UNL_CPU_LEAVE ( ercd   ) 

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

参照元 unl_cpu().


関数

ER dis_dsp ( void   ) 

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

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 get_tid ( ID p_tskid  ) 

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 iget_tid ( ID p_tskid  ) 

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   ) 

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 irot_rdq ( PRI  tskpri  ) 

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

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

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 rot_rdq ( PRI  tskpri  ) 

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 }

bool_t sns_ctx ( void   ) 

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   ) 

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   ) 

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   ) 

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   ) 

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 }

ER unl_cpu ( void   ) 

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 }


Copyright © 2008 by Kijineko Inc.

ホームページ制作