亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? ss_task.c

?? 中國石油二期加油站IC系統(tǒng)后臺通訊軟件
?? C
?? 第 1 頁 / 共 4 頁
字號:
Ent ent;                        /* entity */
Inst inst;                      /* instance */
Ttype type;                     /* task type */
Prior prior;                    /* task priority */
PAIFS16 initTsk;                /* initialization function */
ActvTsk actvTsk;                /* activation function */
#endif
{
    S16 ret;
    SsTTskEntry *tTsk;


    TRC1(SRegTTsk);


#if (ERRCLASS & ERRCLS_INT_PAR)

    /* check entity and instance ranges */
    if (ent >= SS_MAX_ENT ||  inst >= SS_MAX_INST)
    {
        SSLOGERROR(ERRCLS_INT_PAR, ESS467, ERRZERO, "Invalid entity/instance");
        RETVALUE(RFAILED);
    }

    /* check activation function */
    if (actvTsk == NULLP)
    {
        SSLOGERROR(ERRCLS_INT_PAR, ESS468, ERRZERO, "Null pointer");
        RETVALUE(RFAILED);
    }

    /* check task type */
    if (type != TTNORM  &&  type != TTPERM)
    {
        SSLOGERROR(ERRCLS_INT_PAR, ESS469, ERRZERO, "Invalid task type");
    }

    /* check task priority */
    if (prior > PRIOR3)
    {
        SSLOGERROR(ERRCLS_INT_PAR, ESS470, ERRZERO, "Invalid task priority");
        RETVALUE(RFAILED);
    }
#endif


    /* Acquire the counting semaphore for all other system
     *  tasks (this call is either running in one system task's
     *  context, or in SInit()'s context). Once we have all of
     *  them, SPstTsk() cannot run, so we can do things to the
     *  TAPA task table.
     */
    SS_ACQUIRE_ALL_SEMA(&osCp.tTskTblSem, ret);
    if (ret != ROK)
    {

#if (ERRCLASS & ERRCLS_DEBUG)
        SSLOGERROR(ERRCLS_DEBUG, ESS471, ERRZERO,
                   "Could not lock TAPA task table");
#endif

        RETVALUE(RFAILED);
    }


#if (ERRCLASS & ERRCLS_DEBUG)
    /* check count of tasks */
    if (osCp.numTTsks == SS_MAX_TTSKS)
    {
        SS_RELEASE_ALL_SEMA(&osCp.tTskTblSem);
        SSLOGERROR(ERRCLS_DEBUG, ESS472, ERRZERO, "Too many tasks");
        RETVALUE(ROUTRES);
    }

    /* check if entity and instance already registered */
    if (osCp.tTskIds[ent][inst] != SS_TSKNC)
    {
        SS_RELEASE_ALL_SEMA(&osCp.tTskTblSem);
        SSLOGERROR(ERRCLS_DEBUG, ESS473, ERRZERO,
                   "Entity and instance already registered");
        RETVALUE(RFAILED);
    }
#endif


    /*  We fill up the current available slot with all the
     *  information we've been given. Update table information,
     *  and the task is registered.
     */
    tTsk = &osCp.tTskTbl[osCp.nxtTTskEntry];
    tTsk->used     = TRUE;
    tTsk->ent      = ent;
    tTsk->inst     = inst;
    tTsk->tskType  = type;
    tTsk->tskPrior = prior;
    tTsk->initTsk  = initTsk;
    tTsk->actvTsk  = actvTsk;
    tTsk->sTsk     = NULLP;

    osCp.tTskIds[ent][inst] = osCp.nxtTTskEntry;
    osCp.nxtTTskEntry = tTsk->nxt;
    osCp.numTTsks++;


    /* Activate initialization function, if present. Like
     *  SRegInit(), we use hard-coded parameters. Note: we
     *  assume that the initialization function is not
     *  going to call SRegTTsk() or SPstTsk(). If it does,
     *  this thread will freeze up as we are holding the
     *  TAPA task table counting semaphore.
     */
    if (initTsk != NULLP)
        (Void)(*initTsk)(ent, inst, DFLT_REGION, PWR_UP);


    /* unlock the table */
    SS_RELEASE_ALL_SEMA(&osCp.tTskTblSem);


    RETVALUE(ROK);
} /* SRegTTsk */


/*
*
*       Fun:   Deregister TAPA task
*
*       Desc:  This function is used to deregister a TAPA task.
*              All information about the task is removed from the
*              task table.
*
*       Ret:   ROK      - ok
*              RFAILED  - failed, general (optional)
*
*       Notes:
*
*       File:  ss_task.c
*
*/
#ifdef ANSI
PUBLIC S16 SDeregTTsk
(
Ent ent,                        /* entity */
Inst inst                       /* instance */
)
#else
PUBLIC S16 SDeregTTsk(ent, inst)
Ent ent;                        /* entity */
Inst inst;                      /* instance */
#endif
{
    S16          ret;
    S16          n;
    SsIdx        idx;
    SsTTskEntry *tTsk;
    SsSTskEntry *sTsk;
    SsTmrEntry  *tmr;


    TRC1(SDeregTTsk);


#if (ERRCLASS & ERRCLS_INT_PAR)

    /* check entity and instance ranges */
    if (ent >= SS_MAX_ENT ||  inst >= SS_MAX_INST)
    {
        SSLOGERROR(ERRCLS_INT_PAR, ESS474, ERRZERO, "Invalid entity/instance");
        RETVALUE(RFAILED);
    }
#endif


    /* We deregister all timers for this TAPA task, since it's going
     *  away now. Lock the timer table and iterate through it, removing
     *  all timers owned by this task.
     */
    if (SLock(&osCp.tmrTblLock) != ROK)
    {
#if (ERRCLASS & ERRCLS_DEBUG)
        SSLOGERROR(ERRCLS_DEBUG, ESS475, ERRZERO,
                   "Could not lock timer table");
#endif
        RETVALUE(RFAILED);
    }

    for (idx = 0;  idx < SS_MAX_TMRS;  idx++)
    {
        if ((osCp.tmrTbl[idx].ownerEnt == ent) &&  
            (osCp.tmrTbl[idx].ownerInst == inst))
        {
            /* shut down this timer */
            tmr = &osCp.tmrTbl[idx];
            if (ssdDeregTmr(tmr) == ROK)
            {
                tmr->used      = FALSE;
                tmr->tmrId     = 0;
                tmr->ownerEnt  = ENTNC;
                tmr->ownerInst = INSTNC;
                tmr->interval  = 0;
                tmr->tmrActvFn = NULLP;

                tmr->nxt = osCp.nxtTmrEntry;
                osCp.nxtTmrEntry = (SsIdx)idx;
                osCp.numTmrs--;
            } else
            {
                SUnlock(&osCp.tmrTblLock);

#if (ERRCLASS & ERRCLS_DEBUG)
                SSLOGERROR(ERRCLS_DEBUG, ESS476, ERRZERO,
                           "Could not deregister task's timer(s)");
#endif
                RETVALUE(RFAILED);

            }
        }
    }

    SUnlock(&osCp.tmrTblLock);


    /* Now, we grab the system task table lock and the locks
     *  for all the system tasks. This will prevent them from
     *  examining the TAPA task index table while we're changing
     *  it. This is only necessary for one case, where a task is
     *  detached from a system task and is being deregistered,
     *  but messages for it are still in the system task's demand
     *  queue.
     */
    ret = SLock(&osCp.sTskTblLock);
    if (ret != ROK)
    {

#if (ERRCLASS & ERRCLS_DEBUG)
        SSLOGERROR(ERRCLS_DEBUG, ESS477, (ErrVal) ret,
                   "Could not lock system task table");
#endif

        RETVALUE(RFAILED);
    }

    for (n = 0;  n < SS_MAX_STSKS;  n++)
    {
        if (osCp.sTskTbl[n].used)
        {
            if (!SS_CHECK_CUR_STSK(&osCp.sTskTbl[n]))
            {
                ret = SLock(&osCp.sTskTbl[n].lock);
                if (ret != ROK)
                {
#if (ERRCLASS & ERRCLS_DEBUG)
                    SSLOGERROR(ERRCLS_DEBUG, ESS478, (ErrVal) ret,
                               "Could not lock system task entry");
#endif

                    /* unlock everything we've locked */
                    while (n > 0)
                    {
                        n--;
                        if (osCp.sTskTbl[n].used)
                        {
                            if (!SS_CHECK_CUR_STSK(&osCp.sTskTbl[n]))
                            {
                                SUnlock(&osCp.sTskTbl[n].lock);
                            }
                        }
                    }
                    SUnlock(&osCp.sTskTblLock);

                    RETVALUE(RFAILED);
                }
            }
        }
    }


    /* Acquire the counting semaphore for all TAPA tasks. Once
     *  we have all of them, both SPstTsk() and SRegTTsk() cannot
     *  run, so we can do things to the TAPA task table.
     */
    SS_ACQUIRE_ALL_SEMA(&osCp.tTskTblSem, ret);
    if (ret != ROK)
    {
        /* unlock all the system task entries */
        for (n = 0;  n < SS_MAX_STSKS;  n++)
        {
            if (osCp.sTskTbl[n].used)
            {
                if (!SS_CHECK_CUR_STSK(&osCp.sTskTbl[n]))
                {
                    SUnlock(&osCp.sTskTbl[n].lock);
                }
            }
        }

        /* unlock the system task table */
        SUnlock(&osCp.sTskTblLock);

#if (ERRCLASS & ERRCLS_DEBUG)
        SSLOGERROR(ERRCLS_DEBUG, ESS479, ERRZERO,
                   "Could not lock TAPA task table");
#endif

        RETVALUE(RFAILED);
    }


    /* get out the TAPA task entry */
    idx = osCp.tTskIds[ent][inst];

    /* make sure this TAPA task exists */
    if (idx == SS_TSKNC)
    {
        SS_RELEASE_ALL_SEMA(&osCp.tTskTblSem);

        /* unlock all the system task entries */
        for (n = 0;  n < SS_MAX_STSKS;  n++)
        {
            if (osCp.sTskTbl[n].used)
            {
                if (!SS_CHECK_CUR_STSK(&osCp.sTskTbl[n]))
                {
                    SUnlock(&osCp.sTskTbl[n].lock);
                }
            }
        }

        /* unlock the system task table */
        SUnlock(&osCp.sTskTblLock);

        SSLOGERROR(ERRCLS_INT_PAR, ESS480, ERRZERO, "Unknown task");
        RETVALUE(RFAILED);
    }

    tTsk = &osCp.tTskTbl[idx];


    /* We check the sTsk element; if it is not NULLP, the
     *  task is attached. So we have to detach it before
     *  deregistering the task.
     */
    if (tTsk->sTsk != NULLP)
    {
        sTsk = tTsk->sTsk;

        tTsk->sTsk = NULLP;

        for (n = 0;  n < SS_MAX_TTSKS;  n++)
        {
            if (sTsk->tTsks[n] == idx)
            {
                sTsk->tTsks[n] = SS_INVALID_IDX;
                sTsk->numTTsks--;
                break;
            }
        }

        /* call the implementation to detach the task */
        ssdDetachTTsk(tTsk);
    }


    /* Now we empty the entry for this task and update the table
     *  information
     */
    osCp.tTskIds[ent][inst] = SS_TSKNC;

    tTsk->used    = FALSE;
    tTsk->ent     = ENTNC;
    tTsk->inst    = INSTNC;
    tTsk->tskType = TTUND;
    tTsk->initTsk = NULLP;
    tTsk->actvTsk = NULLP;
    tTsk->sTsk    = NULLP;

    tTsk->nxt = osCp.nxtTTskEntry;
    osCp.nxtTTskEntry = idx;
    osCp.numTTsks--;


    /* unlock the TAPA task table */
    SS_RELEASE_ALL_SEMA(&osCp.tTskTblSem);

    /* unlock all the system task entries */
    for (n = 0;  n < SS_MAX_STSKS;  n++)
    {
        if (osCp.sTskTbl[n].used)
        {
            if (!SS_CHECK_CUR_STSK(&osCp.sTskTbl[n]))
            {
                SUnlock(&osCp.sTskTbl[n].lock);
            }
        }
    }

    /* unlock the system task table */
    SUnlock(&osCp.sTskTblLock);


    RETVALUE(ROK);
} /* SDeregTTsk */


/*
*
*       Fun:   Create system task
*
*       Desc:  This function is used to create a system task. An
*              entry is located in the system task table and the
*              implementation-specific function is called.
*
*       Ret:   ROK      - ok
*              RFAILED  - failed, general (optional)
*              ROUTRES  - failed, out of resources (optional)
*
*       Notes:
*
*       File:  ss_task.c
*
*/
#ifdef ANSI
PUBLIC S16 SCreateSTsk
(
SSTskPrior tskPrior,            /* task priority */
SSTskId *tskId                  /* filled in with system task ID */
)
#else
PUBLIC S16 SCreateSTsk(tskPrior, tskId)
SSTskPrior tskPrior;            /* task priority */
SSTskId *tskId;                 /* filled in with system task ID */
#endif
{
    S16 ret;
    SsSTskEntry *sTsk;


    TRC1(SCreateSTsk);


#if (ERRCLASS & ERRCLS_INT_PAR)

    /* check task ID pointer */
    if (tskId == NULLP)
    {
        SSLOGERROR(ERRCLS_INT_PAR, ESS481, ERRZERO, "Null pointer");
        RETVALUE(RFAILED);
    }

    /* check system task priority */
    if (tskPrior > SS_LOWEST_STSK_PRIOR)
    {
        SSLOGERROR(ERRCLS_INT_PAR, ESS482, ERRZERO,
                   "Invalid system task priority");
        RETVALUE(RFAILED);
    }
#endif


    /* lock the system task table */
    ret = SLock(&osCp.sTskTblLock);
    if (ret != ROK)
    {

#if (ERRCLASS & ERRCLS_DEBUG)
        SSLOGERROR(ERRCLS_DEBUG, ESS483, (ErrVal) ret,
                   "Could not lock system task table");
#endif

        RETVALUE(RFAILED);
    }


#ifdef SS_SINGLE_THREADED
    /* When singlethreaded, we only need to create one... */
    if (osCp.numSTsks == 1)
    {
        *tskId = 0;
        osCp.sTskTbl[0].termPend = FALSE;
        SUnlock(&osCp.sTskTblLock);

        RETVALUE(ROK);
    }
#endif /* SS_SINGLE_THREADED */


    /* check count of system tasks */
    if (osCp.numSTsks == SS_MAX_STSKS)
    {
        SUnlock(&osCp.sTskTblLock);

#if (ERRCLASS & ERRCLS_ADD_RES)
        SSLOGERROR(ERRCLS_ADD_RES, ESS484, ERRZERO, "Too many system tasks");
#endif

        RETVALUE(ROUTRES);
    }


    /* initialize the system task entry with the information we have */
    sTsk = &osCp.sTskTbl[osCp.nxtSTskEntry];

    /* store the system task priority */
    sTsk->tskPrior = tskPrior;

    /* initialize the demand queue */
    if (ssInitDmndQ(&sTsk->dQ) != ROK)
    {
        SUnlock(&osCp.sTskTblLock);

#if (ERRCLASS & ERRCLS_DEBUG)
        SSLOGERROR(ERRCLS_DEBUG, ESS485, (ErrVal) ret,
                   "Could not initialize demand queue");
#endif

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日本vs亚洲vs韩国一区三区二区| 国产三级精品在线| 亚洲一区二区成人在线观看| 99热精品国产| 亚洲欧美在线视频| 色乱码一区二区三区88| 亚洲免费在线观看视频| 在线观看欧美精品| 视频精品一区二区| 日韩欧美国产麻豆| 国产成人精品网址| 《视频一区视频二区| 91福利视频网站| 日韩二区三区在线观看| 欧美精品一区二区三区很污很色的 | 91麻豆精品国产无毒不卡在线观看 | 亚洲韩国一区二区三区| 欧美日高清视频| 精品综合久久久久久8888| 亚洲国产高清aⅴ视频| 色成年激情久久综合| 日韩国产精品久久| 久久久久久久久久久久久久久99 | 久久午夜羞羞影院免费观看| 粉嫩av一区二区三区在线播放| 成人免费在线视频观看| 欧美高清视频一二三区 | 亚洲国产日韩精品| 精品国产欧美一区二区| av福利精品导航| 亚洲高清免费观看| 久久精品人人爽人人爽| 日本乱人伦aⅴ精品| 久久99深爱久久99精品| 中文字幕一区二区三区精华液| 欧美另类变人与禽xxxxx| 国内精品写真在线观看| 亚洲另类一区二区| 久久综合狠狠综合久久激情| 一本一本大道香蕉久在线精品| 久久er99精品| 亚洲香蕉伊在人在线观| 国产免费观看久久| 日韩精品中文字幕一区二区三区| 99视频国产精品| 国产精品自拍av| 亚洲线精品一区二区三区八戒| 久久精品亚洲精品国产欧美 | 人妖欧美一区二区| 亚洲男人的天堂在线aⅴ视频| 精品国产欧美一区二区| 欧美久久久久久蜜桃| 99精品欧美一区| 国产激情视频一区二区在线观看| 日本在线观看不卡视频| 亚洲精品久久7777| 国产精品国产三级国产| 精品乱码亚洲一区二区不卡| 欧美日韩一区二区三区高清| 91亚洲国产成人精品一区二区三 | 国产精品久久久久aaaa| 2017欧美狠狠色| 日韩视频免费观看高清在线视频| 91福利小视频| 日本道色综合久久| 成人性生交大片免费看视频在线 | 欧美巨大另类极品videosbest | 麻豆精品视频在线观看免费| 亚洲综合免费观看高清在线观看| 国产精品国产三级国产三级人妇| 久久久久综合网| 精品国产污网站| 精品欧美久久久| 日韩亚洲欧美一区| 欧美日韩aaa| 精品视频在线免费看| 成人天堂资源www在线| 免费亚洲电影在线| 日韩中文字幕亚洲一区二区va在线| |精品福利一区二区三区| 久久你懂得1024| 日韩一区二区中文字幕| 69堂国产成人免费视频| 欧美三级在线视频| 欧美日韩视频一区二区| 欧美怡红院视频| 欧美天天综合网| 欧美天堂一区二区三区| 欧美亚洲高清一区二区三区不卡| 欧美性猛交xxxx乱大交退制版 | 色女孩综合影院| 91丨porny丨在线| 色综合久久九月婷婷色综合| 色偷偷一区二区三区| 日本韩国精品在线| 欧美日韩专区在线| 欧美一区二区成人6969| 欧美xxxxx牲另类人与| 欧美精品一区二区三区蜜臀| 久久久久久久久久久久久女国产乱 | 国产精品久久看| 亚洲天堂2014| 午夜不卡av免费| 麻豆免费精品视频| 国产麻豆欧美日韩一区| 91亚洲国产成人精品一区二区三| 欧美日本在线看| 精品区一区二区| 国产精品久久久一本精品 | 夫妻av一区二区| 色综合天天综合狠狠| 欧美久久婷婷综合色| 精品久久久久一区| 国产精品色一区二区三区| 一区二区三区在线观看视频| 日韩成人一区二区三区在线观看| 国产一区999| 欧美日韩综合在线| 久久精品视频在线免费观看 | 91麻豆精品国产91久久久久久| 欧美成人r级一区二区三区| 国产精品毛片大码女人| 亚洲图片欧美一区| 国产成人综合网| 欧美日韩精品一区二区三区| 久久综合九色综合97婷婷女人| 亚洲视频免费在线| 久久精品国产亚洲aⅴ| 91在线观看高清| 精品国产免费人成电影在线观看四季 | 激情综合色综合久久| 91浏览器打开| 欧美成人欧美edvon| 亚洲色图欧美激情| 捆绑变态av一区二区三区| 91女人视频在线观看| 精品入口麻豆88视频| 亚洲一区二区三区国产| 高清国产一区二区三区| 555夜色666亚洲国产免| 亚洲精品乱码久久久久久| 国产福利精品导航| 91精品国产综合久久精品性色| 日韩理论片中文av| 国产精品系列在线观看| 91精品国产综合久久久久久漫画 | 国产精品网站在线| 极品瑜伽女神91| 欧美日韩免费一区二区三区 | 国产欧美一区二区三区网站| 丝袜美腿亚洲色图| 色94色欧美sute亚洲线路一ni| 国产欧美精品一区| 久久电影国产免费久久电影| 欧美乱熟臀69xxxxxx| 亚洲女厕所小便bbb| 国产精品69毛片高清亚洲| 欧美一级一区二区| 亚洲亚洲精品在线观看| 色婷婷精品久久二区二区蜜臂av | 国产一区视频导航| 欧美成人a∨高清免费观看| 日本怡春院一区二区| 精品视频在线看| 一区二区成人在线观看| 色呦呦日韩精品| 亚洲日本在线a| 在线日韩国产精品| 亚洲乱码一区二区三区在线观看| 91蜜桃在线免费视频| 成人免费在线视频| 日本高清成人免费播放| 亚洲大片在线观看| 欧美人动与zoxxxx乱| 亚洲伊人色欲综合网| 欧美日韩在线播放一区| 日韩成人伦理电影在线观看| 欧美精品xxxxbbbb| 看电影不卡的网站| 国产日韩欧美综合在线| 96av麻豆蜜桃一区二区| 一区二区三区在线播放| 欧美色综合久久| 秋霞国产午夜精品免费视频| 日韩一区二区高清| 国产永久精品大片wwwapp| 中文字幕第一区综合| 97久久超碰国产精品电影| 亚洲高清免费视频| 精品免费国产二区三区 | 不卡的电影网站| 亚洲欧美日本韩国| 欧美疯狂性受xxxxx喷水图片| 美女免费视频一区二区| 国产亚洲成aⅴ人片在线观看| 91在线小视频| 蜜臀av性久久久久蜜臀aⅴ流畅 | 国产精品国产自产拍在线| 在线亚洲精品福利网址导航| 91一区二区三区在线观看|