Ignore:
Timestamp:
Jul 3, 2020, 7:19:17 PM (4 years ago)
Author:
coas-nagasima
Message:

ASP3, TINET, mbed を更新

File:
1 edited

Legend:

Unmodified
Added
Removed
  • EcnlProtoTool/trunk/asp3_dcre/kernel/task_sync.c

    r321 r429  
    66 *  Copyright (C) 2000-2003 by Embedded and Real-Time Systems Laboratory
    77 *                              Toyohashi Univ. of Technology, JAPAN
    8  *  Copyright (C) 2005-2015 by Embedded and Real-Time Systems Laboratory
     8 *  Copyright (C) 2005-2018 by Embedded and Real-Time Systems Laboratory
    99 *              Graduate School of Information Science, Nagoya Univ., JAPAN
    1010 *
     
    118118
    119119/*
    120  *  起床待ち
     120 *  起床待ち[NGKI1252]
    121121 */
    122122#ifdef TOPPERS_slp_tsk
     
    129129
    130130        LOG_SLP_TSK_ENTER();
    131         CHECK_DISPATCH();
     131        CHECK_DISPATCH();                                                       /*[NGKI1254]*/
    132132
    133133        lock_cpu_dsp();
    134134        if (p_runtsk->raster) {
    135                 ercd = E_RASTER;
     135                ercd = E_RASTER;                                                /*[NGKI3455]*/
    136136        }
    137137        else if (p_runtsk->wupque) {
    138                 p_runtsk->wupque = false;
    139                 ercd = E_OK;
    140         }
    141         else {
    142                 p_runtsk->tstat = TS_WAITING_SLP;
    143                 make_wait(&winfo);
     138                p_runtsk->wupque = false;                               /*[NGKI1259]*/
     139                ercd = E_OK;
     140        }
     141        else {
     142                make_wait(TS_WAITING_SLP, &winfo);              /*[NGKI1260]*/
    144143                LOG_TSKSTAT(p_runtsk);
    145144                dispatch();
     
    156155
    157156/*
    158  *  起床待ち(タイムアウトあり)
     157 *  起床待ち(タイムアウトあり)[NGKI1253]
    159158 */
    160159#ifdef TOPPERS_tslp_tsk
     
    168167
    169168        LOG_TSLP_TSK_ENTER(tmout);
    170         CHECK_DISPATCH();
    171         CHECK_PAR(VALID_TMOUT(tmout));
     169        CHECK_DISPATCH();                                                       /*[NGKI1254]*/
     170        CHECK_PAR(VALID_TMOUT(tmout));                          /*[NGKI1256]*/
    172171
    173172        lock_cpu_dsp();
    174173        if (p_runtsk->raster) {
    175                 ercd = E_RASTER;
     174                ercd = E_RASTER;                                                /*[NGKI3455]*/
    176175        }
    177176        else if (p_runtsk->wupque) {
    178                 p_runtsk->wupque = false;
     177                p_runtsk->wupque = false;                               /*[NGKI1259]*/
    179178                ercd = E_OK;
    180179        }
    181180        else if (tmout == TMO_POL) {
    182                 ercd = E_TMOUT;
    183         }
    184         else {
    185                 p_runtsk->tstat = TS_WAITING_SLP;
    186                 make_wait_tmout(&winfo, &tmevtb, tmout);
     181                ercd = E_TMOUT;                                                 /*[NGKI1257]*/
     182        }
     183        else {                                                                          /*[NGKI1260]*/
     184                make_wait_tmout(TS_WAITING_SLP, &winfo, &tmevtb, tmout);
    187185                LOG_TSKSTAT(p_runtsk);
    188186                dispatch();
     
    199197
    200198/*
    201  *  タスクの起床
     199 *  タスクの起床[NGKI3531]
    202200 */
    203201#ifdef TOPPERS_wup_tsk
     
    210208
    211209        LOG_WUP_TSK_ENTER(tskid);
    212         CHECK_UNL();
     210        CHECK_UNL();                                                            /*[NGKI1265]*/
    213211        if (tskid == TSK_SELF && !sense_context()) {
    214                 p_tcb = p_runtsk;
    215         }
    216         else {
    217                 CHECK_ID(VALID_TSKID(tskid));
     212                p_tcb = p_runtsk;                                               /*[NGKI1275]*/
     213        }
     214        else {
     215                CHECK_ID(VALID_TSKID(tskid));                   /*[NGKI1267]*/
    218216                p_tcb = get_tcb(tskid);
    219217        }
     
    221219        lock_cpu();
    222220        if (p_tcb->p_tinib->tskatr == TA_NOEXS) {
    223                 ercd = E_NOEXS;
     221                ercd = E_NOEXS;                                                 /*[NGKI1268]*/
    224222        }
    225223        else if (TSTAT_DORMANT(p_tcb->tstat)) {
    226                 ercd = E_OBJ;
     224                ercd = E_OBJ;                                                   /*[NGKI1270]*/
    227225        }
    228226        else if (TSTAT_WAIT_SLP(p_tcb->tstat)) {
    229                 wait_complete(p_tcb);
     227                wait_complete(p_tcb);                                   /*[NGKI1271]*/
    230228                if (p_runtsk != p_schedtsk) {
    231229                        if (!sense_context()) {
     
    233231                        }
    234232                        else {
    235                                 request_dispatch();
     233                                request_dispatch_retint();
    236234                        }
    237235                }
     
    239237        }
    240238        else if (!(p_tcb->wupque)) {
    241                 p_tcb->wupque = true;
    242                 ercd = E_OK;
    243         }
    244         else {
    245                 ercd = E_QOVR;
     239                p_tcb->wupque = true;                                   /*[NGKI1273]*/
     240                ercd = E_OK;
     241        }
     242        else {
     243                ercd = E_QOVR;                                                  /*[NGKI1274]*/
    246244        }
    247245        unlock_cpu();
     
    255253
    256254/*
    257  *  タスク起床要求のキャンセル
     255 *  タスク起床要求のキャンセル[NGKI1276]
    258256 */
    259257#ifdef TOPPERS_can_wup
     
    266264
    267265        LOG_CAN_WUP_ENTER(tskid);
    268         CHECK_TSKCTX_UNL();
     266        CHECK_TSKCTX_UNL();                                                     /*[NGKI1277][NGKI1278]*/
    269267        if (tskid == TSK_SELF) {
    270                 p_tcb = p_runtsk;
    271         }
    272         else {
    273                 CHECK_ID(VALID_TSKID(tskid));
     268                p_tcb = p_runtsk;                                               /*[NGKI1285]*/
     269        }
     270        else {
     271                CHECK_ID(VALID_TSKID(tskid));                   /*[NGKI1280]*/
    274272                p_tcb = get_tcb(tskid);
    275273        }
     
    277275        lock_cpu();
    278276        if (p_tcb->p_tinib->tskatr == TA_NOEXS) {
    279                 ercd = E_NOEXS;
     277                ercd = E_NOEXS;                                                 /*[NGKI1281]*/
    280278        }
    281279        else if (TSTAT_DORMANT(p_tcb->tstat)) {
    282                 ercd = E_OBJ;
    283         }
    284         else {
    285                 ercd = p_tcb->wupque ? 1 : 0;
    286                 p_tcb->wupque = false;
     280                ercd = E_OBJ;                                                   /*[NGKI1283]*/
     281        }
     282        else {
     283                ercd = p_tcb->wupque ? 1 : 0;                   /*[NGKI1284]*/
     284                p_tcb->wupque = false;                                  /*[NGKI1284]*/
    287285        }
    288286        unlock_cpu();
     
    296294
    297295/*
    298  *  待ち状態の強制解除
     296 *  待ち状態の強制解除[NGKI3532]
    299297 */
    300298#ifdef TOPPERS_rel_wai
     
    307305
    308306        LOG_REL_WAI_ENTER(tskid);
    309         CHECK_UNL();
    310         CHECK_ID(VALID_TSKID(tskid));
     307        CHECK_UNL();                                                            /*[NGKI1290]*/
     308        CHECK_ID(VALID_TSKID(tskid));                           /*[NGKI1292]*/
    311309        p_tcb = get_tcb(tskid);
    312310
    313311        lock_cpu();
    314312        if (p_tcb->p_tinib->tskatr == TA_NOEXS) {
    315                 ercd = E_NOEXS;
     313                ercd = E_NOEXS;                                                 /*[NGKI1293]*/
    316314        }
    317315        else if (!TSTAT_WAITING(p_tcb->tstat)) {
    318                 ercd = E_OBJ;
    319         }
    320         else {
    321                 wait_dequeue_wobj(p_tcb);
     316                ercd = E_OBJ;                                                   /*[NGKI1295]*/
     317        }
     318        else {
     319                wait_dequeue_wobj(p_tcb);                               /*[NGKI1296]*/
    322320                wait_dequeue_tmevtb(p_tcb);
    323                 p_tcb->p_winfo->wercd = E_RLWAI;
     321                p_tcb->p_winfo->wercd = E_RLWAI;                /*[NGKI1297]*/
    324322                make_non_wait(p_tcb);
    325323                if (p_runtsk != p_schedtsk) {
     
    328326                        }
    329327                        else {
    330                                 request_dispatch();
     328                                request_dispatch_retint();
    331329                        }
    332330                }
     
    409407
    410408/*
    411  *  強制待ち状態からの再開
     409 *  強制待ち状態からの再開[NGKI1312]
    412410 */
    413411#ifdef TOPPERS_rsm_tsk
     
    420418
    421419        LOG_RSM_TSK_ENTER(tskid);
    422         CHECK_TSKCTX_UNL();
    423         CHECK_ID(VALID_TSKID(tskid));
     420        CHECK_TSKCTX_UNL();                                                     /*[NGKI1313][NGKI1314]*/
     421        CHECK_ID(VALID_TSKID(tskid));                           /*[NGKI1316]*/
    424422        p_tcb = get_tcb(tskid);
    425423
    426424        lock_cpu();
    427425        if (p_tcb->p_tinib->tskatr == TA_NOEXS) {
    428                 ercd = E_NOEXS;
     426                ercd = E_NOEXS;                                                 /*[NGKI1317]*/
    429427        }
    430428        else if (!TSTAT_SUSPENDED(p_tcb->tstat)) {
    431                 ercd = E_OBJ;
    432         }
    433         else if (!TSTAT_WAITING(p_tcb->tstat)) {
     429                ercd = E_OBJ;                                                   /*[NGKI1319]*/
     430        }
     431        else {
    434432                /*
    435                  *  強制待ち状態から実行できる状態への遷移
     433                 *  強制待ちからの再開[NGKI1320]
    436434                 */
    437                 p_tcb->tstat = TS_RUNNABLE;
    438                 LOG_TSKSTAT(p_tcb);
    439                 make_runnable(p_tcb);
    440                 if (p_runtsk != p_schedtsk) {
    441                         dispatch();
     435                if (!TSTAT_WAITING(p_tcb->tstat)) {
     436                        p_tcb->tstat = TS_RUNNABLE;
     437                        LOG_TSKSTAT(p_tcb);
     438                        make_runnable(p_tcb);
     439                        if (p_runtsk != p_schedtsk) {
     440                                dispatch();
     441                        }
    442442                }
    443                 ercd = E_OK;
    444         }
    445         else {
    446                 /*
    447                  *  二重待ち状態から待ち状態への遷移
    448                  */
    449                 p_tcb->tstat &= ~TS_SUSPENDED;
    450                 LOG_TSKSTAT(p_tcb);
     443                else {
     444                        p_tcb->tstat &= ~TS_SUSPENDED;
     445                        LOG_TSKSTAT(p_tcb);
     446                }
    451447                ercd = E_OK;
    452448        }
     
    461457
    462458/*
    463  *  自タスクの遅延
     459 *  自タスクの遅延[NGKI1348]
    464460 */
    465461#ifdef TOPPERS_dly_tsk
     
    473469
    474470        LOG_DLY_TSK_ENTER(dlytim);
    475         CHECK_DISPATCH();
    476         CHECK_PAR(VALID_RELTIM(dlytim));
     471        CHECK_DISPATCH();                                                       /*[NGKI1349]*/
     472        CHECK_PAR(VALID_RELTIM(dlytim));                        /*[NGKI1351]*/
    477473
    478474        lock_cpu_dsp();
    479475        if (p_runtsk->raster) {
    480                 ercd = E_RASTER;
    481         }
    482         else {
    483                 p_runtsk->tstat = TS_WAITING_DLY;
     476                ercd = E_RASTER;                                                /*[NGKI3456]*/
     477        }
     478        else {
     479                p_runtsk->tstat = TS_WAITING_DLY;               /*[NGKI1353]*/
    484480                make_non_runnable(p_runtsk);
    485481                p_runtsk->p_winfo = &winfo;
     
    487483                tmevtb.callback = (CBACK) wait_tmout_ok;
    488484                tmevtb.arg = (void *) p_runtsk;
    489                 tmevtb_enqueue(&tmevtb, dlytim);
     485                tmevtb_enqueue_reltim(&tmevtb, dlytim);
    490486                LOG_TSKSTAT(p_runtsk);
    491487                dispatch();
Note: See TracChangeset for help on using the changeset viewer.