Changeset 315 for rubycfg_asp/trunk/asp_dcre/kernel/task.c
- Timestamp:
- Jul 23, 2017, 2:29:40 PM (7 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
rubycfg_asp/trunk/asp_dcre/kernel/task.c
-
Property svn:mime-type
changed from
text/x-csrc
totext/x-csrc; charset=UTF-8
r313 r315 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 … … 65 50 66 51 /* 67 * ãã¬ã¼ã¹ãã°ãã¯ãã®ããã©ã«ãå®ç¾©52 * トレースログマクロのデフォルト定義 68 53 */ 69 54 #ifndef LOG_TEX_ENTER … … 78 63 79 64 /* 80 * å®è¡ç¶æ 81 ã®ã¿ã¹ã¯ 65 * 実行状態のタスク 82 66 */ 83 67 TCB *p_runtsk; 84 68 85 69 /* 86 * æé«åªå 87 é ä½ã®ã¿ã¹ã¯ 70 * 最高優先順位のタスク 88 71 */ 89 72 TCB *p_schedtsk; 90 73 91 74 /* 92 * ã¿ã¹ã¯ãã£ã¹ãããï¼ã¿ã¹ã¯ä¾å¤å¦çã«ã¼ãã³èµ·åè¦æ±ãã©ã°75 * タスクディスパッチ/タスク例外処理ルーチン起動要求フラグ 93 76 */ 94 77 bool_t reqflg; 95 78 96 79 /* 97 * å²è¾¼ã¿åªå 98 度ãã¹ã¯å 99 ¨è§£é¤ç¶æ 100 80 * 割込み優先度マスク全解除状態 101 81 */ 102 82 bool_t ipmflg; 103 83 104 84 /* 105 * ãã£ã¹ãããç¦æ¢ç¶æ 106 85 * ディスパッチ禁止状態 107 86 */ 108 87 bool_t disdsp; 109 88 110 89 /* 111 * ã¿ã¹ã¯ãã£ã¹ãããå¯è½ç¶æ 112 90 * タスクディスパッチ可能状態 113 91 */ 114 92 bool_t dspflg; 115 93 116 94 /* 117 * ã¬ãã£ãã¥ã¼95 * レディキュー 118 96 */ 119 97 QUEUE ready_queue[TNUM_TPRI]; 120 98 121 99 /* 122 * ã¬ãã£ãã¥ã¼ãµã¼ãã®ããã®ãããããã100 * レディキューサーチのためのビットマップ 123 101 */ 124 102 uint16_t ready_primap; 125 103 126 104 /* 127 * 使ç¨ãã¦ããªãTCBã®ãªã¹ã105 * 使用していないTCBのリスト 128 106 */ 129 107 QUEUE free_tcb; 130 108 131 109 /* 132 * ã¿ã¹ã¯ç®¡çã¢ã¸ã¥ã¼ã«ã®åæå110 * タスク管理モジュールの初期化 133 111 */ 134 112 void … … 174 152 175 153 /* 176 * ãããããããµã¼ãé¢æ° 177 * 178 * bitmapå 179 ã®1ã®ãããã®å 180 ï¼æãä¸ä½ï¼å³ï¼ã®ãã®ããµã¼ããï¼ãã®ãã 181 * ãçªå·ãè¿ãï¼ãããçªå·ã¯ï¼æä¸ä½ãããã0ã¨ããï¼bitmapã«0ãæå® 182 * ãã¦ã¯ãªããªãï¼ãã®é¢æ°ã§ã¯ï¼bitmapã16ãããã§ãããã¨ãä»®å®ãï¼ 183 * uint16_tåã¨ãã¦ããï¼ 184 * 185 * ããããµã¼ãå½ä»¤ãæã¤ããã»ããµã§ã¯ï¼ããããµã¼ãå½ä»¤ã使ãããã« 186 * æ¸ãç´ããæ¹ãå¹çãè¯ãå ´åãããï¼ãã®ãããªå ´åã«ã¯ï¼ã¿ã¼ã²ãã 187 * ä¾åé¨ã§ããããµã¼ãå½ä»¤ã使ã£ãbitmap_searchãå®ç¾©ãï¼ 188 * OMIT_BITMAP_SEARCHããã¯ãå®ç¾©ããã°ããï¼ã¾ãï¼ããããµã¼ãå½ä»¤ã® 189 * ãµã¼ãæ¹åãéãªã©ã®çç±ã§åªå 190 度ã¨ãããã¨ã®å¯¾å¿ãå¤æ´ãããå ´åã« 191 * ã¯ï¼PRIMAP_BITããã¯ãå®ç¾©ããã°ããï¼ 192 * 193 * ã¾ãï¼ã©ã¤ãã©ãªã«ffsããããªãï¼æ¬¡ã®ããã«å®ç¾©ãã¦ã©ã¤ãã©ãªé¢æ°ã 194 * 使ã£ãæ¹ãå¹çãè¯ãå¯è½æ§ãããï¼ 154 * ビットマップサーチ関数 155 * 156 * bitmap内の1のビットの内,最も下位(右)のものをサーチし,そのビッ 157 * ト番号を返す.ビット番号は,最下位ビットを0とする.bitmapに0を指定 158 * してはならない.この関数では,bitmapが16ビットであることを仮定し, 159 * uint16_t型としている. 160 * 161 * ビットサーチ命令を持つプロセッサでは,ビットサーチ命令を使うように 162 * 書き直した方が効率が良い場合がある.このような場合には,ターゲット 163 * 依存部でビットサーチ命令を使ったbitmap_searchを定義し, 164 * OMIT_BITMAP_SEARCHをマクロ定義すればよい.また,ビットサーチ命令の 165 * サーチ方向が逆などの理由で優先度とビットとの対応を変更したい場合に 166 * は,PRIMAP_BITをマクロ定義すればよい. 167 * 168 * また,ライブラリにffsがあるなら,次のように定義してライブラリ関数を 169 * 使った方が効率が良い可能性もある. 195 170 * #define bitmap_search(bitmap) (ffs(bitmap) - 1) 196 171 */ … … 224 199 225 200 /* 226 * åªå 227 度ããããããã空ãã®ãã§ã㯠201 * 優先度ビットマップが空かのチェック 228 202 */ 229 203 Inline bool_t … … 234 208 235 209 /* 236 * åªå 237 度ããããããã®ãµã¼ã 210 * 優先度ビットマップのサーチ 238 211 */ 239 212 Inline uint_t … … 244 217 245 218 /* 246 * åªå 247 度ããããããã®ã»ãã 219 * 優先度ビットマップのセット 248 220 */ 249 221 Inline void … … 254 226 255 227 /* 256 * åªå 257 度ããããããã®ã¯ãªã¢ 228 * 優先度ビットマップのクリア 258 229 */ 259 230 Inline void … … 264 235 265 236 /* 266 * æé«åªå 267 é ä½ã¿ã¹ã¯ã®ãµã¼ã 237 * 最高優先順位タスクのサーチ 268 238 */ 269 239 #ifdef TOPPERS_tsksched … … 281 251 282 252 /* 283 * å®è¡ã§ããç¶æ 284 ã¸ã®é·ç§» 285 * 286 * æé«åªå 287 é ä½ã®ã¿ã¹ã¯ãæ´æ°ããã®ã¯ï¼å®è¡ã§ããã¿ã¹ã¯ããªãã£ãå ´å 288 * ã¨ï¼p_tcbã®åªå 289 度ãæé«åªå 290 é ä½ã®ã¿ã¹ã¯ã®åªå 291 度ãããé«ãå ´åã§ã 292 * ãï¼ 253 * 実行できる状態への遷移 254 * 255 * 最高優先順位のタスクを更新するのは,実行できるタスクがなかった場合 256 * と,p_tcbの優先度が最高優先順位のタスクの優先度よりも高い場合であ 257 * る. 293 258 */ 294 259 #ifdef TOPPERS_tskrun … … 312 277 313 278 /* 314 * å®è¡ã§ããç¶æ 315 ããä»ã®ç¶æ 316 ã¸ã®é·ç§» 317 * 318 * æé«åªå 319 é ä½ã®ã¿ã¹ã¯ãæ´æ°ããã®ã¯ï¼p_tcbãæé«åªå 320 é ä½ã®ã¿ã¹ã¯ã§ 321 * ãã£ãå ´åã§ããï¼p_tcbã¨åãåªå 322 度ã®ã¿ã¹ã¯ãä»ã«ããå ´åã¯ï¼p_tcb 323 * ã®æ¬¡ã®ã¿ã¹ã¯ãæé«åªå 324 é ä½ã«ãªãï¼ããã§ãªãå ´åã¯ï¼ã¬ãã£ãã¥ã¼ã 325 * ãµã¼ãããå¿ 326 è¦ãããï¼ 279 * 実行できる状態から他の状態への遷移 280 * 281 * 最高優先順位のタスクを更新するのは,p_tcbが最高優先順位のタスクで 282 * あった場合である.p_tcbと同じ優先度のタスクが他にある場合は,p_tcb 283 * の次のタスクが最高優先順位になる.そうでない場合は,レディキューを 284 * サーチする必要がある. 327 285 */ 328 286 #ifdef TOPPERS_tsknrun … … 354 312 355 313 /* 356 * ä¼æ¢ç¶æ 357 ã¸ã®é·ç§» 314 * 休止状態への遷移 358 315 */ 359 316 #ifdef TOPPERS_tskdmt … … 373 330 374 331 /* 375 * ä¼æ¢ç¶æ 376 ããå®è¡ã§ããç¶æ 377 ã¸ã®é·ç§» 332 * 休止状態から実行できる状態への遷移 378 333 */ 379 334 #ifdef TOPPERS_tskact … … 391 346 392 347 /* 393 * ã¿ã¹ã¯ã®åªå 394 度ã®å¤æ´ 395 * 396 * ã¿ã¹ã¯ãå®è¡ã§ããç¶æ 397 ã®å ´åã«ã¯ï¼ã¬ãã£ãã¥ã¼ã®ä¸ã§ã®ä½ç½®ãå¤æ´ã 398 * ãï¼ãªãã¸ã§ã¯ãã®å¾ 399 ã¡ãã¥ã¼ã®ä¸ã§å¾ 400 ã¡ç¶æ 401 ã«ãªã£ã¦ããå ´åã«ã¯ï¼å¾ 402 403 * ã¡ãã¥ã¼ã®ä¸ã§ã®ä½ç½®ãå¤æ´ããï¼ 404 * 405 * æé«åªå 406 é ä½ã®ã¿ã¹ã¯ãæ´æ°ããã®ã¯ï¼(1) p_tcbãæé«åªå 407 é ä½ã®ã¿ã¹ 408 * ã¯ã§ãã£ã¦ï¼ãã®åªå 409 度ãä¸ããå ´åï¼(2) p_tcbãæé«åªå 410 é ä½ã®ã¿ã¹ 411 * ã¯ã§ã¯ãªãï¼å¤æ´å¾ã®åªå 412 度ãæé«åªå 413 é ä½ã®ã¿ã¹ã¯ã®åªå 414 度ãããé«ã 415 * å ´åã§ããï¼(1)ã®å ´åã«ã¯ï¼ã¬ãã£ãã¥ã¼ããµã¼ãããå¿ 416 è¦ãããï¼ 348 * タスクの優先度の変更 349 * 350 * タスクが実行できる状態の場合には,レディキューの中での位置を変更す 351 * る.オブジェクトの待ちキューの中で待ち状態になっている場合には,待 352 * ちキューの中での位置を変更する. 353 * 354 * 最高優先順位のタスクを更新するのは,(1) p_tcbが最高優先順位のタス 355 * クであって,その優先度を下げた場合,(2) p_tcbが最高優先順位のタス 356 * クではなく,変更後の優先度が最高優先順位のタスクの優先度よりも高い 357 * 場合である.(1)の場合には,レディキューをサーチする必要がある. 417 358 */ 418 359 #ifdef TOPPERS_tskpri … … 428 369 if (TSTAT_RUNNABLE(p_tcb->tstat)) { 429 370 /* 430 * ã¿ã¹ã¯ãå®è¡ã§ããç¶æ 431 ã®å ´å 371 * タスクが実行できる状態の場合 432 372 */ 433 373 queue_delete(&(p_tcb->task_queue)); … … 454 394 if (TSTAT_WAIT_WOBJCB(p_tcb->tstat)) { 455 395 /* 456 * ã¿ã¹ã¯ãï¼åæã»éä¿¡ãªãã¸ã§ã¯ãã®ç®¡çãããã¯ã®å 457 ±éé¨ 458 * åï¼WOBJCBï¼ã®å¾ 459 ã¡ãã¥ã¼ã«ã¤ãªããã¦ããå ´å 396 * タスクが,同期・通信オブジェクトの管理ブロックの共通部 397 * 分(WOBJCB)の待ちキューにつながれている場合 460 398 */ 461 399 wobj_change_priority(((WINFO_WOBJ *)(p_tcb->p_winfo))->p_wobjcb, … … 469 407 470 408 /* 471 * ã¬ãã£ãã¥ã¼ã®å転 472 * 473 * æé«åªå 474 é ä½ã®ã¿ã¹ã¯ãæ´æ°ããã®ã¯ï¼æé«åªå 475 é ä½ã®ã¿ã¹ã¯ãã¿ã¹ã¯ã 476 * ã¥ã¼ã®æ«å°¾ã«ç§»åããå ´åã§ããï¼ 409 * レディキューの回転 410 * 411 * 最高優先順位のタスクを更新するのは,最高優先順位のタスクがタスクキ 412 * ューの末尾に移動した場合である. 477 413 */ 478 414 #ifdef TOPPERS_tskrot … … 498 434 499 435 /* 500 * ã¿ã¹ã¯ä¾å¤å¦çã«ã¼ãã³ã®å¼åºã 501 * 502 * ASPã«ã¼ãã«ã§ã¯ï¼ã¿ã¹ã¯ä¾å¤å¦çã«ã¼ãã³å 503 ã§CPUããã¯ç¶æ 504 ã«é·ç§»ãï¼ 505 * å 506 ã®ç¶æ 507 ã«æ»ããã«ãªã¿ã¼ã³ããå ´åï¼ã«ã¼ãã«ãå 508 ã®ç¶æ 509 ã«æ»ãï¼ 436 * タスク例外処理ルーチンの呼出し 437 * 438 * ASPカーネルでは,タスク例外処理ルーチン内でCPUロック状態に遷移し, 439 * 元の状態に戻さずにリターンした場合,カーネルが元の状態に戻す. 510 440 */ 511 441 #ifdef TOPPERS_tsktex … … 540 470 if (p_runtsk != p_schedtsk && dspflg) { 541 471 /* 542 * ããã§dispatchãå¼ã³åºãå¦çã¯ï¼ç¸äºå帰å¼åºãã«ãªã£ã¦ 543 * ãããï¼dispatchãå¼ã¶åã«p_runtsk->enatexãfalseã«ã㦠544 * ããã°æ¯éããªãï¼ãã®çç±ã«ã¤ãã¦ã¯ï¼ãTOPPERS/ASP ã«ã¼ 545 * ãã« è¨è¨ã¡ã¢ããåç 546 §ã®ãã¨ï¼ 472 * ここでdispatchを呼び出す処理は,相互再帰呼出しになって 473 * いるが,dispatchを呼ぶ前にp_runtsk->enatexをfalseにして 474 * おけば支障がない.その理由については,「TOPPERS/ASP カー 475 * ネル 設計メモ」を参照のこと. 547 476 */ 548 477 dispatch(); … … 553 482 554 483 /* 555 * ã¿ã¹ã¯ä¾å¤å¦çã«ã¼ãã³ã®èµ·å484 * タスク例外処理ルーチンの起動 556 485 */ 557 486 #ifndef OMIT_CALLTEX -
Property svn:mime-type
changed from
Note:
See TracChangeset
for help on using the changeset viewer.