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

    • Property svn:keywords deleted
    • Property svn:mime-type changed from text/x-chdr to text/x-chdr;charset=UTF-8
    r388 r389  
    99 *              Graduate School of Information Science, Nagoya Univ., JAPAN
    1010 *
    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 è²¬ã™ã‚‹ã“と.
    47  *
    48  *  本ソフトウェアは,無保証で提供されているものである.上記著作権è€
    49 ãŠ
    50  *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
    51  *  に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
    52  *  アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
    53  *  の責任を負わない.
     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 *      免責すること.
     33 *
     34 *  本ソフトウェアは,無保証で提供されているものである.上記著作権者お
     35 *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
     36 *  に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
     37 *  アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
     38 *  の責任を負わない.
    5439 *
    5540 *  $Id$
     
    5742
    5843/*
    59  *              å¾
    60 ã¡çŠ¶æ
    61 ‹ç®¡ç†ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«
     44 *              待ち状態管理モジュール
    6245 */
    6346
     
    7154
    7255/*
    73  *  タスクの優å
    74 ˆåº¦é †ã®å¾
    75 ã¡ã‚­ãƒ¥ãƒ¼ã¸ã®æŒ¿å
    76 ¥
    77  *
    78  *  p_tcbで指定されるタスクを,タスク優å
    79 ˆåº¦é †ã®ã‚­ãƒ¥ãƒ¼p_queueに挿å
    80 ¥ã™ã‚‹ï¼Ž
    81  *  キューの中に同じ優å
    82 ˆåº¦ã®ã‚¿ã‚¹ã‚¯ãŒã‚る場合には,その最後に挿å
    83 ¥ã™ã‚‹ï¼Ž
     56 *  タスクの優先度順の待ちキューへの挿入
     57 *
     58 *  p_tcbで指定されるタスクを,タスク優先度順のキューp_queueに挿入する.
     59 *  キューの中に同じ優先度のタスクがある場合には,その最後に挿入する.
    8460 */
    8561Inline void
     
    9975
    10076/*
    101  *  å¾
    102 ã¡çŠ¶æ
    103 ‹ã¸ã®é·ç§»
    104  *
    105  *  実行中のタスクをå¾
    106 ã¡çŠ¶æ
    107 ‹ã«é·ç§»ã•ã›ã‚‹ï¼Žå
    108 ·ä½“的には,実行中のタスクを
    109  *  レディキューから削除し,TCBのp_winfoフィールド,WINFOのp_tmevtbフィー
    110  *  ルドを設定する.
     77 *  待ち状態への遷移
     78 *
     79 *  実行中のタスクを待ち状態に遷移させる.具体的には,実行中のタスクを
     80 *  レディキューから削除し,TCBのp_winfoフィールド,WINFOのp_tmevtbフィー
     81 *  ルドを設定する.
    11182 */
    11283Inline void
     
    11990
    12091/*
    121  *  å¾
    122 ã¡çŠ¶æ
    123 ‹ã¸ã®é·ç§»ï¼ˆã‚¿ã‚¤ãƒ ã‚¢ã‚¦ãƒˆæŒ‡å®šï¼‰
    124  *
    125  *  実行中のタスクを,タイムアウト指定付きでå¾
    126 ã¡çŠ¶æ
    127 ‹ã«é·ç§»ã•ã›ã‚‹ï¼Žå
    128 ·ä½“
    129  *  的には,実行中のタスクをレディキューから削除し,TCBのp_winfoフィー
    130  *  ルド,WINFOのp_tmevtbフィールドを設定する.また,タイムイベントブ
    131  *  ロックを登録する.
     92 *  待ち状態への遷移(タイムアウト指定)
     93 *
     94 *  実行中のタスクを,タイムアウト指定付きで待ち状態に遷移させる.具体
     95 *  的には,実行中のタスクをレディキューから削除し,TCBのp_winfoフィー
     96 *  ルド,WINFOのp_tmevtbフィールドを設定する.また,タイムイベントブ
     97 *  ロックを登録する.
    13298 */
    13399extern void     make_wait_tmout(WINFO *p_winfo, TMEVTB *p_tmevtb, TMO tmout);
    134100
    135101/*
    136  *  å¾
    137 ã¡è§£é™¤ã®ãŸã‚ã®ã‚¿ã‚¹ã‚¯çŠ¶æ
    138 ‹ã®æ›´æ–°
    139  *
    140  *  p_tcbで指定されるタスクを,å¾
    141 ã¡è§£é™¤ã™ã‚‹ã‚ˆã†ã‚¿ã‚¹ã‚¯çŠ¶æ
    142 ‹ã‚’更新する.
    143  *  å¾
    144 ã¡è§£é™¤ã™ã‚‹ã‚¿ã‚¹ã‚¯ãŒå®Ÿè¡Œã§ãã‚‹çŠ¶æ
    145 ‹ã«ãªã‚‹å ´åˆã¯ï¼Œãƒ¬ãƒ‡ã‚£ã‚­ãƒ¥ãƒ¼ã«ã¤ãª
    146  *  ぐ.
     102 *  待ち解除のためのタスク状態の更新
     103 *
     104 *  p_tcbで指定されるタスクを,待ち解除するようタスク状態を更新する.
     105 *  待ち解除するタスクが実行できる状態になる場合は,レディキューにつな
     106 *  ぐ.
    147107 */
    148108Inline void
     
    153113        if (!TSTAT_SUSPENDED(p_tcb->tstat)) {
    154114                /*
    155                  *  å¾
    156 ã¡çŠ¶æ
    157 ‹ã‹ã‚‰å®Ÿè¡Œã§ãã‚‹çŠ¶æ
    158 ‹ã¸ã®é·ç§»
     115                 *  待ち状態から実行できる状態への遷移
    159116                 */
    160117                p_tcb->tstat = TS_RUNNABLE;
     
    164121        else {
    165122                /*
    166                  *  二重å¾
    167 ã¡çŠ¶æ
    168 ‹ã‹ã‚‰å¼·åˆ¶å¾
    169 ã¡çŠ¶æ
    170 ‹ã¸ã®é·ç§»
     123                 *  二重待ち状態から強制待ち状態への遷移
    171124                 */
    172125                p_tcb->tstat = TS_SUSPENDED;
     
    176129
    177130/*
    178  *  オブジェクトå¾
    179 ã¡ã‚­ãƒ¥ãƒ¼ã‹ã‚‰ã®å‰Šé™¤
    180  *
    181  *  p_tcbで指定されるタスクが,同期・通信オブジェクトのå¾
    182 ã¡ã‚­ãƒ¥ãƒ¼ã«ã¤
    183  *  ながれていれば,å¾
    184 ã¡ã‚­ãƒ¥ãƒ¼ã‹ã‚‰å‰Šé™¤ã™ã‚‹ï¼Ž
     131 *  オブジェクト待ちキューからの削除
     132 *
     133 *  p_tcbで指定されるタスクが,同期・通信オブジェクトの待ちキューにつ
     134 *  ながれていれば,待ちキューから削除する.
    185135 */
    186136Inline void
     
    193143
    194144/*
    195  *  時間å¾
    196 ã¡ã®ãŸã‚ã®ã‚¿ã‚¤ãƒ ã‚¤ãƒ™ãƒ³ãƒˆãƒ–ロックの登録解除
    197  *
    198  *  p_tcbで指定されるタスクに対して,時間å¾
    199 ã¡ã®ãŸã‚ã®ã‚¿ã‚¤ãƒ ã‚¤ãƒ™ãƒ³ãƒˆãƒ–
    200  *  ロックが登録されていれば,それを登録解除する.
     145 *  時間待ちのためのタイムイベントブロックの登録解除
     146 *
     147 *  p_tcbで指定されるタスクに対して,時間待ちのためのタイムイベントブ
     148 *  ロックが登録されていれば,それを登録解除する.
    201149 */
    202150Inline void
     
    209157
    210158/*
    211  *  å¾
    212 ã¡è§£é™¤
    213  *
    214  *  p_tcbで指定されるタスクのå¾
    215 ã¡çŠ¶æ
    216 ‹ã‚’解除する.å
    217 ·ä½“的には,タイムイ
    218  *  ベントブロックが登録されていれば,それを登録解除する.また,タスク
    219  *  状æ
    220 ‹ã‚’更新し,å¾
    221 ã¡è§£é™¤ã—たタスクからの返値をE_OKとする.å¾
    222 ã¡ã‚­ãƒ¥ãƒ¼
    223  *  からの削除は行わない.
     159 *  待ち解除
     160 *
     161 *  p_tcbで指定されるタスクの待ち状態を解除する.具体的には,タイムイ
     162 *  ベントブロックが登録されていれば,それを登録解除する.また,タスク
     163 *  状態を更新し,待ち解除したタスクからの返値をE_OKとする.待ちキュー
     164 *  からの削除は行わない.
    224165 */
    225166extern void     wait_complete(TCB *p_tcb);
    226167
    227168/*
    228  *  タイムアウトに伴うå¾
    229 ã¡è§£é™¤
    230  *
    231  *  p_tcbで指定されるタスクが,å¾
    232 ã¡ã‚­ãƒ¥ãƒ¼ã«ã¤ãªãŒã‚Œã¦ã„ればå¾
    233 ã¡ã‚­ãƒ¥ãƒ¼
    234  *  から削除し,タスク状æ
    235 ‹ã‚’更新する.また,å¾
    236 ã¡è§£é™¤ã—たタスクからの返
    237  *  値を,wait_tmoutではE_TMOUT,wait_tmout_okではE_OKとする.
    238  *
    239  *  wait_tmout_okは,dly_tskで使うためのもので,å¾
    240 ã¡ã‚­ãƒ¥ãƒ¼ã‹ã‚‰å‰Šé™¤ã™ã‚‹
    241  *  処理を行わない.
    242  *
    243  *  いずれの関数も,タイムイベントのコールバック関数として用いるための
    244  *  もので,割込みハンドラから呼び出されることを想定している.
     169 *  タイムアウトに伴う待ち解除
     170 *
     171 *  p_tcbで指定されるタスクが,待ちキューにつながれていれば待ちキュー
     172 *  から削除し,タスク状態を更新する.また,待ち解除したタスクからの返
     173 *  値を,wait_tmoutではE_TMOUT,wait_tmout_okではE_OKとする.
     174 *
     175 *  wait_tmout_okは,dly_tskで使うためのもので,待ちキューから削除する
     176 *  処理を行わない.
     177 *
     178 *  いずれの関数も,タイムイベントのコールバック関数として用いるための
     179 *  もので,割込みハンドラから呼び出されることを想定している.
    245180 */
    246181extern void     wait_tmout(TCB *p_tcb);
     
    248183
    249184/*
    250  *  å¾
    251 ã¡ã‚­ãƒ¥ãƒ¼ã®å
    252 ˆé ­ã®ã‚¿ã‚¹ã‚¯ID
    253  *
    254  *  p_wait_queueで指定したå¾
    255 ã¡ã‚­ãƒ¥ãƒ¼ã®å
    256 ˆé ­ã®ã‚¿ã‚¹ã‚¯IDを返す.å¾
    257 ã¡ã‚­ãƒ¥ãƒ¼
    258  *  が空の場合には,TSK_NONEを返す.
     185 *  待ちキューの先頭のタスクID
     186 *
     187 *  p_wait_queueで指定した待ちキューの先頭のタスクIDを返す.待ちキュー
     188 *  が空の場合には,TSK_NONEを返す.
    259189 */
    260190Inline ID
     
    270200
    271201/*
    272  *  同期・通信オブジェクトの管理ブロックのå
    273 ±é€šéƒ¨åˆ†æ“ä½œãƒ«ãƒ¼ãƒãƒ³
    274  *
    275  *  同期・通信オブジェクトの初期化ブロックと管理ブロックのå
    276 ˆé ­éƒ¨åˆ†ã¯å
    277 ±
    278  *  通になっている.以下は,そのå
    279 ±é€šéƒ¨åˆ†ã‚’扱うための型およびルーチン群
    280  *  である.
    281  *
    282  *  複数のå¾
    283 ã¡ã‚­ãƒ¥ãƒ¼ã‚’持つ同期・通信オブジェクトの場合,å
    284 ˆé ­ä»¥å¤–のå¾
    285 ã¡
    286  *  キューを操作する場合には,これらのルーチンは使えない.また,オブジェ
    287  *  クト属性のTA_TPRIビットを参ç
    288 §ã™ã‚‹ã®ã§ï¼Œã“のビットを他の目的に使って
    289  *  いる場合も,これらのルーチンは使えない.
    290  */
    291 
    292 /*
    293  *  同期・通信オブジェクトの初期化ブロックのå
    294 ±é€šéƒ¨åˆ†
     202 *  同期・通信オブジェクトの管理ブロックの共通部分操作ルーチン
     203 *
     204 *  同期・通信オブジェクトの初期化ブロックと管理ブロックの先頭部分は共
     205 *  通になっている.以下は,その共通部分を扱うための型およびルーチン群
     206 *  である.
     207 *
     208 *  複数の待ちキューを持つ同期・通信オブジェクトの場合,先頭以外の待ち
     209 *  キューを操作する場合には,これらのルーチンは使えない.また,オブジェ
     210 *  クト属性のTA_TPRIビットを参照するので,このビットを他の目的に使って
     211 *  いる場合も,これらのルーチンは使えない.
     212 */
     213
     214/*
     215 *  同期・通信オブジェクトの初期化ブロックの共通部分
    295216 */
    296217typedef struct wait_object_initialization_block {
    297         ATR                     wobjatr;                /* オブジェクト属性 */
     218        ATR                     wobjatr;                /* オブジェクト属性 */
    298219} WOBJINIB;
    299220
    300221/*
    301  *  同期・通信オブジェクトの管理ブロックのå
    302 ±é€šéƒ¨åˆ†
     222 *  同期・通信オブジェクトの管理ブロックの共通部分
    303223 */
    304224typedef struct wait_object_control_block {
    305         QUEUE           wait_queue;             /* å¾
    306 ã¡ã‚­ãƒ¥ãƒ¼ */
    307         const WOBJINIB *p_wobjinib;     /* 初期化ブロックへのポインタ */
     225        QUEUE           wait_queue;             /* 待ちキュー */
     226        const WOBJINIB *p_wobjinib;     /* 初期化ブロックへのポインタ */
    308227} WOBJCB;
    309228
    310229/*
    311  *  同期・通信オブジェクトのå¾
    312 ã¡æƒ
    313 å ±ãƒ–ロックのå
    314 ±é€šéƒ¨åˆ†
    315  *
    316  *  この構造体は,å¾
    317 ã¡æƒ
    318 å ±ãƒ–ロック(WINFO)を拡張(オブジェクト指向言
    319  *  語の継承に相当)したものであるが,WINFOがå
    320 ±ç”¨ä½“で定義されているた
    321  *  めに,1つのフィールドとして含めている.
     230 *  同期・通信オブジェクトの待ち情報ブロックの共通部分
     231 *
     232 *  この構造体は,待ち情報ブロック(WINFO)を拡張(オブジェクト指向言
     233 *  語の継承に相当)したものであるが,WINFOが共用体で定義されているた
     234 *  めに,1つのフィールドとして含めている.
    322235 */
    323236typedef struct wait_object_waiting_information {
    324         WINFO   winfo;                  /* 標準のå¾
    325 ã¡æƒ
    326 å ±ãƒ–ロック */
    327         WOBJCB  *p_wobjcb;              /* å¾
    328 ã¡ã‚ªãƒ–ジェクトの管理ブロック */
     237        WINFO   winfo;                  /* 標準の待ち情報ブロック */
     238        WOBJCB  *p_wobjcb;              /* 待ちオブジェクトの管理ブロック */
    329239} WINFO_WOBJ;
    330240
    331241/*
    332  *  同期・通信オブジェクトに対するå¾
    333 ã¡çŠ¶æ
    334 ‹ã¸ã®é·ç§»
     242 *  同期・通信オブジェクトに対する待ち状態への遷移
    335243 * 
    336  *  実行中のタスクをå¾
    337 ã¡çŠ¶æ
    338 ‹ã«é·ç§»ã•ã›ï¼ŒåŒæœŸãƒ»é€šä¿¡ã‚ªãƒ–ジェクトのå¾
    339 ã¡ã‚­ãƒ¥ãƒ¼
    340  *  につなぐ.また,å¾
    341 ã¡æƒ
    342 å ±ãƒ–ロック(WINFO)のp_wobjcbを設定する.
    343  *  wobj_make_wait_tmoutは,タイムイベントブロックの登録も行う.
     244 *  実行中のタスクを待ち状態に遷移させ,同期・通信オブジェクトの待ちキュー
     245 *  につなぐ.また,待ち情報ブロック(WINFO)のp_wobjcbを設定する.
     246 *  wobj_make_wait_tmoutは,タイムイベントブロックの登録も行う.
    344247 */
    345248extern void     wobj_make_wait(WOBJCB *p_wobjcb, WINFO_WOBJ *p_winfo);
     
    348251
    349252/*
    350  *  タスク優å
    351 ˆåº¦å¤‰æ›´æ™‚の処理
    352  *
    353  *  同期・通信オブジェクトに対するå¾
    354 ã¡çŠ¶æ
    355 ‹ã«ã‚るタスクの優å
    356 ˆåº¦ãŒå¤‰æ›´ã•
    357  *  れた場合に,å¾
    358 ã¡ã‚­ãƒ¥ãƒ¼ã®ä¸­ã§ã®ã‚¿ã‚¹ã‚¯ã®ä½ç½®ã‚’修正する.
     253 *  タスク優先度変更時の処理
     254 *
     255 *  同期・通信オブジェクトに対する待ち状態にあるタスクの優先度が変更さ
     256 *  れた場合に,待ちキューの中でのタスクの位置を修正する.
    359257 */
    360258Inline void
     
    368266
    369267/*
    370  *  å¾
    371 ã¡ã‚­ãƒ¥ãƒ¼ã®åˆæœŸåŒ–
    372  *
    373  *  å¾
    374 ã¡ã‚­ãƒ¥ãƒ¼ã«ã¤ãªãŒã‚Œã¦ã„るタスクをすべてå¾
    375 ã¡è§£é™¤ã™ã‚‹ï¼Žå¾
    376 ã¡è§£é™¤ã—た
    377  *  タスクからの返値は,E_DLTとする.
     268 *  待ちキューの初期化
     269 *
     270 *  待ちキューにつながれているタスクをすべて待ち解除する.待ち解除した
     271 *  タスクからの返値は,E_DLTとする.
    378272 */
    379273extern void     init_wait_queue(QUEUE *p_wait_queue);
Note: See TracChangeset for help on using the changeset viewer.