Ignore:
Timestamp:
Aug 23, 2017, 9:27:43 AM (7 years ago)
Author:
coas-nagasima
Message:

文字コードを設定

File:
1 edited

Legend:

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

    • Property svn:keywords deleted
    • Property svn:mime-type changed from text/x-csrc to text/x-csrc;charset=UTF-8
    r270 r321  
    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 è²¬ã™ã‚‹ã“と.
     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 *      免責すること.
    4733 *
    48  *  本ソフトウェアは,無保証で提供されているものである.上記著作権è€
    49 ãŠ
    50  *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
    51  *  に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
    52  *  アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
    53  *  の責任を負わない.
     34 *  本ソフトウェアは,無保証で提供されているものである.上記著作権者お
     35 *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
     36 *  に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
     37 *  アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
     38 *  の責任を負わない.
    5439 *
    5540 *  $Id$
     
    5742
    5843/*
    59  *              タスク管理モジュール
     44 *              タスク管理モジュール
    6045 */
    6146
     
    6853
    6954/*
    70  *  実行状æ
    71 ‹ã®ã‚¿ã‚¹ã‚¯
     55 *  実行状態のタスク
    7256 */
    7357TCB             *p_runtsk;
    7458
    7559/*
    76  *  実行すべきタスク
     60 *  実行すべきタスク
    7761 */
    7862TCB             *p_schedtsk;
    7963
    8064/*
    81  *  ディスパッチ許可状æ
    82 ‹
     65 *  ディスパッチ許可状態
    8366 */
    8467bool_t  enadsp;
    8568
    8669/*
    87  *  タスクディスパッチ可能状æ
    88 ‹
     70 *  タスクディスパッチ可能状態
    8971 */
    9072bool_t  dspflg;
    9173
    9274/*
    93  *  レディキュー
     75 *  レディキュー
    9476 */
    9577QUEUE   ready_queue[TNUM_TPRI];
    9678
    9779/*
    98  *  レディキューサーチのためのビットマップ
     80 *  レディキューサーチのためのビットマップ
    9981 */
    10082uint16_t        ready_primap;
    10183
    10284/*
    103  *  使用していないTCBのリスト
     85 *  使用していないTCBのリスト
    10486 */
    10587QUEUE   free_tcb;
    10688
    10789/*
    108  *  タスク管理モジュールの初期化
     90 *  タスク管理モジュールの初期化
    10991 */
    11092void
     
    148130
    149131/*
    150  *  ビットマップサーチ関数
    151  *
    152  *  bitmapå†
    153 ã®1のビットのå†
    154 ï¼Œæœ€ã‚‚下位(右)のものをサーチし,そのビッ
    155  *  ト番号を返す.ビット番号は,最下位ビットを0とする.bitmapに0を指定
    156  *  してはならない.この関数では,bitmapが16ビットであることを仮定し,
    157  *  uint16_t型としている.
    158  *
    159  *  ビットサーチ命令を持つプロセッサでは,ビットサーチ命令を使うように
    160  *  書き直した方が効率が良い場合がある.このような場合には,ターゲット
    161  *  依存部でビットサーチ命令を使ったbitmap_searchを定義し,
    162  *  OMIT_BITMAP_SEARCHをマクロ定義すればよい.また,ビットサーチ命令の
    163  *  サーチ方向が逆などの理由で優å
    164 ˆåº¦ã¨ãƒ“ットとの対応を変更したい場合に
    165  *  は,PRIMAP_BITをマクロ定義すればよい.
    166  *
    167  *  また,ライブラリにffsがあるなら,次のように定義してライブラリ関数を
    168  *  使った方が効率が良い可能性もある.
     132 *  ビットマップサーチ関数
     133 *
     134 *  bitmap内の1のビットの内,最も下位(右)のものをサーチし,そのビッ
     135 *  ト番号を返す.ビット番号は,最下位ビットを0とする.bitmapに0を指定
     136 *  してはならない.この関数では,bitmapが16ビットであることを仮定し,
     137 *  uint16_t型としている.
     138 *
     139 *  ビットサーチ命令を持つプロセッサでは,ビットサーチ命令を使うように
     140 *  書き直した方が効率が良い場合がある.このような場合には,ターゲット
     141 *  依存部でビットサーチ命令を使ったbitmap_searchを定義し,
     142 *  OMIT_BITMAP_SEARCHをマクロ定義すればよい.また,ビットサーチ命令の
     143 *  サーチ方向が逆などの理由で優先度とビットとの対応を変更したい場合に
     144 *  は,PRIMAP_BITをマクロ定義すればよい.
     145 *
     146 *  また,ライブラリにffsがあるなら,次のように定義してライブラリ関数を
     147 *  使った方が効率が良い可能性もある.
    169148 *              #define bitmap_search(bitmap) (ffs(bitmap) - 1)
    170149 */
     
    198177
    199178/*
    200  *  優å
    201 ˆåº¦ãƒ“ットマップが空かのチェック
     179 *  優先度ビットマップが空かのチェック
    202180 */
    203181Inline bool_t
     
    208186
    209187/*
    210  *  優å
    211 ˆåº¦ãƒ“ットマップのサーチ
     188 *  優先度ビットマップのサーチ
    212189 */
    213190Inline uint_t
     
    218195
    219196/*
    220  *  優å
    221 ˆåº¦ãƒ“ットマップのセット
     197 *  優先度ビットマップのセット
    222198 */
    223199Inline void
     
    228204
    229205/*
    230  *  優å
    231 ˆåº¦ãƒ“ットマップのクリア
     206 *  優先度ビットマップのクリア
    232207 */
    233208Inline void
     
    238213
    239214/*
    240  *  最高優å
    241 ˆé †ä½ã‚¿ã‚¹ã‚¯ã®ã‚µãƒ¼ãƒ
     215 *  最高優先順位タスクのサーチ
    242216 */
    243217#ifdef TOPPERS_tsksched
     
    255229
    256230/*
    257  *  実行できる状æ
    258 ‹ã¸ã®é·ç§»
    259  *
    260  *  実行すべきタスクを更新するのは,実行できるタスクがなかった場合と,
    261  *  p_tcbの優å
    262 ˆåº¦ãŒå®Ÿè¡Œã™ã¹ãã‚¿ã‚¹ã‚¯ã®å„ªå
    263 ˆåº¦ã‚ˆã‚Šã‚‚高い場合である.
     231 *  実行できる状態への遷移
     232 *
     233 *  実行すべきタスクを更新するのは,実行できるタスクがなかった場合と,
     234 *  p_tcbの優先度が実行すべきタスクの優先度よりも高い場合である.
    264235 */
    265236#ifdef TOPPERS_tskrun
     
    283254
    284255/*
    285  *  実行できる状æ
    286 ‹ã‹ã‚‰ä»–の状æ
    287 ‹ã¸ã®é·ç§»
    288  *
    289  *  実行すべきタスクを更新するのは,p_tcbが実行すべきタスクであった場合
    290  *  である.p_tcbと同じ優å
    291 ˆåº¦ã®ã‚¿ã‚¹ã‚¯ãŒä»–にある場合は,p_tcbの次のタス
    292  *  クが実行すべきタスクになる.そうでない場合は,レディキューをサーチ
    293  *  するå¿
    294 è¦ãŒã‚る.
     256 *  実行できる状態から他の状態への遷移
     257 *
     258 *  実行すべきタスクを更新するのは,p_tcbが実行すべきタスクであった場合
     259 *  である.p_tcbと同じ優先度のタスクが他にある場合は,p_tcbの次のタス
     260 *  クが実行すべきタスクになる.そうでない場合は,レディキューをサーチ
     261 *  する必要がある.
    295262 */
    296263#ifdef TOPPERS_tsknrun
     
    321288
    322289/*
    323  *  休止状æ
    324 ‹ã¸ã®é·ç§»
     290 *  休止状態への遷移
    325291 */
    326292#ifdef TOPPERS_tskdmt
     
    341307
    342308/*
    343  *  休止状æ
    344 ‹ã‹ã‚‰å®Ÿè¡Œã§ãã‚‹çŠ¶æ
    345 ‹ã¸ã®é·ç§»
     309 *  休止状態から実行できる状態への遷移
    346310 */
    347311#ifdef TOPPERS_tskact
     
    359323
    360324/*
    361  *  タスクの優å
    362 ˆåº¦ã®å¤‰æ›´
    363  *
    364  *  タスクが実行できる状æ
    365 ‹ã®å ´åˆã«ã¯ï¼Œãƒ¬ãƒ‡ã‚£ã‚­ãƒ¥ãƒ¼ã®ä¸­ã§ã®ä½ç½®ã‚’変更す
    366  *  る.オブジェクトのå¾
    367 ã¡ã‚­ãƒ¥ãƒ¼ã®ä¸­ã§å¾
    368 ã¡çŠ¶æ
    369 ‹ã«ãªã£ã¦ã„る場合には,å¾
    370 
    371  *  ちキューの中での位置を変更する.
    372  *
    373  *  実行すべきタスクを更新するのは,(1) p_tcbが実行すべきタスクであって,
    374  *  その優å
    375 ˆåº¦ã‚’下げた場合,(2) p_tcbが実行すべきタスクではなく,変更後
    376  *  の優å
    377 ˆåº¦ãŒå®Ÿè¡Œã™ã¹ãã‚¿ã‚¹ã‚¯ã®å„ªå
    378 ˆåº¦ã‚ˆã‚Šã‚‚高い場合である.(1)の場合に
    379  *  は,レディキューをサーチするå¿
    380 è¦ãŒã‚る.
     325 *  タスクの優先度の変更
     326 *
     327 *  タスクが実行できる状態の場合には,レディキューの中での位置を変更す
     328 *  る.オブジェクトの待ちキューの中で待ち状態になっている場合には,待
     329 *  ちキューの中での位置を変更する.
     330 *
     331 *  実行すべきタスクを更新するのは,(1) p_tcbが実行すべきタスクであって,
     332 *  その優先度を下げた場合,(2) p_tcbが実行すべきタスクではなく,変更後
     333 *  の優先度が実行すべきタスクの優先度よりも高い場合である.(1)の場合に
     334 *  は,レディキューをサーチする必要がある.
    381335 */
    382336#ifdef TOPPERS_tskpri
     
    392346        if (TSTAT_RUNNABLE(p_tcb->tstat)) {
    393347                /*
    394                  *  タスクが実行できる状æ
    395 ‹ã®å ´åˆ
     348                 *  タスクが実行できる状態の場合
    396349                 */
    397350                queue_delete(&(p_tcb->task_queue));
     
    424377                if (TSTAT_WAIT_WOBJCB(p_tcb->tstat)) {
    425378                        /*
    426                          *  タスクが,同期・通信オブジェクトの管理ブロックのå
    427 ±é€šéƒ¨
    428                          *  分(WOBJCB)のå¾
    429 ã¡ã‚­ãƒ¥ãƒ¼ã«ã¤ãªãŒã‚Œã¦ã„る場合
     379                         *  タスクが,同期・通信オブジェクトの管理ブロックの共通部
     380                         *  分(WOBJCB)の待ちキューにつながれている場合
    430381                         */
    431382                        wobj_change_priority(((WINFO_WOBJ *)(p_tcb->p_winfo))->p_wobjcb,
     
    438389
    439390/*
    440  *  レディキューの回転
    441  *
    442  *  実行すべきタスクを更新するのは,実行すべきタスクがタスクキューの末
    443  *  尾に移動した場合である.
     391 *  レディキューの回転
     392 *
     393 *  実行すべきタスクを更新するのは,実行すべきタスクがタスクキューの末
     394 *  尾に移動した場合である.
    444395 */
    445396#ifdef TOPPERS_tskrot
     
    464415
    465416/*
    466  *  タスクの終了処理
     417 *  タスクの終了処理
    467418 */
    468419#ifdef TOPPERS_tskterm
Note: See TracChangeset for help on using the changeset viewer.