システム状態管理機能


関数

SYSCALL ER rot_rdq (PRI tskpri)
 タスクの優先順位の回転
SYSCALL ER irot_rdq (PRI tskpri)
 タスクの優先順位の回転 (非タスクコンテキスト用)
SYSCALL ER get_tid (ID *p_tskid)
 実行状態のタスクIDの参照
SYSCALL ER iget_tid (ID *p_tskid)
 実行状態のタスクIDの参照 (非タスクコンテキスト用)
SYSCALL ER loc_cpu (void)
 CPUロック状態への移行
SYSCALL ER iloc_cpu (void)
 CPUロック状態への移行 (非タスクコンテキスト用)
SYSCALL ER unl_cpu (void)
 CPUロック状態の解除
SYSCALL ER iunl_cpu (void)
 CPUロック状態の解除 (非タスクコンテキスト用)
SYSCALL ER dis_dsp (void)
 ディスパッチの禁止
SYSCALL ER ena_dsp (void)
 ディスパッチの許可
SYSCALL BOOL sns_ctx (void)
 コンテキストの参照
SYSCALL BOOL sns_loc (void)
 CPUロック状態の参照
SYSCALL BOOL sns_dsp (void)
 ディスパッチ禁止状態の参照
SYSCALL BOOL sns_dpn (void)
 ディスパッチ保留状態状態の参照
SYSCALL BOOL vsns_ini (void)
 カーネル動作状態の参照

関数

ER dis_dsp ( void   ) 

ディスパッチの禁止

戻り値:
E_OK 成功
E_CTX コンテキストエラー (非タスクコンテキストまたはCPUロック状態)

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

参照先 CHECK_TSKCTX_UNLE_OKenadspFALSELOG_DIS_DSP_ENTERLOG_DIS_DSP_LEAVEt_lock_cpu()t_unlock_cpu().

00270 {
00271         ER      ercd;
00272 
00273         LOG_DIS_DSP_ENTER();
00274         CHECK_TSKCTX_UNL();
00275 
00276         t_lock_cpu();
00277         enadsp = FALSE;
00278         ercd = E_OK;
00279         t_unlock_cpu();
00280 
00281     exit:
00282         LOG_DIS_DSP_LEAVE(ercd);
00283         return(ercd);
00284 }

関数の呼び出しグラフ:

ER ena_dsp ( void   ) 

ディスパッチの許可

戻り値:
E_OK 成功
E_CTX コンテキストエラー (非タスクコンテキストまたはCPUロック状態)

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

参照先 CHECK_TSKCTX_UNLdispatchE_OKenadspLOG_ENA_DSP_ENTERLOG_ENA_DSP_LEAVEruntskschedtskt_lock_cpu()t_unlock_cpu()TRUE.

00295 {
00296         ER      ercd;
00297 
00298         LOG_ENA_DSP_ENTER();
00299         CHECK_TSKCTX_UNL();
00300 
00301         t_lock_cpu();
00302         enadsp = TRUE;
00303         if (runtsk != schedtsk) {
00304                 dispatch();
00305         }
00306         ercd = E_OK;
00307         t_unlock_cpu();
00308 
00309     exit:
00310         LOG_ENA_DSP_LEAVE(ercd);
00311         return(ercd);
00312 }

関数の呼び出しグラフ:

ER get_tid ( ID p_tskid  ) 

実行状態のタスクIDの参照

引数:
[out] p_tskid 実行状態のタスクID番号の格納先へのポインタ
戻り値:
E_OK 成功
E_CTX コンテキストエラー (非タスクコンテキストまたはCPUロック状態)

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

参照先 CHECK_TSKCTX_UNLE_OKLOG_GET_TID_ENTERLOG_GET_TID_LEAVEruntskt_lock_cpu()t_unlock_cpu()TSKID.

00112 {
00113         ER      ercd;
00114 
00115         LOG_GET_TID_ENTER(p_tskid);
00116         CHECK_TSKCTX_UNL();
00117 
00118         t_lock_cpu();
00119         *p_tskid = TSKID(runtsk);
00120         ercd = E_OK;
00121         t_unlock_cpu();
00122 
00123     exit:
00124         LOG_GET_TID_LEAVE(ercd, *p_tskid);
00125         return(ercd);
00126 }

関数の呼び出しグラフ:

ER iget_tid ( ID p_tskid  ) 

実行状態のタスクIDの参照 (非タスクコンテキスト用)

引数:
[out] p_tskid 実行状態のタスクID番号の格納先へのポインタ
戻り値:
E_OK 成功
E_CTX コンテキストエラー (タスクコンテキストまたはCPUロック状態)

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

参照先 CHECK_INTCTX_UNLE_OKi_lock_cpu()i_unlock_cpu()LOG_IGET_TID_ENTERLOG_IGET_TID_LEAVENULLruntskTSK_NONETSKID.

00137 {
00138         ER      ercd;
00139 
00140         LOG_IGET_TID_ENTER(p_tskid);
00141         CHECK_INTCTX_UNL();
00142 
00143         i_lock_cpu();
00144         *p_tskid = (runtsk == NULL) ? TSK_NONE : TSKID(runtsk);
00145         ercd = E_OK;
00146         i_unlock_cpu();
00147 
00148     exit:
00149         LOG_IGET_TID_LEAVE(ercd, *p_tskid);
00150         return(ercd);
00151 }

関数の呼び出しグラフ:

ER iloc_cpu ( void   ) 

CPUロック状態への移行 (非タスクコンテキスト用)

戻り値:
E_OK 成功
E_CTX コンテキストエラー (タスクコンテキスト)

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

参照先 CHECK_INTCTXE_OKi_lock_cpu()i_sense_lockLOG_ILOC_CPU_ENTERLOG_ILOC_CPU_LEAVE.

00187 {
00188         ER      ercd;
00189 
00190         LOG_ILOC_CPU_ENTER();
00191         CHECK_INTCTX();
00192 
00193         if (!(i_sense_lock())) {
00194                 i_lock_cpu();
00195         }
00196         ercd = E_OK;
00197 
00198     exit:
00199         LOG_ILOC_CPU_LEAVE(ercd);
00200         return(ercd);
00201 }

関数の呼び出しグラフ:

ER irot_rdq ( PRI  tskpri  ) 

タスクの優先順位の回転 (非タスクコンテキスト用)

引数:
[in] tskpri 優先順位を回転する対象の優先度
戻り値:
E_OK 成功
E_PAR パラメータエラー (tskpriが不正)
E_CTX コンテキストエラー (タスクコンテキストまたはCPUロック状態)

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

参照先 CHECK_INTCTX_UNLCHECK_TPRIE_OKi_lock_cpu()i_unlock_cpu()INT_PRIORITYLOG_IROT_RDQ_ENTERLOG_IROT_RDQ_LEAVEreqflgrotate_ready_queue()TRUE.

00084 {
00085         ER      ercd;
00086 
00087         LOG_IROT_RDQ_ENTER(tskpri);
00088         CHECK_INTCTX_UNL();
00089         CHECK_TPRI(tskpri);
00090 
00091         i_lock_cpu();
00092         if (rotate_ready_queue(INT_PRIORITY(tskpri))) {
00093                 reqflg = TRUE;
00094         }
00095         ercd = E_OK;
00096         i_unlock_cpu();
00097 
00098     exit:
00099         LOG_IROT_RDQ_LEAVE(ercd);
00100         return(ercd);
00101 }

関数の呼び出しグラフ:

ER iunl_cpu ( void   ) 

CPUロック状態の解除 (非タスクコンテキスト用)

戻り値:
E_OK 成功
E_CTX コンテキストエラー (タスクコンテキスト)

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

参照先 CHECK_INTCTXE_OKi_sense_locki_unlock_cpu()LOG_IUNL_CPU_ENTERLOG_IUNL_CPU_LEAVE.

00245 {
00246         ER      ercd;
00247 
00248         LOG_IUNL_CPU_ENTER();
00249         CHECK_INTCTX();
00250 
00251         if (i_sense_lock()) {
00252                 i_unlock_cpu();
00253         }
00254         ercd = E_OK;
00255 
00256     exit:
00257         LOG_IUNL_CPU_LEAVE(ercd);
00258         return(ercd);
00259 }

関数の呼び出しグラフ:

ER loc_cpu ( void   ) 

CPUロック状態への移行

戻り値:
E_OK 成功
E_CTX コンテキストエラー (非タスクコンテキスト)

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

参照先 CHECK_TSKCTXE_OKLOG_LOC_CPU_ENTERLOG_LOC_CPU_LEAVEt_lock_cpu()t_sense_lock.

参照元 serial_cls_por()serial_opn_por()serial_rea_chr()serial_wri_chr().

00162 {
00163         ER      ercd;
00164 
00165         LOG_LOC_CPU_ENTER();
00166         CHECK_TSKCTX();
00167 
00168         if (!(t_sense_lock())) {
00169                 t_lock_cpu();
00170         }
00171         ercd = E_OK;
00172 
00173     exit:
00174         LOG_LOC_CPU_LEAVE(ercd);
00175         return(ercd);
00176 }

関数の呼び出しグラフ:

ER rot_rdq ( PRI  tskpri  ) 

タスクの優先順位の回転

引数:
[in] tskpri 優先順位を回転する対象の優先度
戻り値:
E_OK 成功
E_PAR パラメータエラー (tskpriが不正)
E_CTX コンテキストエラー (非タスクコンテキストまたはCPUロック状態)

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

参照先 CHECK_TPRI_SELFCHECK_TSKCTX_UNLdispatchE_OKINT_PRIORITYLOG_ROT_RDQ_ENTERLOG_ROT_RDQ_LEAVEtask_control_block::priorityrotate_ready_queue()runtskt_lock_cpu()t_unlock_cpu()TPRI_SELF.

00054 {
00055         UINT    pri;
00056         ER      ercd;
00057 
00058         LOG_ROT_RDQ_ENTER(tskpri);
00059         CHECK_TSKCTX_UNL();
00060         CHECK_TPRI_SELF(tskpri);
00061 
00062         t_lock_cpu();
00063         pri = (tskpri == TPRI_SELF) ? runtsk->priority : INT_PRIORITY(tskpri);
00064         if (rotate_ready_queue(pri)) {
00065                 dispatch();
00066         }
00067         ercd = E_OK;
00068         t_unlock_cpu();
00069 
00070     exit:
00071         LOG_ROT_RDQ_LEAVE(ercd);
00072         return(ercd);
00073 }

関数の呼び出しグラフ:

BOOL sns_ctx ( void   ) 

コンテキストの参照

戻り値:
TRUE 非タスクコンテキスト
FALSE タスクコンテキスト

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

参照先 FALSELOG_SNS_CTX_ENTERLOG_SNS_CTX_LEAVEsense_context()TRUE.

参照元 serial_cls_por()serial_ctl_por()serial_opn_por()serial_ref_por().

00323 {
00324         BOOL    state;
00325 
00326         LOG_SNS_CTX_ENTER();
00327         state = sense_context() ? TRUE : FALSE;
00328         LOG_SNS_CTX_LEAVE(state);
00329         return(state);
00330 }

関数の呼び出しグラフ:

BOOL sns_dpn ( void   ) 

ディスパッチ保留状態状態の参照

戻り値:
TRUE ディスパッチ保留状態
FALSE ディスパッチ非保留状態

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

参照先 enadspFALSELOG_SNS_DPN_ENTERLOG_SNS_DPN_LEAVEsense_context()sense_lock()TRUE.

参照元 serial_rea_dat()serial_wri_dat().

00377 {
00378         BOOL    state;
00379 
00380         LOG_SNS_DPN_ENTER();
00381         state = (sense_context() || sense_lock() || !(enadsp)) ? TRUE : FALSE;
00382         LOG_SNS_DPN_LEAVE(state);
00383         return(state);
00384 }

関数の呼び出しグラフ:

BOOL sns_dsp ( void   ) 

ディスパッチ禁止状態の参照

戻り値:
TRUE ディスパッチ禁止状態
FALSE ディスパッチ許可状態

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

参照先 enadspFALSELOG_SNS_DSP_ENTERLOG_SNS_DSP_LEAVETRUE.

00359 {
00360         BOOL    state;
00361 
00362         LOG_SNS_DSP_ENTER();
00363         state = !(enadsp) ? TRUE : FALSE;
00364         LOG_SNS_DSP_LEAVE(state);
00365         return(state);
00366 }

BOOL sns_loc ( void   ) 

CPUロック状態の参照

戻り値:
TRUE CPUロック状態
FALSE CPUロック解除状態

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

参照先 FALSELOG_SNS_LOC_ENTERLOG_SNS_LOC_LEAVEsense_lock()TRUE.

00341 {
00342         BOOL    state;
00343 
00344         LOG_SNS_LOC_ENTER();
00345         state = sense_lock() ? TRUE : FALSE;
00346         LOG_SNS_LOC_LEAVE(state);
00347         return(state);
00348 }

関数の呼び出しグラフ:

ER unl_cpu ( void   ) 

CPUロック状態の解除

戻り値:
E_OK 成功
E_CTX コンテキストエラー (非タスクコンテキスト)

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

参照先 CHECK_TSKCTXE_OKLOG_UNL_CPU_ENTERLOG_UNL_CPU_LEAVEt_sense_lockt_unlock_cpu().

参照元 serial_cls_por()serial_opn_por()serial_rea_chr()serial_wri_chr().

00216 {
00217         ER      ercd;
00218 
00219         LOG_UNL_CPU_ENTER();
00220         CHECK_TSKCTX();
00221 
00222         if (t_sense_lock()) {
00223                 t_unlock_cpu();
00224         }
00225         ercd = E_OK;
00226 
00227     exit:
00228         LOG_UNL_CPU_LEAVE(ercd);
00229         return(ercd);
00230 }

関数の呼び出しグラフ:

BOOL vsns_ini ( void   ) 

カーネル動作状態の参照

戻り値:
TRUE カーネル非動作状態
FALSE カーネル動作状態
カーネル上で動作するタスクから呼び出される関数が, カーネルの初期化完了前や終了処理開始後にも呼び出される可能性がある場合には, その中でカーネルのサービスコールを呼び出せるかを判別することが必要となる. JSPカーネルでは,この判別を可能にするために,このサービスコールを追加している.

カーネルの初期化完了前や終了処理開始後というのは,以下のような状況を想定している.

  • ATT_INI で登録した初期化ルーチン
  • VATT_TER で登録した終了処理ルーチン
  • C++ における非局所的オブジェクトのコンストラクタ
  • C++ における静的記憶域期間を持つオブジェクトのデストラクタ

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

参照先 FALSEiniflgLOG_VSNS_INI_ENTERLOG_VSNS_INI_LEAVETRUE.

00395 {
00396         BOOL    state;
00397 
00398         LOG_VSNS_INI_ENTER();
00399         state = !(iniflg) ? TRUE : FALSE;
00400         LOG_VSNS_INI_LEAVE(state);
00401         return(state);
00402 }


Copyright © 2006 by TAKAGI Nobuhisa.
Copyright © 2006 by Kijineko Inc..
このページは Mon Dec 18 17:23:45 2006 に Doxygen によって生成されました。
データ入力からプログラム開発まで!様々なスキルを持ったメンバーが登録しています【@SOHO】