Ignore:
Timestamp:
May 22, 2019, 10:03:37 PM (5 years ago)
Author:
coas-nagasima
Message:

ビルドが通るよう更新

File:
1 edited

Legend:

Unmodified
Added
Removed
  • azure_iot_hub/trunk/asp3_dcre/kernel/mutex.c

    • Property svn:keywords deleted
    • Property svn:mime-type changed from text/x-csrc to text/x-csrc;charset=UTF-8
    r388 r389  
    77 *              Graduate School of Information Science, Nagoya Univ., JAPAN
    88 *
    9  *  上記著作権è€
    10 ã¯ï¼Œä»¥ä¸‹ã®(1)~(4)の条件を満たす場合に限り,本ソフトウェ
    11  *  ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
    12  *  変・再é
    13 å¸ƒï¼ˆä»¥ä¸‹ï¼Œåˆ©ç”¨ã¨å‘¼ã¶ï¼‰ã™ã‚‹ã“とを無償で許諾する.
    14  *  (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
    15  *      権表示,この利用条件および下記の無保証規定が,そのままの形でソー
    16  *      スコード中に含まれていること.
    17  *  (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
    18  *      用できる形で再é
    19 å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œå†é
    20 å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨
    21  *      è€
    22 ãƒžãƒ‹ãƒ¥ã‚¢ãƒ«ãªã©ï¼‰ã«ï¼Œä¸Šè¨˜ã®è‘—作権表示,この利用条件および下記
    23  *      の無保証規定を掲載すること.
    24  *  (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
    25  *      用できない形で再é
    26 å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œæ¬¡ã®ã„ずれかの条件を満たすこ
    27  *      と.
    28  *    (a) 再é
    29 å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨è€
    30 ãƒžãƒ‹ãƒ¥ã‚¢ãƒ«ãªã©ï¼‰ã«ï¼Œä¸Šè¨˜ã®è‘—
    31  *        作権表示,この利用条件および下記の無保証規定を掲載すること.
    32  *    (b) 再é
    33 å¸ƒã®å½¢æ
    34 ‹ã‚’,別に定める方法によって,TOPPERSプロジェクトに
    35  *        報告すること.
    36  *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
    37  *      害からも,上記著作権è€
    38 ãŠã‚ˆã³TOPPERSプロジェクトをå
    39 è²¬ã™ã‚‹ã“と.
    40  *      また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
    41  *      由に基づく請求からも,上記著作権è€
    42 ãŠã‚ˆã³TOPPERSプロジェクトを
    43  *      å
    44 è²¬ã™ã‚‹ã“と.
     9 *  上記著作権者は,以下の(1)~(4)の条件を満たす場合に限り,本ソフトウェ
     10 *  ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
     11 *  変・再配布(以下,利用と呼ぶ)することを無償で許諾する.
     12 *  (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
     13 *      権表示,この利用条件および下記の無保証規定が,そのままの形でソー
     14 *      スコード中に含まれていること.
     15 *  (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
     16 *      用できる形で再配布する場合には,再配布に伴うドキュメント(利用
     17 *      者マニュアルなど)に,上記の著作権表示,この利用条件および下記
     18 *      の無保証規定を掲載すること.
     19 *  (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
     20 *      用できない形で再配布する場合には,次のいずれかの条件を満たすこ
     21 *      と.
     22 *    (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
     23 *        作権表示,この利用条件および下記の無保証規定を掲載すること.
     24 *    (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
     25 *        報告すること.
     26 *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
     27 *      害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
     28 *      また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
     29 *      由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを
     30 *      免責すること.
    4531 *
    46  *  本ソフトウェアは,無保証で提供されているものである.上記著作権è€
    47 ãŠ
    48  *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
    49  *  に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
    50  *  アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
    51  *  の責任を負わない.
     32 *  本ソフトウェアは,無保証で提供されているものである.上記著作権者お
     33 *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
     34 *  に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
     35 *  アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
     36 *  の責任を負わない.
    5237 *
    5338 *  $Id$
     
    5540
    5641/*
    57  *              ミューテックス機能
     42 *              ミューテックス機能
    5843 */
    5944
     
    6651
    6752/*
    68  *  トレースログマクロのデフォルト定義
     53 *  トレースログマクロのデフォルト定義
    6954 */
    7055#ifndef LOG_ACRE_MTX_ENTER
     
    133118
    134119/*
    135  *  ミューテックスの数
     120 *  ミューテックスの数
    136121 */
    137122#define tnum_mtx        ((uint_t)(tmax_mtxid - TMIN_MTXID + 1))
     
    139124
    140125/*
    141  *  ミューテックスIDからミューテックス管理ブロックを取り出すためのマクロ
     126 *  ミューテックスIDからミューテックス管理ブロックを取り出すためのマクロ
    142127 */
    143128#define INDEX_MTX(mtxid)        ((uint_t)((mtxid) - TMIN_MTXID))
     
    145130
    146131/*
    147  *  ミューテックスのプロトコルを判断するマクロ
     132 *  ミューテックスのプロトコルを判断するマクロ
    148133 */
    149134#define MTXPROTO_MASK                   0x03U
     
    154139
    155140/*
    156  *  使用していないミューテックス管理ブロックのリスト
     141 *  使用していないミューテックス管理ブロックのリスト
    157142 */
    158143QUEUE   free_mtxcb;
    159144
    160145/*
    161  *  ミューテックス機能の初期化
     146 *  ミューテックス機能の初期化
    162147 */
    163148void
     
    191176
    192177/*
    193  *  上限優å
    194 ˆåº¦é•åã®ãƒã‚§ãƒƒã‚¯
     178 *  上限優先度違反のチェック
    195179 */
    196180#ifdef TOPPERS_mtxchk
     
    202186
    203187        /*
    204          *  タスクがロックしている優å
    205 ˆåº¦ä¸Šé™ãƒŸãƒ¥ãƒ¼ãƒ†ãƒƒã‚¯ã‚¹ã®ä¸­ã§ï¼Œä¸Šé™å„ªå
    206 ˆ
    207          *  度がbpriorityよりも低いものがあれば,falseを返す.
     188         *  タスクがロックしている優先度上限ミューテックスの中で,上限優先
     189         *  度がbpriorityよりも低いものがあれば,falseを返す.
    208190         */
    209191        p_mtxcb = p_tcb->p_lastmtx;
     
    216198
    217199        /*
    218          *  タスクが優å
    219 ˆåº¦ä¸Šé™ãƒŸãƒ¥ãƒ¼ãƒ†ãƒƒã‚¯ã‚¹ã®ãƒ­ãƒƒã‚¯ã‚’å¾
    220 ã£ã¦ã„る場合に,そ
    221          *  の上限優å
    222 ˆåº¦ãŒbpriorityよりも低くければ,falseを返す.
     200         *  タスクが優先度上限ミューテックスのロックを待っている場合に,そ
     201         *  の上限優先度がbpriorityよりも低くければ,falseを返す.
    223202         */
    224203        if (TSTAT_WAIT_MTX(p_tcb->tstat)) {
     
    230209
    231210        /*
    232          *  いずれの条件にも当てはまらなければtrueを返す.
     211         *  いずれの条件にも当てはまらなければtrueを返す.
    233212         */
    234213        return(true);
     
    238217
    239218/*
    240  *  優å
    241 ˆåº¦ä¸Šé™ãƒŸãƒ¥ãƒ¼ãƒ†ãƒƒã‚¯ã‚¹ã‚’ロックしているかのチェック
     219 *  優先度上限ミューテックスをロックしているかのチェック
    242220 */
    243221#ifdef TOPPERS_mtxscan
     
    261239
    262240/*
    263  *  タスクの現在優å
    264 ˆåº¦ã®è¨ˆç®—
     241 *  タスクの現在優先度の計算
    265242 *
    266  *  p_tcbで指定されるタスクの現在優å
    267 ˆåº¦ï¼ˆã«è¨­å®šã™ã¹ãå€¤ï¼‰ã‚’計算する.
     243 *  p_tcbで指定されるタスクの現在優先度(に設定すべき値)を計算する.
    268244 */
    269245Inline uint_t
     
    285261
    286262/*
    287  *  ミューテックスを解放した場合の現在優å
    288 ˆåº¦å¤‰æ›´å‡¦ç†
     263 *  ミューテックスを解放した場合の現在優先度変更処理
    289264 */
    290265#ifdef TOPPERS_mtxdrop
     
    307282
    308283/*
    309  *  ミューテックスのロック
     284 *  ミューテックスのロック
    310285 */
    311286#ifdef TOPPERS_mtxacq
     
    326301
    327302/*
    328  *  ミューテックスのロック解除
     303 *  ミューテックスのロック解除
    329304 */
    330305#ifdef TOPPERS_mtxrel
     
    340315        else {
    341316                /*
    342                  *  ミューテックスå¾
    343 ã¡ã‚­ãƒ¥ãƒ¼ã®å
    344 ˆé ­ã‚¿ã‚¹ã‚¯ï¼ˆp_tcb)に,ミューテッ
    345                  *  クスをロックさせる.
     317                 *  ミューテックス待ちキューの先頭タスク(p_tcb)に,ミューテッ
     318                 *  クスをロックさせる.
    346319                 */
    347320                p_tcb = (TCB *) queue_delete_next(&(p_mtxcb->wait_queue));
     
    364337
    365338/*
    366  *  タスクがロックしているすべてのミューテックスのロック解除
     339 *  タスクがロックしているすべてのミューテックスのロック解除
    367340 */
    368341#ifdef TOPPERS_mtxrela
     
    382355
    383356/*
    384  *  ミューテックスの生成[NGKI2022ï¼½
     357 *  ミューテックスの生成[NGKI2022]
    385358 */
    386359#ifdef TOPPERS_acre_mtx
     
    396369
    397370        LOG_ACRE_MTX_ENTER(pk_cmtx);
    398         CHECK_TSKCTX_UNL();                                                     /*ï¼»NGKI2023][NGKI2024ï¼½*/
     371        CHECK_TSKCTX_UNL();                                                     /*[NGKI2023][NGKI2024]*/
    399372
    400373        mtxatr = pk_cmtx->mtxatr;
     
    402375
    403376        if (mtxatr == TA_CEILING) {
    404                 CHECK_PAR(VALID_TPRI(ceilpri));                 /*ï¼»NGKI2037ï¼½*/
    405         }
    406         else {
    407                 CHECK_RSATR(mtxatr, TA_TPRI);                   /*ï¼»NGKI2025ï¼½*/
     377                CHECK_PAR(VALID_TPRI(ceilpri));                 /*[NGKI2037]*/
     378        }
     379        else {
     380                CHECK_RSATR(mtxatr, TA_TPRI);                   /*[NGKI2025]*/
    408381        }
    409382
    410383        lock_cpu();
    411384        if (tnum_mtx == 0 || queue_empty(&free_mtxcb)) {
    412                 ercd = E_NOID;                                                  /*ï¼»NGKI2031ï¼½*/
     385                ercd = E_NOID;                                                  /*[NGKI2031]*/
    413386        }
    414387        else {
     
    419392
    420393                queue_initialize(&(p_mtxcb->wait_queue));
    421                 p_mtxcb->p_loctsk = NULL;                               /*ï¼»NGKI2033ï¼½*/
     394                p_mtxcb->p_loctsk = NULL;                               /*[NGKI2033]*/
    422395                ercd = MTXID(p_mtxcb);
    423396        }
     
    432405
    433406/*
    434  *  ミューテックスの削除[NGKI2056ï¼½
     407 *  ミューテックスの削除[NGKI2056]
    435408 */
    436409#ifdef TOPPERS_del_mtx
     
    445418
    446419        LOG_DEL_MTX_ENTER(mtxid);
    447         CHECK_TSKCTX_UNL();                                                     /*ï¼»NGKI2057][NGKI2058ï¼½*/
    448         CHECK_ID(VALID_MTXID(mtxid));                           /*ï¼»NGKI2059ï¼½*/
     420        CHECK_TSKCTX_UNL();                                                     /*[NGKI2057][NGKI2058]*/
     421        CHECK_ID(VALID_MTXID(mtxid));                           /*[NGKI2059]*/
    449422        p_mtxcb = get_mtxcb(mtxid);
    450423
    451424        lock_cpu();
    452425        if (p_mtxcb->p_mtxinib->mtxatr == TA_NOEXS) {
    453                 ercd = E_NOEXS;                                                 /*ï¼»NGKI2060ï¼½*/
     426                ercd = E_NOEXS;                                                 /*[NGKI2060]*/
    454427        }
    455428        else if (mtxid <= tmax_smtxid) {
    456                 ercd = E_OBJ;                                                   /*ï¼»NGKI2062ï¼½*/
    457         }
    458         else {
    459                 init_wait_queue(&(p_mtxcb->wait_queue));        /*ï¼»NGKI2065ï¼½*/
     429                ercd = E_OBJ;                                                   /*[NGKI2062]*/
     430        }
     431        else {
     432                init_wait_queue(&(p_mtxcb->wait_queue));        /*[NGKI2065]*/
    460433                p_loctsk = p_mtxcb->p_loctsk;
    461434                if (p_loctsk != NULL) {
    462435                        /*
    463                          *  p_loctskがロックしているミューテックスのリストから対象
    464                          *  ミュークスを削除し,å¿
    465 è¦ãªå ´åˆã«ã¯p_loctskの現在優å
    466 ˆåº¦
    467                          *  を変更する[NGKI2064].
     436                         *  p_loctskがロックしているミューテックスのリストから対象
     437                         *  ミュークスを削除し,必要な場合にはp_loctskの現在優先度
     438                         *  を変更する[NGKI2064].
    468439                         */
    469440                        pp_prevmtx = &(p_loctsk->p_lastmtx);
     
    478449                }
    479450                p_mtxinib = (MTXINIB *)(p_mtxcb->p_mtxinib);
    480                 p_mtxinib->mtxatr = TA_NOEXS;                                           /*ï¼»NGKI2063ï¼½*/
     451                p_mtxinib->mtxatr = TA_NOEXS;                                           /*[NGKI2063]*/
    481452                queue_insert_prev(&free_mtxcb, &(p_mtxcb->wait_queue));
    482453                if (p_runtsk != p_schedtsk) {
     
    495466
    496467/*
    497  *  ミューテックスのロック
     468 *  ミューテックスのロック
    498469 */
    499470#ifdef TOPPERS_loc_mtx
     
    525496                mutex_acquire(p_runtsk, p_mtxcb);
    526497                /*
    527                  *  優å
    528 ˆåº¦ä¸Šé™ãƒŸãƒ¥ãƒ¼ãƒ†ãƒƒã‚¯ã‚¹ã‚’ロックした場合,p_runtskの優å
    529 ˆåº¦
    530                  *  が上がる可能性があるが,ディスパッチがå¿
    531 è¦ã«ãªã‚‹ã“とはない.
     498                 *  優先度上限ミューテックスをロックした場合,p_runtskの優先度
     499                 *  が上がる可能性があるが,ディスパッチが必要になることはない.
    532500                 */
    533501                assert(p_runtsk == p_schedtsk);
     
    553521
    554522/*
    555  *  ミューテックスのロック(ポーリング)
     523 *  ミューテックスのロック(ポーリング)
    556524 */
    557525#ifdef TOPPERS_ploc_mtx
     
    579547                mutex_acquire(p_runtsk, p_mtxcb);
    580548                /*
    581                  *  優å
    582 ˆåº¦ä¸Šé™ãƒŸãƒ¥ãƒ¼ãƒ†ãƒƒã‚¯ã‚¹ã‚’ロックした場合,p_runtskの優å
    583 ˆåº¦
    584                  *  が上がる可能性があるが,ディスパッチがå¿
    585 è¦ã«ãªã‚‹ã“とはない.
     549                 *  優先度上限ミューテックスをロックした場合,p_runtskの優先度
     550                 *  が上がる可能性があるが,ディスパッチが必要になることはない.
    586551                 */
    587552                assert(p_runtsk == p_schedtsk);
     
    604569
    605570/*
    606  *  ミューテックスのロック(タイムアウトあり)
     571 *  ミューテックスのロック(タイムアウトあり)
    607572 */
    608573#ifdef TOPPERS_tloc_mtx
     
    636601                mutex_acquire(p_runtsk, p_mtxcb);
    637602                /*
    638                  *  優å
    639 ˆåº¦ä¸Šé™ãƒŸãƒ¥ãƒ¼ãƒ†ãƒƒã‚¯ã‚¹ã‚’ロックした場合,p_runtskの優å
    640 ˆåº¦
    641                  *  が上がる可能性があるが,ディスパッチがå¿
    642 è¦ã«ãªã‚‹ã“とはない.
     603                 *  優先度上限ミューテックスをロックした場合,p_runtskの優先度
     604                 *  が上がる可能性があるが,ディスパッチが必要になることはない.
    643605                 */
    644606                assert(p_runtsk == p_schedtsk);
     
    668630
    669631/*
    670  *  ミューテックスのロック解除
     632 *  ミューテックスのロック解除
    671633 */
    672634#ifdef TOPPERS_unl_mtx
     
    709671
    710672/*
    711  *  ミューテックスの再初期化
     673 *  ミューテックスの再初期化
    712674 */
    713675#ifdef TOPPERS_ini_mtx
     
    759721
    760722/*
    761  *  ミューテックスの状æ
    762 ‹å‚ç
    763 §
     723 *  ミューテックスの状態参照
    764724 */
    765725#ifdef TOPPERS_ref_mtx
Note: See TracChangeset for help on using the changeset viewer.