Changeset 318 for asp3_gr_sakura/trunk/kernel/task_manage.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_manage.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 … … 67 52 68 53 /* 69 * ãã¬ã¼ã¹ãã°ãã¯ãã®ããã©ã«ãå®ç¾©54 * トレースログマクロのデフォルト定義 70 55 */ 71 56 #ifndef LOG_ACRE_TSK_ENTER … … 134 119 135 120 /* 136 * ã¿ã¹ã¯ã®çæ121 * タスクの生成 137 122 * 138 * pk_ctsk->exinfã¯ï¼ã¨ã©ã¼ãã§ãã¯ãããï¼ä¸åº¦ããåç 139 §ããªãããï¼ãã¼ 140 * ã«ã«å¤æ°ã«ã³ãã¼ããå¿ 141 è¦ããªãï¼éä¸ã§æ¸ãæãã£ã¦ãæ¯éããªãï¼ï¼ 123 * pk_ctsk->exinfは,エラーチェックをせず,一度しか参照しないため,ロー 124 * カル変数にコピーする必要がない(途中で書き換わっても支障がない). 142 125 */ 143 126 #ifdef TOPPERS_acre_tsk 144 127 145 128 #ifndef TARGET_MIN_STKSZ 146 #define TARGET_MIN_STKSZ 1U /* æªå®ç¾©ã®å ´åã¯0ã§ãªããã¨ããã§ãã¯*/129 #define TARGET_MIN_STKSZ 1U /* 未定義の場合は0でないことをチェック */ 147 130 #endif /* TARGET_MIN_STKSZ */ 148 131 … … 226 209 227 210 /* 228 * ã¿ã¹ã¯ã®åé¤ï¼»NGKI1100ï¼½211 * タスクの削除[NGKI1100] 229 212 */ 230 213 #ifdef TOPPERS_del_tsk … … 238 221 239 222 LOG_DEL_TSK_ENTER(tskid); 240 CHECK_TSKCTX_UNL(); /* ï¼»NGKI1101][NGKI1102ï¼½*/241 CHECK_ID(VALID_TSKID(tskid)); /* ï¼»NGKI1103ï¼½*/223 CHECK_TSKCTX_UNL(); /*[NGKI1101][NGKI1102]*/ 224 CHECK_ID(VALID_TSKID(tskid)); /*[NGKI1103]*/ 242 225 p_tcb = get_tcb(tskid); 243 226 244 227 lock_cpu(); 245 228 if (p_tcb->p_tinib->tskatr == TA_NOEXS) { 246 ercd = E_NOEXS; /* ï¼»NGKI1104ï¼½*/229 ercd = E_NOEXS; /*[NGKI1104]*/ 247 230 } 248 231 else if (tskid <= tmax_stskid || !TSTAT_DORMANT(p_tcb->tstat)) { 249 ercd = E_OBJ; /* ï¼»NGKI1106][NGKI1107ï¼½*/232 ercd = E_OBJ; /*[NGKI1106][NGKI1107]*/ 250 233 } 251 234 else { … … 254 237 term_tskinictxb(&(p_tinib->tskinictxb)); 255 238 #else /* USE_TSKINICTXB */ 256 if ((p_tinib->tskatr & TA_MEMALLOC) != 0U) { /* ï¼»NGKI1109ï¼½*/239 if ((p_tinib->tskatr & TA_MEMALLOC) != 0U) { /*[NGKI1109]*/ 257 240 kernel_free(p_tinib->stk); 258 241 } 259 242 #endif /* USE_TSKINICTXB */ 260 p_tinib->tskatr = TA_NOEXS; /* ï¼»NGKI1108ï¼½*/243 p_tinib->tskatr = TA_NOEXS; /*[NGKI1108]*/ 261 244 queue_insert_prev(&free_tcb, &(p_tcb->task_queue)); 262 245 ercd = E_OK; … … 272 255 273 256 /* 274 * ã¿ã¹ã¯ã®èµ·åï¼»NGKI3529ï¼½257 * タスクの起動[NGKI3529] 275 258 */ 276 259 #ifdef TOPPERS_act_tsk … … 283 266 284 267 LOG_ACT_TSK_ENTER(tskid); 285 CHECK_UNL(); /* ï¼»NGKI1114ï¼½*/268 CHECK_UNL(); /*[NGKI1114]*/ 286 269 if (tskid == TSK_SELF && !sense_context()) { 287 p_tcb = p_runtsk; /* ï¼»NGKI1121ï¼½*/288 } 289 else { 290 CHECK_ID(VALID_TSKID(tskid)); /* ï¼»NGKI1115ï¼½*/270 p_tcb = p_runtsk; /*[NGKI1121]*/ 271 } 272 else { 273 CHECK_ID(VALID_TSKID(tskid)); /*[NGKI1115]*/ 291 274 p_tcb = get_tcb(tskid); 292 275 } … … 294 277 lock_cpu(); 295 278 if (p_tcb->p_tinib->tskatr == TA_NOEXS) { 296 ercd = E_NOEXS; /* ï¼»NGKI1116ï¼½*/279 ercd = E_NOEXS; /*[NGKI1116]*/ 297 280 } 298 281 else if (TSTAT_DORMANT(p_tcb->tstat)) { 299 make_active(p_tcb); /* ï¼»NGKI1118ï¼½*/282 make_active(p_tcb); /*[NGKI1118]*/ 300 283 if (p_runtsk != p_schedtsk) { 301 284 if (!sense_context()) { … … 309 292 } 310 293 else if ((p_tcb->p_tinib->tskatr & TA_NOACTQUE) != 0U || p_tcb->actque) { 311 ercd = E_QOVR; /* ï¼»NGKI3528ï¼½*/312 } 313 else { 314 p_tcb->actque = true; /* ï¼»NGKI3527ï¼½*/294 ercd = E_QOVR; /*[NGKI3528]*/ 295 } 296 else { 297 p_tcb->actque = true; /*[NGKI3527]*/ 315 298 ercd = E_OK; 316 299 } … … 325 308 326 309 /* 327 * ã¿ã¹ã¯èµ·åè¦æ±ã®ãã£ã³ã»ã«ï¼»NGKI1138ï¼½310 * タスク起動要求のキャンセル[NGKI1138] 328 311 */ 329 312 #ifdef TOPPERS_can_act … … 336 319 337 320 LOG_CAN_ACT_ENTER(tskid); 338 CHECK_TSKCTX_UNL(); /* ï¼»NGKI1139][NGKI1140ï¼½*/321 CHECK_TSKCTX_UNL(); /*[NGKI1139][NGKI1140]*/ 339 322 if (tskid == TSK_SELF) { 340 p_tcb = p_runtsk; /* ï¼»NGKI1146ï¼½*/341 } 342 else { 343 CHECK_ID(VALID_TSKID(tskid)); /* ï¼»NGKI1141ï¼½*/323 p_tcb = p_runtsk; /*[NGKI1146]*/ 324 } 325 else { 326 CHECK_ID(VALID_TSKID(tskid)); /*[NGKI1141]*/ 344 327 p_tcb = get_tcb(tskid); 345 328 } … … 347 330 lock_cpu(); 348 331 if (p_tcb->p_tinib->tskatr == TA_NOEXS) { 349 ercd = E_NOEXS; /* ï¼»NGKI1142ï¼½*/350 } 351 else { 352 ercd = p_tcb->actque ? 1 : 0; /* ï¼»NGKI1144ï¼½*/353 p_tcb->actque = false; /* ï¼»NGKI1144ï¼½*/332 ercd = E_NOEXS; /*[NGKI1142]*/ 333 } 334 else { 335 ercd = p_tcb->actque ? 1 : 0; /*[NGKI1144]*/ 336 p_tcb->actque = false; /*[NGKI1144]*/ 354 337 } 355 338 unlock_cpu(); … … 363 346 364 347 /* 365 * ã¿ã¹ã¯ç¶æ 366 ã®åç 367 §ï¼»NGKI3613ï¼½ 348 * タスク状態の参照[NGKI3613] 368 349 */ 369 350 #ifdef TOPPERS_get_tst … … 377 358 378 359 LOG_GET_TST_ENTER(tskid, p_tskstat); 379 CHECK_TSKCTX_UNL(); /* ï¼»NGKI3614][NGKI3615ï¼½*/360 CHECK_TSKCTX_UNL(); /*[NGKI3614][NGKI3615]*/ 380 361 if (tskid == TSK_SELF) { 381 p_tcb = p_runtsk; /* ï¼»NGKI3621ï¼½*/382 } 383 else { 384 CHECK_ID(VALID_TSKID(tskid)); /* ï¼»NGKI3616ï¼½*/362 p_tcb = p_runtsk; /*[NGKI3621]*/ 363 } 364 else { 365 CHECK_ID(VALID_TSKID(tskid)); /*[NGKI3616]*/ 385 366 p_tcb = get_tcb(tskid); 386 367 } … … 389 370 tstat = p_tcb->tstat; 390 371 if (p_tcb->p_tinib->tskatr == TA_NOEXS) { 391 ercd = E_NOEXS; /* ï¼»NGKI3617ï¼½*/392 } 393 else { 394 if (TSTAT_DORMANT(tstat)) { /* ï¼»NGKI3620ï¼½*/372 ercd = E_NOEXS; /*[NGKI3617]*/ 373 } 374 else { 375 if (TSTAT_DORMANT(tstat)) { /*[NGKI3620]*/ 395 376 *p_tskstat = TTS_DMT; 396 377 } … … 424 405 425 406 /* 426 * ã¿ã¹ã¯ã®ãã¼ã¹åªå 427 度ã®å¤æ´ï¼»NGKI1183ï¼½ 407 * タスクのベース優先度の変更[NGKI1183] 428 408 */ 429 409 #ifdef TOPPERS_chg_pri … … 437 417 438 418 LOG_CHG_PRI_ENTER(tskid, tskpri); 439 CHECK_TSKCTX_UNL(); /* ï¼»NGKI1184][NGKI1185ï¼½*/419 CHECK_TSKCTX_UNL(); /*[NGKI1184][NGKI1185]*/ 440 420 if (tskid == TSK_SELF) { 441 p_tcb = p_runtsk; /* ï¼»NGKI1198ï¼½*/442 } 443 else { 444 CHECK_ID(VALID_TSKID(tskid)); /* ï¼»NGKI1187ï¼½*/421 p_tcb = p_runtsk; /*[NGKI1198]*/ 422 } 423 else { 424 CHECK_ID(VALID_TSKID(tskid)); /*[NGKI1187]*/ 445 425 p_tcb = get_tcb(tskid); 446 426 } 447 427 if (tskpri == TPRI_INI) { 448 newbpri = p_tcb->p_tinib->ipriority; /* ï¼»NGKI1199ï¼½*/449 } 450 else { 451 CHECK_PAR(VALID_TPRI(tskpri)); /* ï¼»NGKI1188ï¼½*/428 newbpri = p_tcb->p_tinib->ipriority; /*[NGKI1199]*/ 429 } 430 else { 431 CHECK_PAR(VALID_TPRI(tskpri)); /*[NGKI1188]*/ 452 432 newbpri = INT_PRIORITY(tskpri); 453 433 } … … 455 435 lock_cpu(); 456 436 if (p_tcb->p_tinib->tskatr == TA_NOEXS) { 457 ercd = E_NOEXS; /* ï¼»NGKI1189ï¼½*/437 ercd = E_NOEXS; /*[NGKI1189]*/ 458 438 } 459 439 else if (TSTAT_DORMANT(p_tcb->tstat)) { 460 ercd = E_OBJ; /* ï¼»NGKI1191ï¼½*/440 ercd = E_OBJ; /*[NGKI1191]*/ 461 441 } 462 442 else if ((p_tcb->p_lastmtx != NULL || TSTAT_WAIT_MTX(p_tcb->tstat)) 463 443 && !((*mtxhook_check_ceilpri)(p_tcb, newbpri))) { 464 ercd = E_ILUSE; /* ï¼»NGKI1201ï¼½*/465 } 466 else { 467 p_tcb->bpriority = newbpri; /* ï¼»NGKI1192ï¼½*/444 ercd = E_ILUSE; /*[NGKI1201]*/ 445 } 446 else { 447 p_tcb->bpriority = newbpri; /*[NGKI1192]*/ 468 448 if (p_tcb->p_lastmtx == NULL || !((*mtxhook_scan_ceilmtx)(p_tcb))) { 469 change_priority(p_tcb, newbpri, false); /* ï¼»NGKI1193ï¼½*/449 change_priority(p_tcb, newbpri, false); /*[NGKI1193]*/ 470 450 if (p_runtsk != p_schedtsk) { 471 451 dispatch(); 472 } /* ï¼»NGKI1197ï¼½*/452 } /*[NGKI1197]*/ 473 453 } 474 454 ercd = E_OK; … … 484 464 485 465 /* 486 * ã¿ã¹ã¯åªå 487 度ã®åç 488 §ï¼»NGKI1202ï¼½ 466 * タスク優先度の参照[NGKI1202] 489 467 */ 490 468 #ifdef TOPPERS_get_pri … … 497 475 498 476 LOG_GET_PRI_ENTER(tskid, p_tskpri); 499 CHECK_TSKCTX_UNL(); /* ï¼»NGKI1203][NGKI1204ï¼½*/477 CHECK_TSKCTX_UNL(); /*[NGKI1203][NGKI1204]*/ 500 478 if (tskid == TSK_SELF) { 501 p_tcb = p_runtsk; /* ï¼»NGKI1211ï¼½*/502 } 503 else { 504 CHECK_ID(VALID_TSKID(tskid)); /* ï¼»NGKI1205ï¼½*/479 p_tcb = p_runtsk; /*[NGKI1211]*/ 480 } 481 else { 482 CHECK_ID(VALID_TSKID(tskid)); /*[NGKI1205]*/ 505 483 p_tcb = get_tcb(tskid); 506 484 } … … 508 486 lock_cpu(); 509 487 if (p_tcb->p_tinib->tskatr == TA_NOEXS) { 510 ercd = E_NOEXS; /* ï¼»NGKI1206ï¼½*/488 ercd = E_NOEXS; /*[NGKI1206]*/ 511 489 } 512 490 else if (TSTAT_DORMANT(p_tcb->tstat)) { 513 ercd = E_OBJ; /* ï¼»NGKI1209ï¼½*/514 } 515 else { 516 *p_tskpri = EXT_TSKPRI(p_tcb->priority); /* ï¼»NGKI1210ï¼½*/491 ercd = E_OBJ; /*[NGKI1209]*/ 492 } 493 else { 494 *p_tskpri = EXT_TSKPRI(p_tcb->priority); /*[NGKI1210]*/ 517 495 ercd = E_OK; 518 496 } … … 527 505 528 506 /* 529 * èªã¿ã¹ã¯ã®æ¡å¼µæ 530 å ±ã®åç 531 §ï¼»NGKI1212ï¼½ 507 * 自タスクの拡張情報の参照[NGKI1212] 532 508 */ 533 509 #ifdef TOPPERS_get_inf … … 539 515 540 516 LOG_GET_INF_ENTER(p_exinf); 541 CHECK_TSKCTX_UNL(); /* ï¼»NGKI1213][NGKI1214ï¼½*/542 543 lock_cpu(); 544 *p_exinf = p_runtsk->p_tinib->exinf; /* ï¼»NGKI1216ï¼½*/517 CHECK_TSKCTX_UNL(); /*[NGKI1213][NGKI1214]*/ 518 519 lock_cpu(); 520 *p_exinf = p_runtsk->p_tinib->exinf; /*[NGKI1216]*/ 545 521 ercd = E_OK; 546 522 unlock_cpu();
Note:
See TracChangeset
for help on using the changeset viewer.