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.h

    • Property svn:keywords deleted
    • Property svn:mime-type changed from text/x-chdr to text/x-chdr;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 *
    70  *  この構造体は,同期・通信オブジェクトの初期化ブロックのå
    71 ±é€šéƒ¨åˆ†
    72  *  (WOBJINIB)を拡張(オブジェクト指向言語の継承に相当)したもので,
    73  *  最初のフィールドがå
    74 ±é€šã«ãªã£ã¦ã„る.
     55 *  この構造体は,同期・通信オブジェクトの初期化ブロックの共通部分
     56 *  (WOBJINIB)を拡張(オブジェクト指向言語の継承に相当)したもので,
     57 *  最初のフィールドが共通になっている.
    7558 */
    7659typedef struct mutex_initialization_block {
    77         ATR                     mtxatr;                 /* ミューテックス属性 */
    78         uint_t          ceilpri;                /* ミューテックスの上限優å
    79 ˆåº¦ï¼ˆå†
    80 éƒ¨è¡¨ç¾ï¼‰*/
     60        ATR                     mtxatr;                 /* ミューテックス属性 */
     61        uint_t          ceilpri;                /* ミューテックスの上限優先度(内部表現)*/
    8162} MTXINIB;
    8263
    8364/*
    84  *  ミューテックス管理ブロック
     65 *  ミューテックス管理ブロック
    8566 *
    86  *  この構造体は,同期・通信オブジェクトの管理ブロックのå
    87 ±é€šéƒ¨åˆ†ï¼ˆWOBJCB)
    88  *  を拡張(オブジェクト指向言語の継承に相当)したもので,最初の2つの
    89  *  フィールドがå
    90 ±é€šã«ãªã£ã¦ã„る.
     67 *  この構造体は,同期・通信オブジェクトの管理ブロックの共通部分(WOBJCB)
     68 *  を拡張(オブジェクト指向言語の継承に相当)したもので,最初の2つの
     69 *  フィールドが共通になっている.
    9170 */
    9271struct mutex_control_block {
    93         QUEUE           wait_queue;             /* ミューテックスå¾
    94 ã¡ã‚­ãƒ¥ãƒ¼ */
    95         const MTXINIB *p_mtxinib;       /* 初期化ブロックへのポインタ */
    96         TCB                     *p_loctsk;              /* ミューテックスをロックしているタスク */
    97         MTXCB           *p_prevmtx;             /* この前にロックしたミューテックス */
     72        QUEUE           wait_queue;             /* ミューテックス待ちキュー */
     73        const MTXINIB *p_mtxinib;       /* 初期化ブロックへのポインタ */
     74        TCB                     *p_loctsk;              /* ミューテックスをロックしているタスク */
     75        MTXCB           *p_prevmtx;             /* この前にロックしたミューテックス */
    9876};
    9977
    10078/*
    101  *  ミューテックスå¾
    102 ã¡æƒ
    103 å ±ãƒ–ロックの定義
     79 *  ミューテックス待ち情報ブロックの定義
    10480 *
    105  *  この構造体は,同期・通信オブジェクトのå¾
    106 ã¡æƒ
    107 å ±ãƒ–ロックのå
    108 ±é€šéƒ¨åˆ†
    109  *  (WINFO_WOBJ)を拡張(オブジェクト指向言語の継承に相当)したもので,
    110  *  すべてのフィールドがå
    111 ±é€šã«ãªã£ã¦ã„る.
     81 *  この構造体は,同期・通信オブジェクトの待ち情報ブロックの共通部分
     82 *  (WINFO_WOBJ)を拡張(オブジェクト指向言語の継承に相当)したもので,
     83 *  すべてのフィールドが共通になっている.
    11284 */
    11385typedef struct mutex_waiting_information {
    114         WINFO   winfo;                  /* 標準のå¾
    115 ã¡æƒ
    116 å ±ãƒ–ロック */
    117         MTXCB   *p_mtxcb;               /* å¾
    118 ã£ã¦ã„るミューテックスの管理ブロック */
     86        WINFO   winfo;                  /* 標準の待ち情報ブロック */
     87        MTXCB   *p_mtxcb;               /* 待っているミューテックスの管理ブロック */
    11988} WINFO_MTX;
    12089
    12190/*
    122  *  使用していないミューテックス管理ブロックのリスト
     91 *  使用していないミューテックス管理ブロックのリスト
    12392 */
    12493extern QUEUE    free_mtxcb;
    12594
    12695/*
    127  *  ミューテックスIDの最大値(kernel_cfg.c)
     96 *  ミューテックスIDの最大値(kernel_cfg.c)
    12897 */
    12998extern const ID tmax_mtxid;
     
    131100
    132101/*
    133  *  ミューテックス初期化ブロックのエリア(kernel_cfg.c)
     102 *  ミューテックス初期化ブロックのエリア(kernel_cfg.c)
    134103 */
    135104extern const MTXINIB    mtxinib_table[];
     
    137106
    138107/*
    139  *  ミューテックス管理ブロックのエリア(kernel_cfg.c)
     108 *  ミューテックス管理ブロックのエリア(kernel_cfg.c)
    140109 */
    141110extern MTXCB    mtxcb_table[];
    142111
    143112/*
    144  *  ミューテックス管理ブロックからミューテックスIDを取り出すためのマクロ
     113 *  ミューテックス管理ブロックからミューテックスIDを取り出すためのマクロ
    145114 */
    146115#define MTXID(p_mtxcb)  ((ID)(((p_mtxcb) - mtxcb_table) + TMIN_MTXID))
    147116
    148117/*
    149  *  ミューテックス機能の初期化
     118 *  ミューテックス機能の初期化
    150119 */
    151120extern void     initialize_mutex(void);
    152121
    153122/*
    154  *  上限優å
    155 ˆåº¦é•åã®ãƒã‚§ãƒƒã‚¯
     123 *  上限優先度違反のチェック
    156124 *
    157  *  chg_priの中で上限優å
    158 ˆåº¦é•åã®ãƒã‚§ãƒƒã‚¯ã‚’行うために用いる関数であり,
    159  *  p_tcbで指定されるタスクがロックしている優å
    160 ˆåº¦ä¸Šé™ãƒŸãƒ¥ãƒ¼ãƒ†ãƒƒã‚¯ã‚¹ã¨ï¼Œ
    161  *  ロックをå¾
    162 ã£ã¦ã„る優å
    163 ˆåº¦ä¸Šé™ãƒŸãƒ¥ãƒ¼ãƒ†ãƒƒã‚¯ã‚¹ã®ä¸­ã§ï¼Œä¸Šé™å„ªå
    164 ˆåº¦ãŒ
    165  *  bpriorityよりも低いものがあればfalseを,そうでなければtrueを返す.
     125 *  chg_priの中で上限優先度違反のチェックを行うために用いる関数であり,
     126 *  p_tcbで指定されるタスクがロックしている優先度上限ミューテックスと,
     127 *  ロックを待っている優先度上限ミューテックスの中で,上限優先度が
     128 *  bpriorityよりも低いものがあればfalseを,そうでなければtrueを返す.
    166129 */
    167130extern bool_t   mutex_check_ceilpri(TCB *p_tcb, uint_t bpriority);
    168131
    169132/*
    170  *  優å
    171 ˆåº¦ä¸Šé™ãƒŸãƒ¥ãƒ¼ãƒ†ãƒƒã‚¯ã‚¹ã‚’ロックしているかのチェック
     133 *  優先度上限ミューテックスをロックしているかのチェック
    172134 *
    173  *  p_tcbで指定されるタスクが優å
    174 ˆåº¦ä¸Šé™ãƒŸãƒ¥ãƒ¼ãƒ†ãƒƒã‚¯ã‚¹ã‚’ロックしていれば
    175  *  true,そうでなければfalseを返す.
     135 *  p_tcbで指定されるタスクが優先度上限ミューテックスをロックしていれば
     136 *  true,そうでなければfalseを返す.
    176137 */
    177138extern bool_t   mutex_scan_ceilmtx(TCB *p_tcb);
    178139
    179140/*
    180  *  ミューテックスをロック解除した場合の現在優å
    181 ˆåº¦å¤‰æ›´å‡¦ç†
     141 *  ミューテックスをロック解除した場合の現在優先度変更処理
    182142 *
    183  *  p_tcbで指定されるタスクが,p_mtxcbで指定されるミューテックスをロッ
    184  *  ク解除した際の現在優å
    185 ˆåº¦å¤‰æ›´å‡¦ç†ã‚’行う.
     143 *  p_tcbで指定されるタスクが,p_mtxcbで指定されるミューテックスをロッ
     144 *  ク解除した際の現在優先度変更処理を行う.
    186145 */
    187146extern void     mutex_drop_priority(TCB *p_tcb, MTXCB *p_mtxcb);
    188147
    189148/*
    190  *  ミューテックスのロック
     149 *  ミューテックスのロック
    191150 *
    192  *  p_tcbで指定されるタスクに,p_mtxcbで指定されるミューテックスをロッ
    193  *  クさせる.
     151 *  p_tcbで指定されるタスクに,p_mtxcbで指定されるミューテックスをロッ
     152 *  クさせる.
    194153 */
    195154extern void     mutex_acquire(TCB *p_tcb, MTXCB *p_mtxcb);
    196155
    197156/*
    198  *  ミューテックスのロック解除
     157 *  ミューテックスのロック解除
    199158 *
    200  *  p_mtxcbで指定されるミューテックスをロック解除する.ロック解除した
    201  *  ミューテックスに,ロックå¾
    202 ã¡çŠ¶æ
    203 ‹ã®ã‚¿ã‚¹ã‚¯ãŒã‚る場合には,そのタスク
    204  *  にミューテックスをロックさせる.
     159 *  p_mtxcbで指定されるミューテックスをロック解除する.ロック解除した
     160 *  ミューテックスに,ロック待ち状態のタスクがある場合には,そのタスク
     161 *  にミューテックスをロックさせる.
    205162 */
    206163extern void     mutex_release(MTXCB *p_mtxcb);
    207164
    208165/*
    209  *  タスクがロックしているすべてのミューテックスのロック解除
     166 *  タスクがロックしているすべてのミューテックスのロック解除
    210167 *
    211  *  p_tcbで指定されるタスクに,それがロックしているすべてのミューテック
    212  *  スをロック解除させる.ロック解除したミューテックスに,ロックå¾
    213 ã¡çŠ¶
    214  *  æ
    215 ‹ã®ã‚¿ã‚¹ã‚¯ãŒã‚る場合には,そのタスクにミューテックスをロックさせる.
     168 *  p_tcbで指定されるタスクに,それがロックしているすべてのミューテック
     169 *  スをロック解除させる.ロック解除したミューテックスに,ロック待ち状
     170 *  態のタスクがある場合には,そのタスクにミューテックスをロックさせる.
    216171 *
    217  *  この関数は,タスクの終了時に使われるものであるため,p_tcbで指定され
    218  *  るタスクの優å
    219 ˆåº¦ã‚’変更する処理は行わない.ただし,この関数の中で他
    220  *  のタスクの優å
    221 ˆåº¦ãŒå¤‰åŒ–し,実行すべきタスクが変わることがある.その
    222  *  ため,この関数から戻った後に,ディスパッチがå¿
    223 è¦ã‹åˆ¤åˆ¥ã—て,å¿
    224 è¦ãª
    225  *  場合にはディスパッチを行わなければならない.
     172 *  この関数は,タスクの終了時に使われるものであるため,p_tcbで指定され
     173 *  るタスクの優先度を変更する処理は行わない.ただし,この関数の中で他
     174 *  のタスクの優先度が変化し,実行すべきタスクが変わることがある.その
     175 *  ため,この関数から戻った後に,ディスパッチが必要か判別して,必要な
     176 *  場合にはディスパッチを行わなければならない.
    226177 */
    227178extern void     mutex_release_all(TCB *p_tcb);
Note: See TracChangeset for help on using the changeset viewer.