OSDN Git Service

67b1917cd2155cc4e7944c7c6af991315ec0115c
[hos/hos-v4a.git] / kernel / source / object / tsk / get_pri.c
1 /** 
2  *  Hyper Operating System V4 Advance
3  *
4  * @file  chg_pri.c
5  * @brief %jp{タスク優先度の変更}
6  *
7  * Copyright (C) 1998-2006 by Project HOS
8  * http://sourceforge.jp/projects/hos/
9  */
10
11
12
13 #include "core/core.h"
14
15
16
17 /** %jp{タスク優先度の参照} */
18 ER get_pri(ID tskid, PRI *p_tskpri)
19 {
20         _KERNEL_T_TSKHDL   tskhdl;
21         _KERNEL_T_TCB_PTR  tcb;
22
23         if ( tskid == TSK_SELF )                /* %jp{自タスク指定時の変換} */
24         {
25
26 #if _KERNEL_SPT_REF_TSK_E_ID
27                 if ( _KERNEL_SYS_SNS_CTX() )
28                 {
29                         return E_ID;            /* %jp{不正ID番号} */
30                 }
31 #endif  
32                 /* %jp{実行中タスクを取得} */
33                 tskhdl = _KERNEL_SYS_GET_RUNTSK();
34
35                 _KERNEL_ENTER_SVC();            /* %jp{enter service-call}%jp{サービスコールに入る} */
36
37                 /* %jp{TCBを取得} */
38                 tcb = _KERNEL_TSK_TSKHDL2TCB(tskhdl);
39         }
40         else
41         {
42 #if _KERNEL_SPT_REF_TSK_E_ID
43                 if ( !_KERNEL_TSK_CHECK_TSKID(tskid) )
44                 {
45                         return E_ID;    /* %jp{不正ID番号} */
46                 }
47 #endif
48                 
49                 _KERNEL_ENTER_SVC();                    /* %jp{enter service-call}%jp{サービスコールに入る} */
50                 
51                 /* %jp{オブジェクト存在チェック} */
52 #ifdef _KERNEL_SPT_REF_TSK_E_NOEXS
53                 if ( _KERNEL_TSK_CHECK_EXS(tskid) )
54                 {
55                         _KERNEL_LEAVE_SVC();            /* %jp{leave service-call}%jp{サービスコールを出る} */
56                         return E_NOEXS;                         /* %jp{オブジェクト未生成} */
57                 }
58 #endif
59                 /* ID番号指定時の変換 */
60                 tcb    = _KERNEL_TSK_ID2TCB(tskid);
61                 tskhdl = _KERNEL_TSK_GET_TSKHDL(tskid, tcb);
62         }
63         
64         /* %jp{優先度取得} */
65         *p_tskpri = _KERNEL_TSK_GET_TSKBPRI(tcb);
66
67         _KERNEL_LEAVE_SVC();    /* %jp{サービスコール終了} */
68
69         return E_OK;
70 }
71
72
73 /* end of file */