Ignore:
Timestamp:
Jun 2, 2015, 3:39:53 PM (9 years ago)
Author:
nmir-saito
Message:

ファイルの mime-type 変更

File:
1 edited

Legend:

Unmodified
Added
Removed
  • ssp_qb_r5f100le_cs/trunk/kernel/task.h

    • Property svn:mime-type set to text/plain; charset=shift_jis
    r93 r95  
    1111 *  Copyright (C) 2011 by Meika Sugimoto
    1212 *
    13  *  ã‹L’˜ìŒ ŽÒ‚́CˆÈ‰º‚Ì (1)`(4) ‚ÌðŒ‚ð–ž‚½‚·ê‡‚ÉŒÀ‚èC–{ƒ\ƒtƒgƒEƒF
    14  *  ƒAi–{ƒ\ƒtƒgƒEƒFƒA‚ð‰ü•Ï‚µ‚½‚à‚Ì‚ðŠÜ‚ށDˆÈ‰º“¯‚¶j‚ðŽg—pE•¡»E‰ü•ÏE
    15  *  Ä”z•ziˆÈ‰ºC—˜—p‚ƌĂԁj‚·‚邱‚Ƃ𖳏ž‚Å‹–‘ø‚·‚éD
    16  *  (1) –{ƒ\ƒtƒgƒEƒFƒA‚ðƒ\[ƒXƒR[ƒh‚ÌŒ`‚Å—˜—p‚·‚éê‡‚ɂ́Cã‹L‚Ì’˜ìŒ 
    17  *      •\Ž¦C‚±‚Ì—˜—pðŒ‚¨‚æ‚щº‹L‚Ì–³•ÛØ‹K’肪C‚»‚Ì‚Ü‚Ü‚ÌŒ`‚Ń\[ƒX
    18  *      ƒR[ƒh’†‚ÉŠÜ‚Ü‚ê‚Ä‚¢‚邱‚ƁD
    19  *  (2) –{ƒ\ƒtƒgƒEƒFƒA‚ðCƒ‰ƒCƒuƒ‰ƒŠŒ`Ž®‚ȂǁC‘¼‚̃\ƒtƒgƒEƒFƒAŠJ”­‚ÉŽg—p
    20  *      ‚Å‚«‚éŒ`‚ōĔz•z‚·‚éê‡‚ɂ́CÄ”z•z‚É”º‚¤ƒhƒLƒ
    21 ƒƒ“ƒgi—˜—pŽÒƒ}
    22  *      ƒjƒ
    23 ƒAƒ‹‚Ȃǁj‚ɁCã‹L‚Ì’˜ìŒ •\Ž¦C‚±‚Ì—˜—pðŒ‚¨‚æ‚щº‹L‚Ì–³•Û
    24  *      Ø‹K’è‚ðŒfÚ‚·‚邱‚ƁD
    25  *  (3) –{ƒ\ƒtƒgƒEƒFƒA‚ðC‹@Ší‚É‘g‚ݍž‚ނȂǁC‘¼‚̃\ƒtƒgƒEƒFƒAŠJ”­‚ÉŽg—p
    26  *      ‚Å‚«‚È‚¢Œ`‚ōĔz•z‚·‚éê‡‚ɂ́CŽŸ‚Ì‚¢‚¸‚ê‚©‚ÌðŒ‚ð–ž‚½‚·‚±‚ƁD
    27  *    (a) Ä”z•z‚É”º‚¤ƒhƒLƒ
    28 ƒƒ“ƒgi—˜—pŽÒƒ}ƒjƒ
    29 ƒAƒ‹‚Ȃǁj‚ɁCã‹L‚Ì’˜ì
    30  *        Œ •\Ž¦C‚±‚Ì—˜—pðŒ‚¨‚æ‚щº‹L‚Ì–³•ÛØ‹K’è‚ðŒfÚ‚·‚邱‚ƁD
    31  *    (b) Ä”z•z‚ÌŒ`‘Ô‚ðC•Ê‚É’è‚ß‚é•û–@‚É‚æ‚Á‚āCTOPPERSƒvƒƒWƒFƒNƒg‚É•ñ
    32  *        ‚·‚邱‚ƁD
    33  *  (4) –{ƒ\ƒtƒgƒEƒFƒA‚Ì—˜—p‚É‚æ‚è’¼Ú“I‚Ü‚½‚͊ԐړI‚ɐ¶‚¶‚é‚¢‚©‚Ȃ鑹ŠQ
    34  *      ‚©‚ç‚àCã‹L’˜ìŒ ŽÒ‚¨‚æ‚ÑTOPPERSƒvƒƒWƒFƒNƒg‚ð–Ɛӂ·‚邱‚ƁD‚Ü‚½C
    35  *      –{ƒ\ƒtƒgƒEƒFƒA‚̃†[ƒU‚Ü‚½‚̓Gƒ“ƒhƒ†[ƒU‚©‚ç‚Ì‚¢‚©‚Ȃ闝—R‚ÉŠî‚Ã
    36  *      ‚­¿‹‚©‚ç‚àCã‹L’˜ìŒ ŽÒ‚¨‚æ‚ÑTOPPERSƒvƒƒWƒFƒNƒg‚ð–Ɛӂ·‚邱‚ƁD
     13 *  上記著作権者は,以下の (1)〜(4) の条件を満たす場合に限り,本ソフトウェ
     14 *  ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改変・
     15 *  再配布(以下,利用と呼ぶ)することを無償で許諾する.
     16 *  (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作権
     17 *      表示,この利用条件および下記の無保証規定が,そのままの形でソース
     18 *      コード中に含まれていること.
     19 *  (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使用
     20 *      できる形で再配布する場合には,再配布に伴うドキュメント(利用者マ
     21 *      ニュアルなど)に,上記の著作権表示,この利用条件および下記の無保
     22 *      証規定を掲載すること.
     23 *  (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使用
     24 *      できない形で再配布する場合には,次のいずれかの条件を満たすこと.
     25 *    (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著作
     26 *        権表示,この利用条件および下記の無保証規定を掲載すること.
     27 *    (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに報
     28 *        告すること.
     29 *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損害
     30 *      からも,上記著作権者およびTOPPERSプロジェクトを免責すること.また,
     31 *      本ソフトウェアのユーザまたはエンドユーザからのいかなる理由に基づ
     32 *      く請求からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
    3733 *
    38  *  –{ƒ\ƒtƒgƒEƒFƒA‚́C–³•ÛØ‚Å’ñ‹Ÿ‚³‚ê‚Ä‚¢‚é‚à‚Ì‚Å‚ ‚éDã‹L’˜ìŒ ŽÒ‚¨‚æ
    39  *  ‚ÑTOPPERSƒvƒƒWƒFƒNƒg‚́C–{ƒ\ƒtƒgƒEƒFƒA‚ÉŠÖ‚µ‚āC“Á’è‚ÌŽg—p–Ú“I‚ɑ΂·
    40  *  ‚é“K‡«‚àŠÜ‚߂āC‚¢‚©‚È‚é•ÛØ‚às‚í‚È‚¢D‚Ü‚½C–{ƒ\ƒtƒgƒEƒFƒA‚Ì—˜—p
    41  *  ‚É‚æ‚è’¼Ú“I‚Ü‚½‚͊ԐړI‚ɐ¶‚¶‚½‚¢‚©‚Ȃ鑹ŠQ‚ÉŠÖ‚µ‚Ä‚àC‚»‚̐ӔC‚ð•‰
    42  *  ‚í‚È‚¢D
     34 *  本ソフトウェアは,無保証で提供されているものである.上記著作権者およ
     35 *  びTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的に対す
     36 *  る適合性も含めて,いかなる保証も行わない.また,本ソフトウェアの利用
     37 *  により直接的または間接的に生じたいかなる損害に関しても,その責任を負
     38 *  わない.
    4339 *
    4440 */
     
    5147
    5248/*
    53  *  ƒ^ƒXƒN—Dæ“x‚Ì“à•”•\Œ»EŠO•”•\Œ»•ÏŠ·ƒ}ƒNƒ
     49 *  タスク優先度の内部表現・外部表現変換マクロ
    5450 */
    5551#define INT_PRIORITY(x)         ((uint_t)((x) - TMIN_TPRI))
    5652
    5753/*
    58  *  ƒ^ƒXƒNID‚̍őå’likernel_cfg.cj
     54 *  タスクIDの最大値(kernel_cfg.c)
    5955 */
    6056extern const ID tmax_tskid;
    6157
    6258/*
    63  *  ƒ^ƒXƒN‚̐”
     59 *  タスクの数
    6460 */
    6561#define tnum_tsk        ((uint_t)(tmax_tskid - TMIN_TSKID + 1))
    6662
    6763/*
    68  *  ŽÀs‰Â”\ó‘Ԃ̃^ƒXƒN‚ª‚È‚¢Žž‚ÉŽÀs’†ƒ^ƒXƒN‚ÌŒ»Ý—Dæ“x‚ɐݒ肷‚é’l
     64 *  実行可能状態のタスクがない時に実行中タスクの現在優先度に設定する値
    6965 */
    7066#define TSKPRI_NULL             (UINT_MAX)
     
    7268
    7369/*
    74  *  ƒŒƒfƒBƒLƒ
    75 [ƒT[ƒ`‚Ì‚½‚߂̃rƒbƒgƒ}ƒbƒv
     70 *  レディキューサーチのためのビットマップ
    7671 */
    7772extern volatile uint_t  ready_primap;
    7873
    7974/*
    80  *  ‹N“®—v‹ƒLƒ
    81 [ƒCƒ“ƒO‚̃rƒbƒgƒ}ƒbƒv
     75 *  起動要求キューイングのビットマップ
    8276 */
    8377extern uint_t   actque_bitmap;
    8478
    8579/*
    86  *  ƒfƒBƒXƒpƒbƒ`^ƒ^ƒXƒN—áŠOˆ—ƒ‹[ƒ`ƒ“‹N“®—v‹ƒtƒ‰ƒO
    87  *
    88  *  Š„ž‚݃nƒ“ƒhƒ‰^CPU—áŠOƒnƒ“ƒhƒ‰‚̏oŒûˆ—‚ɁCƒfƒBƒXƒpƒbƒ`‚Ü‚½‚Í
    89  *  ƒ^ƒXƒN—áŠOˆ—ƒ‹[ƒ`ƒ“‚Ì‹N“®‚ð—v‹‚·‚邱‚Æ‚ðŽ¦‚·ƒtƒ‰ƒOD
     80 *  ディスパッチ/タスク例外処理ルーチン起動要求フラグ
     81 *
     82 *  割込みハンドラ/CPU例外ハンドラの出口処理に,ディスパッチまたは
     83 *  タスク例外処理ルーチンの起動を要求することを示すフラグ.
    9084 */
    9185extern bool_t   reqflg;
    9286
    9387/*
    94  *  ƒfƒBƒXƒpƒbƒ`‹ÖŽ~ó‘Ô
    95  *
    96  *  ƒfƒBƒXƒpƒbƒ`‹ÖŽ~ó‘Ô‚Å‚ ‚邱‚Æ‚ðŽ¦‚·ƒtƒ‰ƒOD
     88 *  ディスパッチ禁止状態
     89 *
     90 *  ディスパッチ禁止状態であることを示すフラグ.
    9791 */
    9892extern bool_t   disdsp;
    9993
    10094/*
    101  *  ŽÀsó‘Ôƒ^ƒXƒN‚ÌŒ»Ý—Dæ“x
    102  *
    103  *  ŽÀs’†‚̃^ƒXƒN‚ÉŽÀsŽž—Dæ“x‚ªÝ’肳‚ê‚Ä‚¢‚ê‚ÎŽÀsŽž—Dæ“x‚ªC
    104  *  Ý’肳‚ê‚Ä‚¢‚È‚¯‚ê‚΋N“®Žž—Dæ“x‚ªÝ’肳‚ê‚éD
     95 *  実行状態タスクの現在優先度
     96 *
     97 *  実行中のタスクに実行時優先度が設定されていれば実行時優先度が,
     98 *  設定されていなければ起動時優先度が設定される.
    10599 */
    106100extern uint_t runtsk_curpri;
    107101
    108102/*
    109  *  ŽÀsó‘Ôƒ^ƒXƒN‚Ì‹N“®Žž—Dæ“x
     103 *  実行状態タスクの起動時優先度
    110104 */
    111105extern uint_t runtsk_ipri;
    112106
    113107/*
    114  *  ƒ^ƒXƒNŠÇ—ƒ‚ƒWƒ
    115 [ƒ‹‚̏‰Šú‰»
    116  *
    117  *  ‘S‚Ẵ^ƒXƒN‚ð‰Šú‰»‚·‚éDŠeƒ^ƒXƒN‚̓^ƒXƒN‘®«‚ÉTA_ACT‚ªÝ’肳‚ê‚Ä‚¢‚ê‚Î
    118  *  ŽÀs‰Â”\ó‘ԁC‚»‚¤‚Å‚È‚¢ê‡‚Í‹xŽ~ó‘Ô‚Æ‚È‚éD
     108 *  タスク管理モジュールの初期化
     109 *
     110 *  全てのタスクを初期化する.各タスクはタスク属性にTA_ACTが設定されていれば
     111 *  実行可能状態,そうでない場合は休止状態となる.
    119112 * 
    120  *  ‚Ü‚½AƒfƒBƒXƒpƒbƒ`‹–‰Âƒtƒ‰ƒO‚ðƒfƒBƒXƒpƒbƒ`‹–‰Âó‘Ԃɐݒ肷‚éD
     113 *  また、ディスパッチ許可フラグをディスパッチ許可状態に設定する.
    121114 * 
    122  *  –{ŠÖ”‚̓Rƒ“ƒtƒBƒMƒ
    123 ƒŒ[ƒ^‚ª¶¬‚·‚éobject_initializeˆÈŠO‚ŌĂñ‚Å‚Í‚È‚ç‚È‚¢D
     115 *  本関数はコンフィギュレータが生成するobject_initialize以外で呼んではならない.
    124116 */
    125117extern void initialize_task(void);
    126118
    127119/*
    128  *  ƒ^ƒXƒN‚Ì‹N“®
    129  *
    130  *  ipri‚ÅŽw’肵‚½‹N“®Žž—Dæ“x‚ðŽ‚Âƒ^ƒXƒN‚ðŽÀs‰Â”\ó‘Ô‚É‘JˆÚ‚³‚¹‚éD
    131  *  –{ŠÖ”‚ðŽÀs‚·‚邱‚Æ‚É‚æ‚èƒvƒŠƒGƒ“ƒvƒg‚ª”­¶‚·‚éê‡‚Ítrue‚ðC
    132  *  ‚»‚¤‚Å‚È‚¢ê‡‚Ífalse‚ð•Ô‚·D
    133  *
    134  *  –{ŠÖ”‚ÍCPUƒƒbƒNó‘ԁC‘SŠ„ž‚݃ƒbƒN‰ðœó‘ԁCŠ„ž‚Ý—Dæ“xƒ}ƒXƒN‘S‰ðœó‘Ô‚Å
    135  *  ŒÄ‚яo‚·‚±‚ƁD
     120 *  タスクの起動
     121 *
     122 *  ipriで指定した起動時優先度を持つタスクを実行可能状態に遷移させる.
     123 *  本関数を実行することによりプリエンプトが発生する場合はtrueを,
     124 *  そうでない場合はfalseを返す.
     125 *
     126 *  本関数はCPUロック状態,全割込みロック解除状態,割込み優先度マスク全解除状態で
     127 *  呼び出すこと.
    136128 */
    137129extern bool_t make_active(uint_t ipri);
    138130
    139131/*
    140  *  Žw’肵‚½‹N“®Žž—Dæ“x‚̃^ƒXƒN‚ª‹xŽ~ó‘Ô‚©‚Ç‚¤‚©‚̃eƒXƒg
    141  *
    142  *  ipri‚ÅŽw’肵‚½‹N“®Žž—Dæ“x‚ðŽ‚Âƒ^ƒXƒN‚ª‹xŽ~ó‘Ô‚Å‚ ‚ê‚Î
    143  *  true‚ð‚»‚êˆÈŠOiŽÀs‰Â”\ó‘ԁCŽÀs‰Â”\ó‘ԁj‚Å‚ ‚ê‚Îfalse‚ð•Ô‚·D
    144  *
    145  *  –{ŠÖ”‚ÍCPUƒƒbƒNó‘ԁC‘SŠ„ž‚݃ƒbƒN‰ðœó‘ԁCŠ„ž‚Ý—Dæ“xƒ}ƒXƒN‘S‰ðœó‘Ô‚Å
    146  *  ŒÄ‚яo‚·‚±‚ƁD
     132 *  指定した起動時優先度のタスクが休止状態かどうかのテスト
     133 *
     134 *  ipriで指定した起動時優先度を持つタスクが休止状態であれば
     135 *  trueをそれ以外(実行可能状態,実行可能状態)であればfalseを返す.
     136 *
     137 *  本関数はCPUロック状態,全割込みロック解除状態,割込み優先度マスク全解除状態で
     138 *  呼び出すこと.
    147139 */
    148140extern bool_t test_dormant(uint_t ipri);
    149141
    150142/*
    151  *  Å‚—Dæ‡ˆÊƒ^ƒXƒN‚̃T[ƒ`
    152  *
    153  *  ŽÀs‰Â”\ó‘Ԃ̃^ƒXƒN‚Ì’†‚©‚çÅ‚à—Dæ‡ˆÊ‚ª‚‚¢ƒ^ƒXƒN‚̏‰Šú—Dæ“x‚ð
    154  *  •Ô‚·D
    155  *
    156  *  –{ŠÖ”‚ÍCPUƒƒbƒNó‘ԁC‘SŠ„ž‚݃ƒbƒN‰ðœó‘ԁCŠ„ž‚Ý—Dæ“xƒ}ƒXƒN‘S‰ðœó‘Ô‚Å
    157  *  ŒÄ‚яo‚·‚±‚ƁD
     143 *  最高優先順位タスクのサーチ
     144 *
     145 *  実行可能状態のタスクの中から最も優先順位が高いタスクの初期優先度を
     146 *  返す.
     147 *
     148 *  本関数はCPUロック状態,全割込みロック解除状態,割込み優先度マスク全解除状態で
     149 *  呼び出すこと.
    158150 */
    159151extern uint_t search_schedtsk(void);
    160152
    161153/*
    162  *  ƒ^ƒXƒN‚ÌŽÀs
    163  *
    164  *  ipri‚ÅŽw’肵‚½‹N“®Žž—Dæ“x‚ðŽ‚Âƒ^ƒXƒN‚ðŽÀs‚·‚éD
    165  *  –{ŠÖ”‚©‚çŽÀs‚µ‚½ƒ^ƒXƒN‚©‚çƒT[ƒrƒXƒR[ƒ‹‚ðŒo—R‚µ‚Ä
    166  *  Ä‹A“I‚ɌĂ΂ê‚邱‚Æ‚à‚ ‚éD
    167  *
    168  *  –{ŠÖ”‚ÍCPUƒƒbƒNó‘ԁC‘SŠ„ž‚݃ƒbƒN‰ðœó‘ԁCŠ„ž‚Ý—Dæ“xƒ}ƒXƒN‘S‰ðœó‘Ô‚Å
    169  *  ŒÄ‚яo‚·‚±‚ƁD
     154 *  タスクの実行
     155 *
     156 *  ipriで指定した起動時優先度を持つタスクを実行する.
     157 *  本関数から実行したタスクからサービスコールを経由して
     158 *  再帰的に呼ばれることもある.
     159 *
     160 *  本関数はCPUロック状態,全割込みロック解除状態,割込み優先度マスク全解除状態で
     161 *  呼び出すこと.
    170162 */
    171163extern void run_task(uint_t ipri);
    172164
    173165/*
    174  *  ƒ^ƒXƒNƒfƒBƒXƒpƒbƒ`ƒƒ
    175  *
    176  *  ƒJ[ƒlƒ‹‰Šú‰»Š®—¹Œã‚ɌĂяo‚³‚êCÅ‚—Dæ‡ˆÊ‚Æ‚È‚Á‚½ƒ^ƒXƒN‚ðŽÀs‚·‚éD
    177  *
    178  *  –{ŠÖ”‚ÍCPUƒƒbƒNó‘ԁC‘SŠ„ž‚݃ƒbƒN‰ðœó‘ԁCŠ„ž‚Ý—Dæ“xƒ}ƒXƒN‘S‰ðœó‘Ô‚Å
    179  *  ŒÄ‚яo‚·‚±‚ƁD
    180  *  ‚È‚¨C–{ŠÖ”‚©‚ç‚̓Šƒ^[ƒ“‚µ‚È‚¢D
     166 *  タスクディスパッチャ
     167 *
     168 *  カーネル初期化完了後に呼び出され,最高優先順位となったタスクを実行する.
     169 *
     170 *  本関数はCPUロック状態,全割込みロック解除状態,割込み優先度マスク全解除状態で
     171 *  呼び出すこと.
     172 *  なお,本関数からはリターンしない.
    181173 * 
    182174 */
     
    184176
    185177/*
    186  *  ƒ^ƒXƒN‚Ì‹N“®Žž—Dæ“xŽæ“¾(ƒ^ƒXƒNƒRƒ“ƒeƒLƒXƒg—p)
    187  *
    188  *  tskid‚ÅŽw’肵‚½ƒ^ƒXƒN‚Ì‹N“®Žž—Dæ“x‚ðŽæ“¾‚·‚éD
    189  *  tskid‚ÍTMIN_TSKIDˆÈãCtmax_tskidˆÈ‰º‚Ì’lC‚à‚µ‚­‚ÍTSK_SELF‚Å
    190  *  Žw’肵‚È‚¯‚ê‚΂Ȃç‚È‚¢D
     178 *  タスクの起動時優先度取得(タスクコンテキスト用)
     179 *
     180 *  tskidで指定したタスクの起動時優先度を取得する.
     181 *  tskidはTMIN_TSKID以上,tmax_tskid以下の値,もしくはTSK_SELFで
     182 *  指定しなければならない.
    191183 */
    192184extern uint_t get_ipri_self(ID tskid);
    193185
    194186/*
    195  *  ƒ^ƒXƒN‚Ì‹N“®Žž—Dæ“xŽæ“¾(”ñƒ^ƒXƒNƒRƒ“ƒeƒLƒXƒg—p)
    196  *
    197  *  tskid‚ÅŽw’肵‚½ƒ^ƒXƒN‚Ì‹N“®Žž—Dæ“x‚ðŽæ“¾‚·‚éD
    198  *  tskid‚ÍTMIN_TSKIDˆÈãCtmax_tskidˆÈ‰º‚Ì’l‚ÅŽw’肵‚È‚¯‚ê‚΂Ȃç‚È‚¢D
     187 *  タスクの起動時優先度取得(非タスクコンテキスト用)
     188 *
     189 *  tskidで指定したタスクの起動時優先度を取得する.
     190 *  tskidはTMIN_TSKID以上,tmax_tskid以下の値で指定しなければならない.
    199191 */
    200192extern uint_t get_ipri(ID tskid);
    201193
    202194
    203 /* ‹N“®—v‹ƒLƒ
    204 [ƒCƒ“ƒOƒrƒbƒgƒ}ƒbƒv‚Ì‘€ì */
     195/* 起動要求キューイングビットマップの操作 */
    205196#define ACTQUE_BIT(ipri)                        (1U << (ipri))
    206197
    207 /* ‹N“®—v‹ƒLƒ
    208 [ƒCƒ“ƒO‚̃Zƒbƒg */
     198/* 起動要求キューイングのセット */
    209199Inline
    210200void actque_set(uint_t ipri)
     
    213203}
    214204
    215 /* ‹N“®—v‹ƒLƒ
    216 [ƒCƒ“ƒO‚̃NƒŠƒA */
     205/* 起動要求キューイングのクリア */
    217206Inline
    218207void actque_clear(uint_t ipri)
     
    221210}
    222211
    223 /* ‹N“®—v‹ƒLƒ
    224 [ƒCƒ“ƒO”‚̃`ƒFƒbƒN */
     212/* 起動要求キューイング数のチェック */
    225213Inline
    226214bool_t actque_test(uint_t ipri)
Note: See TracChangeset for help on using the changeset viewer.