Changeset 318 for asp3_gr_sakura/trunk/kernel/task.c
- Timestamp:
- Aug 3, 2017, 10:46:41 PM (7 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
asp3_gr_sakura/trunk/kernel/task.c
- Property svn:keywords deleted
-
Property svn:mime-type
changed from
text/x-csrc
totext/x-csrc; charset=UTF-8
r317 r318 9 9 * Graduate School of Information Science, Nagoya Univ., JAPAN 10 10 * 11 * ä¸è¨èä½æ¨©è 12 ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ 13 * ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ã使ç¨ã»è¤è£½ã»æ¹ 14 * å¤ã»åé 15 å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼ 16 * (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½ 17 * 権表示ï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼ 18 * ã¹ã³ã¼ãä¸ã«å«ã¾ãã¦ãããã¨ï¼ 19 * (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 20 * ç¨ã§ããå½¢ã§åé 21 å¸ããå ´åã«ã¯ï¼åé 22 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨ 23 * è 24 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ 25 * ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 26 * (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 27 * ç¨ã§ããªãå½¢ã§åé 28 å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã 29 * ã¨ï¼ 30 * (a) åé 31 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨è 32 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è 33 * ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 34 * (b) åé 35 å¸ã®å½¢æ 36 ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSããã¸ã§ã¯ãã« 37 * å ±åãããã¨ï¼ 38 * (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ 39 * 害ãããï¼ä¸è¨èä½æ¨©è 40 ããã³TOPPERSããã¸ã§ã¯ããå 41 責ãããã¨ï¼ 42 * ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç 43 * ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è 44 ããã³TOPPERSããã¸ã§ã¯ãã 45 * å 46 責ãããã¨ï¼ 11 * 上記著作権者は,以下の(1)~(4)の条件を満たす場合に限り,本ソフトウェ 12 * ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改 13 * 変・再配布(以下,利用と呼ぶ)することを無償で許諾する. 14 * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作 15 * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー 16 * スコード中に含まれていること. 17 * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使 18 * 用できる形で再配布する場合には,再配布に伴うドキュメント(利用 19 * 者マニュアルなど)に,上記の著作権表示,この利用条件および下記 20 * の無保証規定を掲載すること. 21 * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使 22 * 用できない形で再配布する場合には,次のいずれかの条件を満たすこ 23 * と. 24 * (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著 25 * 作権表示,この利用条件および下記の無保証規定を掲載すること. 26 * (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに 27 * 報告すること. 28 * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損 29 * 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること. 30 * また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理 31 * 由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを 32 * 免責すること. 47 33 * 48 * æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è 49 ã 50 * ãã³TOPPERSããã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç 51 * ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ 52 * ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ害ã«é¢ãã¦ãï¼ã 53 * ã®è²¬ä»»ãè² ããªãï¼ 34 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 35 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的 36 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ 37 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ 38 * の責任を負わない. 54 39 * 55 40 * $Id$ … … 57 42 58 43 /* 59 * ã¿ã¹ã¯ç®¡çã¢ã¸ã¥ã¼ã«44 * タスク管理モジュール 60 45 */ 61 46 … … 68 53 69 54 /* 70 * å®è¡ç¶æ 71 ã®ã¿ã¹ã¯ 55 * 実行状態のタスク 72 56 */ 73 57 TCB *p_runtsk; 74 58 75 59 /* 76 * å®è¡ãã¹ãã¿ã¹ã¯60 * 実行すべきタスク 77 61 */ 78 62 TCB *p_schedtsk; 79 63 80 64 /* 81 * ãã£ã¹ããã許å¯ç¶æ 82 65 * ディスパッチ許可状態 83 66 */ 84 67 bool_t enadsp; 85 68 86 69 /* 87 * ã¿ã¹ã¯ãã£ã¹ãããå¯è½ç¶æ 88 70 * タスクディスパッチ可能状態 89 71 */ 90 72 bool_t dspflg; 91 73 92 74 /* 93 * ã¬ãã£ãã¥ã¼75 * レディキュー 94 76 */ 95 77 QUEUE ready_queue[TNUM_TPRI]; 96 78 97 79 /* 98 * ã¬ãã£ãã¥ã¼ãµã¼ãã®ããã®ãããããã80 * レディキューサーチのためのビットマップ 99 81 */ 100 82 uint16_t ready_primap; 101 83 102 84 /* 103 * 使ç¨ãã¦ããªãTCBã®ãªã¹ã85 * 使用していないTCBのリスト 104 86 */ 105 87 QUEUE free_tcb; 106 88 107 89 /* 108 * ã¿ã¹ã¯ç®¡çã¢ã¸ã¥ã¼ã«ã®åæå90 * タスク管理モジュールの初期化 109 91 */ 110 92 void … … 148 130 149 131 /* 150 * ãããããããµã¼ãé¢æ° 151 * 152 * bitmapå 153 ã®1ã®ãããã®å 154 ï¼æãä¸ä½ï¼å³ï¼ã®ãã®ããµã¼ããï¼ãã®ãã 155 * ãçªå·ãè¿ãï¼ãããçªå·ã¯ï¼æä¸ä½ãããã0ã¨ããï¼bitmapã«0ãæå® 156 * ãã¦ã¯ãªããªãï¼ãã®é¢æ°ã§ã¯ï¼bitmapã16ãããã§ãããã¨ãä»®å®ãï¼ 157 * uint16_tåã¨ãã¦ããï¼ 158 * 159 * ããããµã¼ãå½ä»¤ãæã¤ããã»ããµã§ã¯ï¼ããããµã¼ãå½ä»¤ã使ãããã« 160 * æ¸ãç´ããæ¹ãå¹çãè¯ãå ´åãããï¼ãã®ãããªå ´åã«ã¯ï¼ã¿ã¼ã²ãã 161 * ä¾åé¨ã§ããããµã¼ãå½ä»¤ã使ã£ãbitmap_searchãå®ç¾©ãï¼ 162 * OMIT_BITMAP_SEARCHããã¯ãå®ç¾©ããã°ããï¼ã¾ãï¼ããããµã¼ãå½ä»¤ã® 163 * ãµã¼ãæ¹åãéãªã©ã®çç±ã§åªå 164 度ã¨ãããã¨ã®å¯¾å¿ãå¤æ´ãããå ´åã« 165 * ã¯ï¼PRIMAP_BITããã¯ãå®ç¾©ããã°ããï¼ 166 * 167 * ã¾ãï¼ã©ã¤ãã©ãªã«ffsããããªãï¼æ¬¡ã®ããã«å®ç¾©ãã¦ã©ã¤ãã©ãªé¢æ°ã 168 * 使ã£ãæ¹ãå¹çãè¯ãå¯è½æ§ãããï¼ 132 * ビットマップサーチ関数 133 * 134 * bitmap内の1のビットの内,最も下位(右)のものをサーチし,そのビッ 135 * ト番号を返す.ビット番号は,最下位ビットを0とする.bitmapに0を指定 136 * してはならない.この関数では,bitmapが16ビットであることを仮定し, 137 * uint16_t型としている. 138 * 139 * ビットサーチ命令を持つプロセッサでは,ビットサーチ命令を使うように 140 * 書き直した方が効率が良い場合がある.このような場合には,ターゲット 141 * 依存部でビットサーチ命令を使ったbitmap_searchを定義し, 142 * OMIT_BITMAP_SEARCHをマクロ定義すればよい.また,ビットサーチ命令の 143 * サーチ方向が逆などの理由で優先度とビットとの対応を変更したい場合に 144 * は,PRIMAP_BITをマクロ定義すればよい. 145 * 146 * また,ライブラリにffsがあるなら,次のように定義してライブラリ関数を 147 * 使った方が効率が良い可能性もある. 169 148 * #define bitmap_search(bitmap) (ffs(bitmap) - 1) 170 149 */ … … 198 177 199 178 /* 200 * åªå 201 度ããããããã空ãã®ãã§ã㯠179 * 優先度ビットマップが空かのチェック 202 180 */ 203 181 Inline bool_t … … 208 186 209 187 /* 210 * åªå 211 度ããããããã®ãµã¼ã 188 * 優先度ビットマップのサーチ 212 189 */ 213 190 Inline uint_t … … 218 195 219 196 /* 220 * åªå 221 度ããããããã®ã»ãã 197 * 優先度ビットマップのセット 222 198 */ 223 199 Inline void … … 228 204 229 205 /* 230 * åªå 231 度ããããããã®ã¯ãªã¢ 206 * 優先度ビットマップのクリア 232 207 */ 233 208 Inline void … … 238 213 239 214 /* 240 * æé«åªå 241 é ä½ã¿ã¹ã¯ã®ãµã¼ã 215 * 最高優先順位タスクのサーチ 242 216 */ 243 217 #ifdef TOPPERS_tsksched … … 255 229 256 230 /* 257 * å®è¡ã§ããç¶æ 258 ã¸ã®é·ç§» 259 * 260 * å®è¡ãã¹ãã¿ã¹ã¯ãæ´æ°ããã®ã¯ï¼å®è¡ã§ããã¿ã¹ã¯ããªãã£ãå ´åã¨ï¼ 261 * p_tcbã®åªå 262 度ãå®è¡ãã¹ãã¿ã¹ã¯ã®åªå 263 度ãããé«ãå ´åã§ããï¼ 231 * 実行できる状態への遷移 232 * 233 * 実行すべきタスクを更新するのは,実行できるタスクがなかった場合と, 234 * p_tcbの優先度が実行すべきタスクの優先度よりも高い場合である. 264 235 */ 265 236 #ifdef TOPPERS_tskrun … … 283 254 284 255 /* 285 * å®è¡ã§ããç¶æ 286 ããä»ã®ç¶æ 287 ã¸ã®é·ç§» 288 * 289 * å®è¡ãã¹ãã¿ã¹ã¯ãæ´æ°ããã®ã¯ï¼p_tcbãå®è¡ãã¹ãã¿ã¹ã¯ã§ãã£ãå ´å 290 * ã§ããï¼p_tcbã¨åãåªå 291 度ã®ã¿ã¹ã¯ãä»ã«ããå ´åã¯ï¼p_tcbã®æ¬¡ã®ã¿ã¹ 292 * ã¯ãå®è¡ãã¹ãã¿ã¹ã¯ã«ãªãï¼ããã§ãªãå ´åã¯ï¼ã¬ãã£ãã¥ã¼ããµã¼ã 293 * ããå¿ 294 è¦ãããï¼ 256 * 実行できる状態から他の状態への遷移 257 * 258 * 実行すべきタスクを更新するのは,p_tcbが実行すべきタスクであった場合 259 * である.p_tcbと同じ優先度のタスクが他にある場合は,p_tcbの次のタス 260 * クが実行すべきタスクになる.そうでない場合は,レディキューをサーチ 261 * する必要がある. 295 262 */ 296 263 #ifdef TOPPERS_tsknrun … … 321 288 322 289 /* 323 * ä¼æ¢ç¶æ 324 ã¸ã®é·ç§» 290 * 休止状態への遷移 325 291 */ 326 292 #ifdef TOPPERS_tskdmt … … 344 310 345 311 /* 346 * ä¼æ¢ç¶æ 347 ããå®è¡ã§ããç¶æ 348 ã¸ã®é·ç§» 312 * 休止状態から実行できる状態への遷移 349 313 */ 350 314 #ifdef TOPPERS_tskact … … 362 326 363 327 /* 364 * ã¿ã¹ã¯ã®åªå 365 度ã®å¤æ´ 366 * 367 * ã¿ã¹ã¯ãå®è¡ã§ããç¶æ 368 ã®å ´åã«ã¯ï¼ã¬ãã£ãã¥ã¼ã®ä¸ã§ã®ä½ç½®ãå¤æ´ã 369 * ãï¼ãªãã¸ã§ã¯ãã®å¾ 370 ã¡ãã¥ã¼ã®ä¸ã§å¾ 371 ã¡ç¶æ 372 ã«ãªã£ã¦ããå ´åã«ã¯ï¼å¾ 373 374 * ã¡ãã¥ã¼ã®ä¸ã§ã®ä½ç½®ãå¤æ´ããï¼ 375 * 376 * å®è¡ãã¹ãã¿ã¹ã¯ãæ´æ°ããã®ã¯ï¼(1) p_tcbãå®è¡ãã¹ãã¿ã¹ã¯ã§ãã£ã¦ï¼ 377 * ãã®åªå 378 度ãä¸ããå ´åï¼(2) p_tcbãå®è¡ãã¹ãã¿ã¹ã¯ã§ã¯ãªãï¼å¤æ´å¾ 379 * ã®åªå 380 度ãå®è¡ãã¹ãã¿ã¹ã¯ã®åªå 381 度ãããé«ãå ´åã§ããï¼(1)ã®å ´åã« 382 * ã¯ï¼ã¬ãã£ãã¥ã¼ããµã¼ãããå¿ 383 è¦ãããï¼ 328 * タスクの優先度の変更 329 * 330 * タスクが実行できる状態の場合には,レディキューの中での位置を変更す 331 * る.オブジェクトの待ちキューの中で待ち状態になっている場合には,待 332 * ちキューの中での位置を変更する. 333 * 334 * 実行すべきタスクを更新するのは,(1) p_tcbが実行すべきタスクであって, 335 * その優先度を下げた場合,(2) p_tcbが実行すべきタスクではなく,変更後 336 * の優先度が実行すべきタスクの優先度よりも高い場合である.(1)の場合に 337 * は,レディキューをサーチする必要がある. 384 338 */ 385 339 #ifdef TOPPERS_tskpri … … 395 349 if (TSTAT_RUNNABLE(p_tcb->tstat)) { 396 350 /* 397 * ã¿ã¹ã¯ãå®è¡ã§ããç¶æ 398 ã®å ´å 351 * タスクが実行できる状態の場合 399 352 */ 400 353 queue_delete(&(p_tcb->task_queue)); … … 427 380 if (TSTAT_WAIT_WOBJCB(p_tcb->tstat)) { 428 381 /* 429 * ã¿ã¹ã¯ãï¼åæã»éä¿¡ãªãã¸ã§ã¯ãã®ç®¡çãããã¯ã®å 430 ±éé¨ 431 * åï¼WOBJCBï¼ã®å¾ 432 ã¡ãã¥ã¼ã«ã¤ãªããã¦ããå ´å 382 * タスクが,同期・通信オブジェクトの管理ブロックの共通部 383 * 分(WOBJCB)の待ちキューにつながれている場合 433 384 */ 434 385 wobj_change_priority(((WINFO_WOBJ *)(p_tcb->p_winfo))->p_wobjcb, … … 441 392 442 393 /* 443 * ã¬ãã£ãã¥ã¼ã®å転444 * 445 * å®è¡ãã¹ãã¿ã¹ã¯ãæ´æ°ããã®ã¯ï¼å®è¡ãã¹ãã¿ã¹ã¯ãã¿ã¹ã¯ãã¥ã¼ã®æ«446 * å°¾ã«ç§»åããå ´åã§ããï¼394 * レディキューの回転 395 * 396 * 実行すべきタスクを更新するのは,実行すべきタスクがタスクキューの末 397 * 尾に移動した場合である. 447 398 */ 448 399 #ifdef TOPPERS_tskrot … … 467 418 468 419 /* 469 * ã¿ã¹ã¯ã®çµäºå¦ç420 * タスクの終了処理 470 421 */ 471 422 #ifdef TOPPERS_tskterm
Note:
See TracChangeset
for help on using the changeset viewer.