Changeset 107 for uKadecot/trunk/ssp/kernel/task.h
- Timestamp:
- Jun 10, 2015, 8:40:31 PM (9 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uKadecot/trunk/ssp/kernel/task.h
-
Property svn:mime-type
changed from
text/plain
totext/plain; charset=SHIFT_JIS
r101 r107 11 11 * Copyright (C) 2011 by Meika Sugimoto 12 12 * 13 * ãLì ÒÍCÈºÌ (1)`(4) Ìðð½·êÉÀèC{\tgEF 14 * Ai{\tgEFAðüϵ½àÌðÜÞDȺ¯¶jðgpE¡»EüÏE 15 * ÄzziȺCpÆÄÔj·é±Æð³Åø·éD 16 * (1) {\tgEFAð\[XR[hÌ`Åp·éêÉÍCãLÌì 17 * \¦C±Ìpð¨æѺL̳ÛØKèªC»ÌÜÜÌ`Å\[X 18 * R[hÉÜÜêÄ¢é±ÆD 19 * (2) {\tgEFAðCCu`®ÈÇC¼Ì\tgEFAJÉgp 20 * Å«é`ÅÄzz·éêÉÍCÄzzɺ¤hL 21 gipÒ} 22 * j 23 AÈÇjÉCãLÌì \¦C±Ìpð¨æѺLÌ³Û 24 * ØKèðfÚ·é±ÆD 25 * (3) {\tgEFAðC@íÉgÝÞÈÇC¼Ì\tgEFAJÉgp 26 * Å«È¢`ÅÄzz·éêÉÍCÌ¢¸ê©Ìðð½·±ÆD 27 * (a) Äzzɺ¤hL 28 gipÒ}j 29 AÈÇjÉCãLÌì 30 * \¦C±Ìpð¨æѺL̳ÛØKèðfÚ·é±ÆD 31 * (b) ÄzzÌ`ÔðCÊÉèßéû@ÉæÁÄCTOPPERSvWFNgÉñ 32 * ·é±ÆD 33 * (4) {\tgEFAÌpÉæè¼ÚIܽÍÔÚIɶ¶é¢©Èé¹Q 34 * ©çàCãLì Ò¨æÑTOPPERSvWFNgðÆÓ·é±ÆDܽC 35 * {\tgEFAÌ[UܽÍGh[U©çÌ¢©ÈéRÉîà 36 * ¿©çàCãLì Ò¨æÑTOPPERSvWFNgðÆÓ·é±ÆD 13 * 上記著作権者は,以下の (1)〜(4) の条件を満たす場合に限り,本ソフトウェ 14 * ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改変・ 15 * 再配布(以下,利用と呼ぶ)することを無償で許諾する. 16 * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作権 17 * 表示,この利用条件および下記の無保証規定が,そのままの形でソース 18 * コード中に含まれていること. 19 * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使用 20 * できる形で再配布する場合には,再配布に伴うドキュメント(利用者マ 21 * ニュアルなど)に,上記の著作権表示,この利用条件および下記の無保 22 * 証規定を掲載すること. 23 * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使用 24 * できない形で再配布する場合には,次のいずれかの条件を満たすこと. 25 * (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著作 26 * 権表示,この利用条件および下記の無保証規定を掲載すること. 27 * (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに報 28 * 告すること. 29 * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損害 30 * からも,上記著作権者およびTOPPERSプロジェクトを免責すること.また, 31 * 本ソフトウェアのユーザまたはエンドユーザからのいかなる理由に基づ 32 * く請求からも,上記著作権者およびTOPPERSプロジェクトを免責すること. 37 33 * 38 * {\tgEFAÍC³ÛØÅñ³êÄ¢éàÌÅ éDãLì Ò¨æ39 * ÑTOPPERSvWFNgÍC{\tgEFAÉÖµÄCÁèÌgpÚIÉη40 * éK«àÜßÄC¢©ÈéÛØàsíÈ¢DܽC{\tgEFAÌp41 * Éæè¼ÚIܽÍÔÚIɶ¶½¢©Èé¹QÉÖµÄàC»ÌÓCð42 * íÈ¢D34 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者およ 35 * びTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的に対す 36 * る適合性も含めて,いかなる保証も行わない.また,本ソフトウェアの利用 37 * により直接的または間接的に生じたいかなる損害に関しても,その責任を負 38 * わない. 43 39 * 44 40 */ … … 51 47 52 48 /* 53 * ^XNDæxÌà\»EO\»Ï·}N49 * タスク優先度の内部表現・外部表現変換マクロ 54 50 */ 55 51 #define INT_PRIORITY(x) ((uint_t)((x) - TMIN_TPRI)) 56 52 57 53 /* 58 * ^XNIDÌÅålikernel_cfg.cj54 * タスクIDの最大値(kernel_cfg.c) 59 55 */ 60 56 extern const ID tmax_tskid; 61 57 62 58 /* 63 * ^XNÌ59 * タスクの数 64 60 */ 65 61 #define tnum_tsk ((uint_t)(tmax_tskid - TMIN_TSKID + 1)) 66 62 67 63 /* 68 * ÀsÂ\óÔÌ^XNªÈ¢ÉÀs^XNÌ»ÝDæxÉÝè·él64 * 実行可能状態のタスクがない時に実行中タスクの現在優先度に設定する値 69 65 */ 70 66 #define TSKPRI_NULL (UINT_MAX) … … 72 68 73 69 /* 74 * fBL 75 [T[`̽ßÌrbg}bv 70 * レディキューサーチのためのビットマップ 76 71 */ 77 72 extern volatile uint_t ready_primap; 78 73 79 74 /* 80 * N®vL 81 [COÌrbg}bv 75 * 起動要求キューイングのビットマップ 82 76 */ 83 77 extern uint_t actque_bitmap; 84 78 85 79 /* 86 * fBXpb`^^XNáO[`N®vtO87 * 88 * Ýnh^CPUáOnhÌoûÉCfBXpb`ܽÍ89 * ^XNáO[`ÌN®ðv·é±Æð¦·tOD80 * ディスパッチ/タスク例外処理ルーチン起動要求フラグ 81 * 82 * 割込みハンドラ/CPU例外ハンドラの出口処理に,ディスパッチまたは 83 * タスク例外処理ルーチンの起動を要求することを示すフラグ. 90 84 */ 91 85 extern bool_t reqflg; 92 86 93 87 /* 94 * fBXpb`Ö~óÔ95 * 96 * fBXpb`Ö~óÔÅ é±Æð¦·tOD88 * ディスパッチ禁止状態 89 * 90 * ディスパッチ禁止状態であることを示すフラグ. 97 91 */ 98 92 extern bool_t disdsp; 99 93 100 94 /* 101 * ÀsóÔ^XNÌ»ÝDæx102 * 103 * ÀsÌ^XNÉÀsDæxªÝè³êÄ¢êÎÀsDæxªC104 * Ýè³êĢȯêÎN®DæxªÝè³êéD95 * 実行状態タスクの現在優先度 96 * 97 * 実行中のタスクに実行時優先度が設定されていれば実行時優先度が, 98 * 設定されていなければ起動時優先度が設定される. 105 99 */ 106 100 extern uint_t runtsk_curpri; 107 101 108 102 /* 109 * ÀsóÔ^XNÌN®Dæx103 * 実行状態タスクの起動時優先度 110 104 */ 111 105 extern uint_t runtsk_ipri; 112 106 113 107 /* 114 * ^XNÇW 115 [Ìú» 116 * 117 * SÄÌ^XNðú»·éDe^XNÍ^XN®«ÉTA_ACTªÝè³êÄ¢êÎ 118 * ÀsÂ\óÔC»¤ÅÈ¢êÍx~óÔÆÈéD 108 * タスク管理モジュールの初期化 109 * 110 * 全てのタスクを初期化する.各タスクはタスク属性にTA_ACTが設定されていれば 111 * 実行可能状態,そうでない場合は休止状態となる. 119 112 * 120 * ܽAfBXpb`ÂtOðfBXpb`ÂóÔÉÝè·éD113 * また、ディスパッチ許可フラグをディスパッチ許可状態に設定する. 121 114 * 122 * {ÖÍRtBM 123 [^ª¶¬·éobject_initializeÈOÅÄñÅÍÈçÈ¢D 115 * 本関数はコンフィギュレータが生成するobject_initialize以外で呼んではならない. 124 116 */ 125 117 extern void initialize_task(void); 126 118 127 119 /* 128 * ^XNÌN®129 * 130 * ipri Åwèµ½N®DæxðÂ^XNðÀsÂ\óÔÉJÚ³¹éD131 * {ÖðÀs·é±ÆÉæèvGvgª¶·éêÍtrueðC132 * »¤ÅÈ¢êÍfalseðÔ·D133 * 134 * {ÖÍCPUbNóÔCSÝbNðóÔCÝDæx}XNSðóÔÅ135 * ÄÑo·±ÆD120 * タスクの起動 121 * 122 * ipriで指定した起動時優先度を持つタスクを実行可能状態に遷移させる. 123 * 本関数を実行することによりプリエンプトが発生する場合はtrueを, 124 * そうでない場合はfalseを返す. 125 * 126 * 本関数はCPUロック状態,全割込みロック解除状態,割込み優先度マスク全解除状態で 127 * 呼び出すこと. 136 128 */ 137 129 extern bool_t make_active(uint_t ipri); 138 130 139 131 /* 140 * wèµ½N®DæxÌ^XNªx~óԩǤ©ÌeXg141 * 142 * ipri Åwèµ½N®DæxðÂ^XNªx~óÔÅ êÎ143 * true ð»êÈOiÀsÂ\óÔCÀsÂ\óÔjÅ êÎfalseðÔ·D144 * 145 * {ÖÍCPUbNóÔCSÝbNðóÔCÝDæx}XNSðóÔÅ146 * ÄÑo·±ÆD132 * 指定した起動時優先度のタスクが休止状態かどうかのテスト 133 * 134 * ipriで指定した起動時優先度を持つタスクが休止状態であれば 135 * trueをそれ以外(実行可能状態,実行可能状態)であればfalseを返す. 136 * 137 * 本関数はCPUロック状態,全割込みロック解除状態,割込み優先度マスク全解除状態で 138 * 呼び出すこと. 147 139 */ 148 140 extern bool_t test_dormant(uint_t ipri); 149 141 150 142 /* 151 * ÅDæÊ^XNÌT[`152 * 153 * ÀsÂ\óÔÌ^XNÌ©çÅàDæʪ¢^XNÌúDæxð154 * Ô·D155 * 156 * {ÖÍCPUbNóÔCSÝbNðóÔCÝDæx}XNSðóÔÅ157 * ÄÑo·±ÆD143 * 最高優先順位タスクのサーチ 144 * 145 * 実行可能状態のタスクの中から最も優先順位が高いタスクの初期優先度を 146 * 返す. 147 * 148 * 本関数はCPUロック状態,全割込みロック解除状態,割込み優先度マスク全解除状態で 149 * 呼び出すこと. 158 150 */ 159 151 extern uint_t search_schedtsk(void); 160 152 161 153 /* 162 * ^XNÌÀs163 * 164 * ipri Åwèµ½N®DæxðÂ^XNðÀs·éD165 * {Ö©çÀsµ½^XN©çT[rXR[ðoRµÄ166 * ÄAIÉÄÎêé±Æà éD167 * 168 * {ÖÍCPUbNóÔCSÝbNðóÔCÝDæx}XNSðóÔÅ169 * ÄÑo·±ÆD154 * タスクの実行 155 * 156 * ipriで指定した起動時優先度を持つタスクを実行する. 157 * 本関数から実行したタスクからサービスコールを経由して 158 * 再帰的に呼ばれることもある. 159 * 160 * 本関数はCPUロック状態,全割込みロック解除状態,割込み優先度マスク全解除状態で 161 * 呼び出すこと. 170 162 */ 171 163 extern void run_task(uint_t ipri); 172 164 173 165 /* 174 * ^XNfBXpb`175 * 176 * J[lú»®¹ãÉÄÑo³êCÅDæÊÆÈÁ½^XNðÀs·éD177 * 178 * {ÖÍCPUbNóÔCSÝbNðóÔCÝDæx}XNSðóÔÅ179 * ÄÑo·±ÆD180 * ȨC{Ö©çÍ^[µÈ¢D166 * タスクディスパッチャ 167 * 168 * カーネル初期化完了後に呼び出され,最高優先順位となったタスクを実行する. 169 * 170 * 本関数はCPUロック状態,全割込みロック解除状態,割込み優先度マスク全解除状態で 171 * 呼び出すこと. 172 * なお,本関数からはリターンしない. 181 173 * 182 174 */ … … 184 176 185 177 /* 186 * ^XNÌN®Dæxæ¾(^XNReLXgp)187 * 188 * tskid Åwèµ½^XNÌN®Dæxðæ¾·éD189 * tskid ÍTMIN_TSKIDÈãCtmax_tskidȺÌlCàµÍTSK_SELFÅ190 * wèµÈ¯êÎÈçÈ¢D178 * タスクの起動時優先度取得(タスクコンテキスト用) 179 * 180 * tskidで指定したタスクの起動時優先度を取得する. 181 * tskidはTMIN_TSKID以上,tmax_tskid以下の値,もしくはTSK_SELFで 182 * 指定しなければならない. 191 183 */ 192 184 extern uint_t get_ipri_self(ID tskid); 193 185 194 186 /* 195 * ^XNÌN®Dæxæ¾(ñ^XNReLXgp)196 * 197 * tskid Åwèµ½^XNÌN®Dæxðæ¾·éD198 * tskid ÍTMIN_TSKIDÈãCtmax_tskidȺÌlÅwèµÈ¯êÎÈçÈ¢D187 * タスクの起動時優先度取得(非タスクコンテキスト用) 188 * 189 * tskidで指定したタスクの起動時優先度を取得する. 190 * tskidはTMIN_TSKID以上,tmax_tskid以下の値で指定しなければならない. 199 191 */ 200 192 extern uint_t get_ipri(ID tskid); 201 193 202 194 203 /* N®vL 204 [COrbg}bvÌì */ 195 /* 起動要求キューイングビットマップの操作 */ 205 196 #define ACTQUE_BIT(ipri) (1U << (ipri)) 206 197 207 /* N®vL 208 [COÌZbg */ 198 /* 起動要求キューイングのセット */ 209 199 Inline 210 200 void actque_set(uint_t ipri) … … 213 203 } 214 204 215 /* N®vL 216 [COÌNA */ 205 /* 起動要求キューイングのクリア */ 217 206 Inline 218 207 void actque_clear(uint_t ipri) … … 221 210 } 222 211 223 /* N®vL 224 [COÌ`FbN */ 212 /* 起動要求キューイング数のチェック */ 225 213 Inline 226 214 bool_t actque_test(uint_t ipri) -
Property svn:mime-type
changed from
Note:
See TracChangeset
for help on using the changeset viewer.