Ignore:
Timestamp:
Jul 23, 2017, 2:29:40 PM (7 years ago)
Author:
coas-nagasima
Message:

SVNプロパティを設定

File:
1 edited

Legend:

Unmodified
Added
Removed
  • rubycfg_asp/trunk/asp_dcre/kernel/task.c

    • Property svn:mime-type changed from text/x-csrc to text/x-csrc; charset=UTF-8
    r313 r315  
    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
     
    6550
    6651/*
    67  *  トレースログマクロのデフォルト定義
     52 *  トレースログマクロのデフォルト定義
    6853 */
    6954#ifndef LOG_TEX_ENTER
     
    7863
    7964/*
    80  *  実行状æ
    81 ‹ã®ã‚¿ã‚¹ã‚¯
     65 *  実行状態のタスク
    8266 */
    8367TCB             *p_runtsk;
    8468
    8569/*
    86  *  最高優å
    87 ˆé †ä½ã®ã‚¿ã‚¹ã‚¯
     70 *  最高優先順位のタスク
    8871 */
    8972TCB             *p_schedtsk;
    9073
    9174/*
    92  *  タスクディスパッチ/タスク例外処理ルーチン起動要求フラグ
     75 *  タスクディスパッチ/タスク例外処理ルーチン起動要求フラグ
    9376 */
    9477bool_t  reqflg;
    9578
    9679/*
    97  *  割込み優å
    98 ˆåº¦ãƒžã‚¹ã‚¯å
    99 ¨è§£é™¤çŠ¶æ
    100 ‹
     80 *  割込み優先度マスク全解除状態
    10181 */
    10282bool_t  ipmflg;
    10383
    10484/*
    105  *  ディスパッチ禁止状æ
    106 ‹
     85 *  ディスパッチ禁止状態
    10786 */
    10887bool_t  disdsp;
    10988
    11089/*
    111  *  タスクディスパッチ可能状æ
    112 ‹
     90 *  タスクディスパッチ可能状態
    11391 */
    11492bool_t  dspflg;
    11593
    11694/*
    117  *  レディキュー
     95 *  レディキュー
    11896 */
    11997QUEUE   ready_queue[TNUM_TPRI];
    12098
    12199/*
    122  *  レディキューサーチのためのビットマップ
     100 *  レディキューサーチのためのビットマップ
    123101 */
    124102uint16_t        ready_primap;
    125103
    126104/*
    127  *  使用していないTCBのリスト
     105 *  使用していないTCBのリスト
    128106 */
    129107QUEUE   free_tcb;
    130108
    131109/*
    132  *  タスク管理モジュールの初期化
     110 *  タスク管理モジュールの初期化
    133111 */
    134112void
     
    174152
    175153/*
    176  *  ビットマップサーチ関数
    177  *
    178  *  bitmapå†
    179 ã®1のビットのå†
    180 ï¼Œæœ€ã‚‚下位(右)のものをサーチし,そのビッ
    181  *  ト番号を返す.ビット番号は,最下位ビットを0とする.bitmapに0を指定
    182  *  してはならない.この関数では,bitmapが16ビットであることを仮定し,
    183  *  uint16_t型としている.
    184  *
    185  *  ビットサーチ命令を持つプロセッサでは,ビットサーチ命令を使うように
    186  *  書き直した方が効率が良い場合がある.このような場合には,ターゲット
    187  *  依存部でビットサーチ命令を使ったbitmap_searchを定義し,
    188  *  OMIT_BITMAP_SEARCHをマクロ定義すればよい.また,ビットサーチ命令の
    189  *  サーチ方向が逆などの理由で優å
    190 ˆåº¦ã¨ãƒ“ットとの対応を変更したい場合に
    191  *  は,PRIMAP_BITをマクロ定義すればよい.
    192  *
    193  *  また,ライブラリにffsがあるなら,次のように定義してライブラリ関数を
    194  *  使った方が効率が良い可能性もある.
     154 *  ビットマップサーチ関数
     155 *
     156 *  bitmap内の1のビットの内,最も下位(右)のものをサーチし,そのビッ
     157 *  ト番号を返す.ビット番号は,最下位ビットを0とする.bitmapに0を指定
     158 *  してはならない.この関数では,bitmapが16ビットであることを仮定し,
     159 *  uint16_t型としている.
     160 *
     161 *  ビットサーチ命令を持つプロセッサでは,ビットサーチ命令を使うように
     162 *  書き直した方が効率が良い場合がある.このような場合には,ターゲット
     163 *  依存部でビットサーチ命令を使ったbitmap_searchを定義し,
     164 *  OMIT_BITMAP_SEARCHをマクロ定義すればよい.また,ビットサーチ命令の
     165 *  サーチ方向が逆などの理由で優先度とビットとの対応を変更したい場合に
     166 *  は,PRIMAP_BITをマクロ定義すればよい.
     167 *
     168 *  また,ライブラリにffsがあるなら,次のように定義してライブラリ関数を
     169 *  使った方が効率が良い可能性もある.
    195170 *              #define bitmap_search(bitmap) (ffs(bitmap) - 1)
    196171 */
     
    224199
    225200/*
    226  *  優å
    227 ˆåº¦ãƒ“ットマップが空かのチェック
     201 *  優先度ビットマップが空かのチェック
    228202 */
    229203Inline bool_t
     
    234208
    235209/*
    236  *  優å
    237 ˆåº¦ãƒ“ットマップのサーチ
     210 *  優先度ビットマップのサーチ
    238211 */
    239212Inline uint_t
     
    244217
    245218/*
    246  *  優å
    247 ˆåº¦ãƒ“ットマップのセット
     219 *  優先度ビットマップのセット
    248220 */
    249221Inline void
     
    254226
    255227/*
    256  *  優å
    257 ˆåº¦ãƒ“ットマップのクリア
     228 *  優先度ビットマップのクリア
    258229 */
    259230Inline void
     
    264235
    265236/*
    266  *  最高優å
    267 ˆé †ä½ã‚¿ã‚¹ã‚¯ã®ã‚µãƒ¼ãƒ
     237 *  最高優先順位タスクのサーチ
    268238 */
    269239#ifdef TOPPERS_tsksched
     
    281251
    282252/*
    283  *  実行できる状æ
    284 ‹ã¸ã®é·ç§»
    285  *
    286  *  最高優å
    287 ˆé †ä½ã®ã‚¿ã‚¹ã‚¯ã‚’更新するのは,実行できるタスクがなかった場合
    288  *  と,p_tcbの優å
    289 ˆåº¦ãŒæœ€é«˜å„ªå
    290 ˆé †ä½ã®ã‚¿ã‚¹ã‚¯ã®å„ªå
    291 ˆåº¦ã‚ˆã‚Šã‚‚高い場合であ
    292  *  る.
     253 *  実行できる状態への遷移
     254 *
     255 *  最高優先順位のタスクを更新するのは,実行できるタスクがなかった場合
     256 *  と,p_tcbの優先度が最高優先順位のタスクの優先度よりも高い場合であ
     257 *  る.
    293258 */
    294259#ifdef TOPPERS_tskrun
     
    312277
    313278/*
    314  *  実行できる状æ
    315 ‹ã‹ã‚‰ä»–の状æ
    316 ‹ã¸ã®é·ç§»
    317  *
    318  *  最高優å
    319 ˆé †ä½ã®ã‚¿ã‚¹ã‚¯ã‚’更新するのは,p_tcbが最高優å
    320 ˆé †ä½ã®ã‚¿ã‚¹ã‚¯ã§
    321  *  あった場合である.p_tcbと同じ優å
    322 ˆåº¦ã®ã‚¿ã‚¹ã‚¯ãŒä»–にある場合は,p_tcb
    323  *  の次のタスクが最高優å
    324 ˆé †ä½ã«ãªã‚‹ï¼Žãã†ã§ãªã„場合は,レディキューを
    325  *  サーチするå¿
    326 è¦ãŒã‚る.
     279 *  実行できる状態から他の状態への遷移
     280 *
     281 *  最高優先順位のタスクを更新するのは,p_tcbが最高優先順位のタスクで
     282 *  あった場合である.p_tcbと同じ優先度のタスクが他にある場合は,p_tcb
     283 *  の次のタスクが最高優先順位になる.そうでない場合は,レディキューを
     284 *  サーチする必要がある.
    327285 */
    328286#ifdef TOPPERS_tsknrun
     
    354312
    355313/*
    356  *  休止状æ
    357 ‹ã¸ã®é·ç§»
     314 *  休止状態への遷移
    358315 */
    359316#ifdef TOPPERS_tskdmt
     
    373330
    374331/*
    375  *  休止状æ
    376 ‹ã‹ã‚‰å®Ÿè¡Œã§ãã‚‹çŠ¶æ
    377 ‹ã¸ã®é·ç§»
     332 *  休止状態から実行できる状態への遷移
    378333 */
    379334#ifdef TOPPERS_tskact
     
    391346
    392347/*
    393  *  タスクの優å
    394 ˆåº¦ã®å¤‰æ›´
    395  *
    396  *  タスクが実行できる状æ
    397 ‹ã®å ´åˆã«ã¯ï¼Œãƒ¬ãƒ‡ã‚£ã‚­ãƒ¥ãƒ¼ã®ä¸­ã§ã®ä½ç½®ã‚’変更す
    398  *  る.オブジェクトのå¾
    399 ã¡ã‚­ãƒ¥ãƒ¼ã®ä¸­ã§å¾
    400 ã¡çŠ¶æ
    401 ‹ã«ãªã£ã¦ã„る場合には,å¾
    402 
    403  *  ちキューの中での位置を変更する.
    404  *
    405  *  最高優å
    406 ˆé †ä½ã®ã‚¿ã‚¹ã‚¯ã‚’更新するのは,(1) p_tcbが最高優å
    407 ˆé †ä½ã®ã‚¿ã‚¹
    408  *  クであって,その優å
    409 ˆåº¦ã‚’下げた場合,(2) p_tcbが最高優å
    410 ˆé †ä½ã®ã‚¿ã‚¹
    411  *  クではなく,変更後の優å
    412 ˆåº¦ãŒæœ€é«˜å„ªå
    413 ˆé †ä½ã®ã‚¿ã‚¹ã‚¯ã®å„ªå
    414 ˆåº¦ã‚ˆã‚Šã‚‚高い
    415  *  場合である.(1)の場合には,レディキューをサーチするå¿
    416 è¦ãŒã‚る.
     348 *  タスクの優先度の変更
     349 *
     350 *  タスクが実行できる状態の場合には,レディキューの中での位置を変更す
     351 *  る.オブジェクトの待ちキューの中で待ち状態になっている場合には,待
     352 *  ちキューの中での位置を変更する.
     353 *
     354 *  最高優先順位のタスクを更新するのは,(1) p_tcbが最高優先順位のタス
     355 *  クであって,その優先度を下げた場合,(2) p_tcbが最高優先順位のタス
     356 *  クではなく,変更後の優先度が最高優先順位のタスクの優先度よりも高い
     357 *  場合である.(1)の場合には,レディキューをサーチする必要がある.
    417358 */
    418359#ifdef TOPPERS_tskpri
     
    428369        if (TSTAT_RUNNABLE(p_tcb->tstat)) {
    429370                /*
    430                  *  タスクが実行できる状æ
    431 ‹ã®å ´åˆ
     371                 *  タスクが実行できる状態の場合
    432372                 */
    433373                queue_delete(&(p_tcb->task_queue));
     
    454394                if (TSTAT_WAIT_WOBJCB(p_tcb->tstat)) {
    455395                        /*
    456                          *  タスクが,同期・通信オブジェクトの管理ブロックのå
    457 ±é€šéƒ¨
    458                          *  分(WOBJCB)のå¾
    459 ã¡ã‚­ãƒ¥ãƒ¼ã«ã¤ãªãŒã‚Œã¦ã„る場合
     396                         *  タスクが,同期・通信オブジェクトの管理ブロックの共通部
     397                         *  分(WOBJCB)の待ちキューにつながれている場合
    460398                         */
    461399                        wobj_change_priority(((WINFO_WOBJ *)(p_tcb->p_winfo))->p_wobjcb,
     
    469407
    470408/*
    471  *  レディキューの回転
    472  *
    473  *  最高優å
    474 ˆé †ä½ã®ã‚¿ã‚¹ã‚¯ã‚’更新するのは,最高優å
    475 ˆé †ä½ã®ã‚¿ã‚¹ã‚¯ãŒã‚¿ã‚¹ã‚¯ã‚­
    476  *  ューの末尾に移動した場合である.
     409 *  レディキューの回転
     410 *
     411 *  最高優先順位のタスクを更新するのは,最高優先順位のタスクがタスクキ
     412 *  ューの末尾に移動した場合である.
    477413 */
    478414#ifdef TOPPERS_tskrot
     
    498434
    499435/*
    500  *  タスク例外処理ルーチンの呼出し
    501  *
    502  *  ASPカーネルでは,タスク例外処理ルーチンå†
    503 ã§CPUロック状æ
    504 ‹ã«é·ç§»ã—,
    505  *  å
    506 ƒã®çŠ¶æ
    507 ‹ã«æˆ»ã•ãšã«ãƒªã‚¿ãƒ¼ãƒ³ã—た場合,カーネルがå
    508 ƒã®çŠ¶æ
    509 ‹ã«æˆ»ã™ï¼Ž
     436 *  タスク例外処理ルーチンの呼出し
     437 *
     438 *  ASPカーネルでは,タスク例外処理ルーチン内でCPUロック状態に遷移し,
     439 *  元の状態に戻さずにリターンした場合,カーネルが元の状態に戻す.
    510440 */
    511441#ifdef TOPPERS_tsktex
     
    540470                if (p_runtsk != p_schedtsk && dspflg) {
    541471                        /*
    542                          *  ここでdispatchを呼び出す処理は,相互再帰呼出しになって
    543                          *  いるが,dispatchを呼ぶ前にp_runtsk->enatexをfalseにして
    544                          *  おけば支障がない.その理由については,「TOPPERS/ASP カー
    545                          *  ネル 設計メモ」を参ç
    546 §ã®ã“と.
     472                         *  ここでdispatchを呼び出す処理は,相互再帰呼出しになって
     473                         *  いるが,dispatchを呼ぶ前にp_runtsk->enatexをfalseにして
     474                         *  おけば支障がない.その理由については,「TOPPERS/ASP カー
     475                         *  ネル 設計メモ」を参照のこと.
    547476                         */
    548477                        dispatch();
     
    553482
    554483/*
    555  *  タスク例外処理ルーチンの起動
     484 *  タスク例外処理ルーチンの起動
    556485 */
    557486#ifndef OMIT_CALLTEX
Note: See TracChangeset for help on using the changeset viewer.