Changeset 321 for EcnlProtoTool/trunk/asp3_dcre/kernel/task_manage.c
- Timestamp:
- Aug 23, 2017, 9:27:43 AM (7 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
EcnlProtoTool/trunk/asp3_dcre/kernel/task_manage.c
- Property svn:keywords deleted
-
Property svn:mime-type
changed from
text/x-csrc
totext/x-csrc;charset=UTF-8
r279 r321 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 … … 223 206 224 207 /* 225 * ã¿ã¹ã¯ã®åé¤ï¼»NGKI1100ï¼½208 * タスクの削除[NGKI1100] 226 209 */ 227 210 #ifdef TOPPERS_del_tsk … … 235 218 236 219 LOG_DEL_TSK_ENTER(tskid); 237 CHECK_TSKCTX_UNL(); /* ï¼»NGKI1101][NGKI1102ï¼½*/238 CHECK_ID(VALID_TSKID(tskid)); /* ï¼»NGKI1103ï¼½*/220 CHECK_TSKCTX_UNL(); /*[NGKI1101][NGKI1102]*/ 221 CHECK_ID(VALID_TSKID(tskid)); /*[NGKI1103]*/ 239 222 p_tcb = get_tcb(tskid); 240 223 241 224 lock_cpu(); 242 225 if (p_tcb->p_tinib->tskatr == TA_NOEXS) { 243 ercd = E_NOEXS; /* ï¼»NGKI1104ï¼½*/226 ercd = E_NOEXS; /*[NGKI1104]*/ 244 227 } 245 228 else if (tskid <= tmax_stskid || !TSTAT_DORMANT(p_tcb->tstat)) { 246 ercd = E_OBJ; /* ï¼»NGKI1106][NGKI1107ï¼½*/229 ercd = E_OBJ; /*[NGKI1106][NGKI1107]*/ 247 230 } 248 231 else { … … 251 234 term_tskinictxb(&(p_tinib->tskinictxb)); 252 235 #else /* USE_TSKINICTXB */ 253 if ((p_tinib->tskatr & TA_MEMALLOC) != 0U) { /* ï¼»NGKI1109ï¼½*/236 if ((p_tinib->tskatr & TA_MEMALLOC) != 0U) { /*[NGKI1109]*/ 254 237 kernel_free(p_tinib->stk); 255 238 } 256 239 #endif /* USE_TSKINICTXB */ 257 p_tinib->tskatr = TA_NOEXS; /* ï¼»NGKI1108ï¼½*/240 p_tinib->tskatr = TA_NOEXS; /*[NGKI1108]*/ 258 241 queue_insert_prev(&free_tcb, &(p_tcb->task_queue)); 259 242 ercd = E_OK; … … 269 252 270 253 /* 271 * ã¿ã¹ã¯ã®èµ·åï¼»NGKI3529ï¼½254 * タスクの起動[NGKI3529] 272 255 */ 273 256 #ifdef TOPPERS_act_tsk … … 280 263 281 264 LOG_ACT_TSK_ENTER(tskid); 282 CHECK_UNL(); /* ï¼»NGKI1114ï¼½*/265 CHECK_UNL(); /*[NGKI1114]*/ 283 266 if (tskid == TSK_SELF && !sense_context()) { 284 p_tcb = p_runtsk; /* ï¼»NGKI1121ï¼½*/285 } 286 else { 287 CHECK_ID(VALID_TSKID(tskid)); /* ï¼»NGKI1115ï¼½*/267 p_tcb = p_runtsk; /*[NGKI1121]*/ 268 } 269 else { 270 CHECK_ID(VALID_TSKID(tskid)); /*[NGKI1115]*/ 288 271 p_tcb = get_tcb(tskid); 289 272 } … … 291 274 lock_cpu(); 292 275 if (p_tcb->p_tinib->tskatr == TA_NOEXS) { 293 ercd = E_NOEXS; /* ï¼»NGKI1116ï¼½*/276 ercd = E_NOEXS; /*[NGKI1116]*/ 294 277 } 295 278 else if (TSTAT_DORMANT(p_tcb->tstat)) { 296 make_active(p_tcb); /* ï¼»NGKI1118ï¼½*/279 make_active(p_tcb); /*[NGKI1118]*/ 297 280 if (p_runtsk != p_schedtsk) { 298 281 if (!sense_context()) { … … 306 289 } 307 290 else if ((p_tcb->p_tinib->tskatr & TA_NOACTQUE) != 0U || p_tcb->actque) { 308 ercd = E_QOVR; /* ï¼»NGKI3528ï¼½*/309 } 310 else { 311 p_tcb->actque = true; /* ï¼»NGKI3527ï¼½*/291 ercd = E_QOVR; /*[NGKI3528]*/ 292 } 293 else { 294 p_tcb->actque = true; /*[NGKI3527]*/ 312 295 ercd = E_OK; 313 296 } … … 322 305 323 306 /* 324 * ã¿ã¹ã¯èµ·åè¦æ±ã®ãã£ã³ã»ã«ï¼»NGKI1138ï¼½307 * タスク起動要求のキャンセル[NGKI1138] 325 308 */ 326 309 #ifdef TOPPERS_can_act … … 333 316 334 317 LOG_CAN_ACT_ENTER(tskid); 335 CHECK_TSKCTX_UNL(); /* ï¼»NGKI1139][NGKI1140ï¼½*/318 CHECK_TSKCTX_UNL(); /*[NGKI1139][NGKI1140]*/ 336 319 if (tskid == TSK_SELF) { 337 p_tcb = p_runtsk; /* ï¼»NGKI1146ï¼½*/338 } 339 else { 340 CHECK_ID(VALID_TSKID(tskid)); /* ï¼»NGKI1141ï¼½*/320 p_tcb = p_runtsk; /*[NGKI1146]*/ 321 } 322 else { 323 CHECK_ID(VALID_TSKID(tskid)); /*[NGKI1141]*/ 341 324 p_tcb = get_tcb(tskid); 342 325 } … … 344 327 lock_cpu(); 345 328 if (p_tcb->p_tinib->tskatr == TA_NOEXS) { 346 ercd = E_NOEXS; /* ï¼»NGKI1142ï¼½*/347 } 348 else { 349 ercd = p_tcb->actque ? 1 : 0; /* ï¼»NGKI1144ï¼½*/350 p_tcb->actque = false; /* ï¼»NGKI1144ï¼½*/329 ercd = E_NOEXS; /*[NGKI1142]*/ 330 } 331 else { 332 ercd = p_tcb->actque ? 1 : 0; /*[NGKI1144]*/ 333 p_tcb->actque = false; /*[NGKI1144]*/ 351 334 } 352 335 unlock_cpu(); … … 360 343 361 344 /* 362 * ã¿ã¹ã¯ç¶æ 363 ã®åç 364 §ï¼»NGKI3613ï¼½ 345 * タスク状態の参照[NGKI3613] 365 346 */ 366 347 #ifdef TOPPERS_get_tst … … 374 355 375 356 LOG_GET_TST_ENTER(tskid, p_tskstat); 376 CHECK_TSKCTX_UNL(); /* ï¼»NGKI3614][NGKI3615ï¼½*/357 CHECK_TSKCTX_UNL(); /*[NGKI3614][NGKI3615]*/ 377 358 if (tskid == TSK_SELF) { 378 p_tcb = p_runtsk; /* ï¼»NGKI3621ï¼½*/379 } 380 else { 381 CHECK_ID(VALID_TSKID(tskid)); /* ï¼»NGKI3616ï¼½*/359 p_tcb = p_runtsk; /*[NGKI3621]*/ 360 } 361 else { 362 CHECK_ID(VALID_TSKID(tskid)); /*[NGKI3616]*/ 382 363 p_tcb = get_tcb(tskid); 383 364 } … … 386 367 tstat = p_tcb->tstat; 387 368 if (p_tcb->p_tinib->tskatr == TA_NOEXS) { 388 ercd = E_NOEXS; /* ï¼»NGKI3617ï¼½*/389 } 390 else { 391 if (TSTAT_DORMANT(tstat)) { /* ï¼»NGKI3620ï¼½*/369 ercd = E_NOEXS; /*[NGKI3617]*/ 370 } 371 else { 372 if (TSTAT_DORMANT(tstat)) { /*[NGKI3620]*/ 392 373 *p_tskstat = TTS_DMT; 393 374 } … … 421 402 422 403 /* 423 * ã¿ã¹ã¯ã®ãã¼ã¹åªå 424 度ã®å¤æ´ï¼»NGKI1183ï¼½ 404 * タスクのベース優先度の変更[NGKI1183] 425 405 */ 426 406 #ifdef TOPPERS_chg_pri … … 434 414 435 415 LOG_CHG_PRI_ENTER(tskid, tskpri); 436 CHECK_TSKCTX_UNL(); /* ï¼»NGKI1184][NGKI1185ï¼½*/416 CHECK_TSKCTX_UNL(); /*[NGKI1184][NGKI1185]*/ 437 417 if (tskid == TSK_SELF) { 438 p_tcb = p_runtsk; /* ï¼»NGKI1198ï¼½*/439 } 440 else { 441 CHECK_ID(VALID_TSKID(tskid)); /* ï¼»NGKI1187ï¼½*/418 p_tcb = p_runtsk; /*[NGKI1198]*/ 419 } 420 else { 421 CHECK_ID(VALID_TSKID(tskid)); /*[NGKI1187]*/ 442 422 p_tcb = get_tcb(tskid); 443 423 } 444 424 if (tskpri == TPRI_INI) { 445 newbpri = p_tcb->p_tinib->ipriority; /* ï¼»NGKI1199ï¼½*/446 } 447 else { 448 CHECK_PAR(VALID_TPRI(tskpri)); /* ï¼»NGKI1188ï¼½*/425 newbpri = p_tcb->p_tinib->ipriority; /*[NGKI1199]*/ 426 } 427 else { 428 CHECK_PAR(VALID_TPRI(tskpri)); /*[NGKI1188]*/ 449 429 newbpri = INT_PRIORITY(tskpri); 450 430 } … … 452 432 lock_cpu(); 453 433 if (p_tcb->p_tinib->tskatr == TA_NOEXS) { 454 ercd = E_NOEXS; /* ï¼»NGKI1189ï¼½*/434 ercd = E_NOEXS; /*[NGKI1189]*/ 455 435 } 456 436 else if (TSTAT_DORMANT(p_tcb->tstat)) { 457 ercd = E_OBJ; /* ï¼»NGKI1191ï¼½*/437 ercd = E_OBJ; /*[NGKI1191]*/ 458 438 } 459 439 else if ((p_tcb->p_lastmtx != NULL || TSTAT_WAIT_MTX(p_tcb->tstat)) 460 440 && !((*mtxhook_check_ceilpri)(p_tcb, newbpri))) { 461 ercd = E_ILUSE; /* ï¼»NGKI1201ï¼½*/462 } 463 else { 464 p_tcb->bpriority = newbpri; /* ï¼»NGKI1192ï¼½*/441 ercd = E_ILUSE; /*[NGKI1201]*/ 442 } 443 else { 444 p_tcb->bpriority = newbpri; /*[NGKI1192]*/ 465 445 if (p_tcb->p_lastmtx == NULL || !((*mtxhook_scan_ceilmtx)(p_tcb))) { 466 change_priority(p_tcb, newbpri, false); /* ï¼»NGKI1193ï¼½*/446 change_priority(p_tcb, newbpri, false); /*[NGKI1193]*/ 467 447 if (p_runtsk != p_schedtsk) { 468 448 dispatch(); 469 } /* ï¼»NGKI1197ï¼½*/449 } /*[NGKI1197]*/ 470 450 } 471 451 ercd = E_OK; … … 481 461 482 462 /* 483 * ã¿ã¹ã¯åªå 484 度ã®åç 485 §ï¼»NGKI1202ï¼½ 463 * タスク優先度の参照[NGKI1202] 486 464 */ 487 465 #ifdef TOPPERS_get_pri … … 494 472 495 473 LOG_GET_PRI_ENTER(tskid, p_tskpri); 496 CHECK_TSKCTX_UNL(); /* ï¼»NGKI1203][NGKI1204ï¼½*/474 CHECK_TSKCTX_UNL(); /*[NGKI1203][NGKI1204]*/ 497 475 if (tskid == TSK_SELF) { 498 p_tcb = p_runtsk; /* ï¼»NGKI1211ï¼½*/499 } 500 else { 501 CHECK_ID(VALID_TSKID(tskid)); /* ï¼»NGKI1205ï¼½*/476 p_tcb = p_runtsk; /*[NGKI1211]*/ 477 } 478 else { 479 CHECK_ID(VALID_TSKID(tskid)); /*[NGKI1205]*/ 502 480 p_tcb = get_tcb(tskid); 503 481 } … … 505 483 lock_cpu(); 506 484 if (p_tcb->p_tinib->tskatr == TA_NOEXS) { 507 ercd = E_NOEXS; /* ï¼»NGKI1206ï¼½*/485 ercd = E_NOEXS; /*[NGKI1206]*/ 508 486 } 509 487 else if (TSTAT_DORMANT(p_tcb->tstat)) { 510 ercd = E_OBJ; /* ï¼»NGKI1209ï¼½*/511 } 512 else { 513 *p_tskpri = EXT_TSKPRI(p_tcb->priority); /* ï¼»NGKI1210ï¼½*/488 ercd = E_OBJ; /*[NGKI1209]*/ 489 } 490 else { 491 *p_tskpri = EXT_TSKPRI(p_tcb->priority); /*[NGKI1210]*/ 514 492 ercd = E_OK; 515 493 } … … 524 502 525 503 /* 526 * èªã¿ã¹ã¯ã®æ¡å¼µæ 527 å ±ã®åç 528 §ï¼»NGKI1212ï¼½ 504 * 自タスクの拡張情報の参照[NGKI1212] 529 505 */ 530 506 #ifdef TOPPERS_get_inf … … 536 512 537 513 LOG_GET_INF_ENTER(p_exinf); 538 CHECK_TSKCTX_UNL(); /* ï¼»NGKI1213][NGKI1214ï¼½*/539 540 lock_cpu(); 541 *p_exinf = p_runtsk->p_tinib->exinf; /* ï¼»NGKI1216ï¼½*/514 CHECK_TSKCTX_UNL(); /*[NGKI1213][NGKI1214]*/ 515 516 lock_cpu(); 517 *p_exinf = p_runtsk->p_tinib->exinf; /*[NGKI1216]*/ 542 518 ercd = E_OK; 543 519 unlock_cpu();
Note:
See TracChangeset
for help on using the changeset viewer.