3 * Toyohashi Open Platform for Embedded Real-Time Systems/
4 * Just Standard Profile Kernel
6 * Copyright (C) 2000-2003 by Embedded and Real-Time Systems Laboratory
7 * Toyohashi Univ. of Technology, JAPAN
9 * 上記著作権者は,以下の (1)〜(4) の条件か,Free Software Foundation
10 * によって公表されている GNU General Public License の Version 2 に記
11 * 述されている条件を満たす場合に限り,本ソフトウェア(本ソフトウェア
12 * を改変したものを含む.以下同じ)を使用・複製・改変・再配布(以下,
14 * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
15 * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー
17 * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
18 * 用できる形で再配布する場合には,再配布に伴うドキュメント(利用
19 * 者マニュアルなど)に,上記の著作権表示,この利用条件および下記
21 * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
22 * 用できない形で再配布する場合には,次のいずれかの条件を満たすこ
24 * (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
25 * 作権表示,この利用条件および下記の無保証規定を掲載すること.
26 * (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
28 * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
29 * 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
31 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お
32 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も
33 * 含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直
34 * 接的または間接的に生じたいかなる損害に関しても,その責任を負わない.
36 * @(#) $Id: sys_manage.c,v 1.1 2009/01/31 05:27:37 suikan Exp $
43 #include "jsp_kernel.h"
58 LOG_ROT_RDQ_ENTER(tskpri);
60 CHECK_TPRI_SELF(tskpri);
63 pri = (tskpri == TPRI_SELF) ? runtsk->priority : INT_PRIORITY(tskpri);
64 if (rotate_ready_queue(pri)) {
71 LOG_ROT_RDQ_LEAVE(ercd);
75 #endif /* __rot_rdq */
78 * タスクの優先順位の回転(非タスクコンテキスト用)
87 LOG_IROT_RDQ_ENTER(tskpri);
92 if (rotate_ready_queue(INT_PRIORITY(tskpri))) {
99 LOG_IROT_RDQ_LEAVE(ercd);
103 #endif /* __irot_rdq */
115 LOG_GET_TID_ENTER(p_tskid);
119 *p_tskid = TSKID(runtsk);
124 LOG_GET_TID_LEAVE(ercd, *p_tskid);
128 #endif /* __get_tid */
131 * 実行状態のタスクIDの参照(非タスクコンテキスト用)
136 iget_tid(ID *p_tskid)
140 LOG_IGET_TID_ENTER(p_tskid);
144 *p_tskid = (runtsk == NULL) ? TSK_NONE : TSKID(runtsk);
149 LOG_IGET_TID_LEAVE(ercd, *p_tskid);
153 #endif /* __iget_tid */
168 if (!(t_sense_lock())) {
174 LOG_LOC_CPU_LEAVE(ercd);
178 #endif /* __loc_cpu */
181 * CPUロック状態への移行(非タスクコンテキスト用)
190 LOG_ILOC_CPU_ENTER();
193 if (!(i_sense_lock())) {
199 LOG_ILOC_CPU_LEAVE(ercd);
203 #endif /* __iloc_cpu */
208 * CPUロック中は,ディスパッチが必要となるサービスコールを呼び出すこ
209 * とはできないため,CPUロック状態の解除時にディスパッチャを起動する
222 if (t_sense_lock()) {
228 LOG_UNL_CPU_LEAVE(ercd);
232 #endif /* __unl_cpu */
235 * CPUロック状態の解除(非タスクコンテキスト用)
237 * CPUロック中は,ディスパッチが必要となるサービスコールを呼び出すこ
238 * とはできないため,CPUロック状態の解除時にディスパッチャの起動を要
248 LOG_IUNL_CPU_ENTER();
251 if (i_sense_lock()) {
257 LOG_IUNL_CPU_LEAVE(ercd);
261 #endif /* __iunl_cpu */
282 LOG_DIS_DSP_LEAVE(ercd);
286 #endif /* __dis_dsp */
303 if (runtsk != schedtsk) {
310 LOG_ENA_DSP_LEAVE(ercd);
314 #endif /* __ena_dsp */
327 state = sense_context() ? TRUE : FALSE;
328 LOG_SNS_CTX_LEAVE(state);
332 #endif /* __sns_ctx */
345 state = sense_lock() ? TRUE : FALSE;
346 LOG_SNS_LOC_LEAVE(state);
350 #endif /* __sns_loc */
363 state = !(enadsp) ? TRUE : FALSE;
364 LOG_SNS_DSP_LEAVE(state);
368 #endif /* __sns_dsp */
381 state = (sense_context() || sense_lock() || !(enadsp)) ? TRUE : FALSE;
382 LOG_SNS_DPN_LEAVE(state);
386 #endif /* __sns_dpn */
398 LOG_VSNS_INI_ENTER();
399 state = !(iniflg) ? TRUE : FALSE;
400 LOG_VSNS_INI_LEAVE(state);
404 #endif /* __vsns_ini */