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

    • Property svn:mime-type changed from text/x-chdr to text/x-chdr; 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
     
    6752
    6853/*
    69  *  トレースログマクロのデフォルト定義
     54 *  トレースログマクロのデフォルト定義
    7055 */
    7156#ifndef LOG_TSKSTAT
     
    7459
    7560/*
    76  *  タスク優å
    77 ˆåº¦ã®å†
    78 éƒ¨è¡¨ç¾ãƒ»å¤–部表現変換マクロ
     61 *  タスク優先度の内部表現・外部表現変換マクロ
    7962 */
    8063#define INT_PRIORITY(x)         ((uint_t)((x) - TMIN_TPRI))
     
    8265
    8366/*
    84  *  タスク状æ
    85 ‹ã®å†
    86 éƒ¨è¡¨ç¾
    87  *
    88  *  TCB中のタスク状æ
    89 ‹ã§ã¯ï¼Œå®Ÿè¡ŒçŠ¶æ
    90 ‹ï¼ˆRUNNING)と実行可能状æ
    91 ‹ï¼ˆREADY)
    92  *  は区別しない.両状æ
    93 ‹ã‚’総称して,実行できる状æ
    94 ‹ï¼ˆRUNNABLE)と呼ぶ.
    95  *  二重å¾
    96 ã¡çŠ¶æ
    97 ‹ã¯ï¼Œ(TS_WAITING | TS_SUSPENDED)で表す.TS_WAIT_???はå¾
    98 
    99  *  ち要因を表し,å¾
    100 ã¡çŠ¶æ
    101 ‹ï¼ˆäºŒé‡å¾
    102 ã¡çŠ¶æ
    103 ‹ã‚’含む)の場合にのみ設定する.
    104  */
    105 #define TS_DORMANT              0x00U                   /* 休止状æ
    106 ‹ */
    107 #define TS_RUNNABLE             0x01U                   /* 実行できる状æ
    108 ‹ */
    109 #define TS_WAITING              0x02U                   /* å¾
    110 ã¡çŠ¶æ
    111 ‹ */
    112 #define TS_SUSPENDED    0x04U                   /* 強制å¾
    113 ã¡çŠ¶æ
    114 ‹ */
    115 
    116 #define TS_WAIT_DLY             (0x00U << 3)    /* 時間経過å¾
    117 ã¡ */
    118 #define TS_WAIT_SLP             (0x01U << 3)    /* 起床å¾
    119 ã¡ */
    120 #define TS_WAIT_RDTQ    (0x02U << 3)    /* データキューからの受信å¾
    121 ã¡ */
    122 #define TS_WAIT_RPDQ    (0x03U << 3)    /* 優å
    123 ˆåº¦ãƒ‡ãƒ¼ã‚¿ã‚­ãƒ¥ãƒ¼ã‹ã‚‰ã®å—ä¿¡å¾
    124 ã¡ */
    125 #define TS_WAIT_SEM             (0x04U << 3)    /* セマフォ資源の獲得å¾
    126 ã¡ */
    127 #define TS_WAIT_FLG             (0x05U << 3)    /* イベントフラグå¾
    128 ã¡ */
    129 #define TS_WAIT_SDTQ    (0x06U << 3)    /* データキューへの送信å¾
    130 ã¡ */
    131 #define TS_WAIT_SPDQ    (0x07U << 3)    /* 優å
    132 ˆåº¦ãƒ‡ãƒ¼ã‚¿ã‚­ãƒ¥ãƒ¼ã¸ã®é€ä¿¡å¾
    133 ã¡ */
    134 #define TS_WAIT_MBX             (0x08U << 3)    /* メールボックスからの受信å¾
    135 ã¡ */
    136 #define TS_WAIT_MPF             (0x09U << 3)    /* 固定長メモリブロックの獲得å¾
    137 ã¡ */
    138 
    139 /*
    140  *  タスク状æ
    141 ‹åˆ¤åˆ¥ãƒžã‚¯ãƒ­
    142  *
    143  *  TSTAT_DORMANTはタスクが休止状æ
    144 ‹ã§ã‚るかどうかを,TSTAT_RUNNABLEは
    145  *  タスクが実行できる状æ
    146 ‹ã§ã‚るかどうかを判別する.TSTAT_WAITINGはå¾
    147 
    148  *  ち状æ
    149 ‹ã¨äºŒé‡å¾
    150 ã¡çŠ¶æ
    151 ‹ã®ã„ずれかであるかどうかを,TSTAT_SUSPENDEDは
    152  *  強制å¾
    153 ã¡çŠ¶æ
    154 ‹ã¨äºŒé‡å¾
    155 ã¡çŠ¶æ
    156 ‹ã®ã„ずれかであるかどうかを判別する.
     67 *  タスク状態の内部表現
     68 *
     69 *  TCB中のタスク状態では,実行状態(RUNNING)と実行可能状態(READY)
     70 *  は区別しない.両状態を総称して,実行できる状態(RUNNABLE)と呼ぶ.
     71 *  二重待ち状態は,(TS_WAITING | TS_SUSPENDED)で表す.TS_WAIT_???は待
     72 *  ち要因を表し,待ち状態(二重待ち状態を含む)の場合にのみ設定する.
     73 */
     74#define TS_DORMANT              0x00U                   /* 休止状態 */
     75#define TS_RUNNABLE             0x01U                   /* 実行できる状態 */
     76#define TS_WAITING              0x02U                   /* 待ち状態 */
     77#define TS_SUSPENDED    0x04U                   /* 強制待ち状態 */
     78
     79#define TS_WAIT_DLY             (0x00U << 3)    /* 時間経過待ち */
     80#define TS_WAIT_SLP             (0x01U << 3)    /* 起床待ち */
     81#define TS_WAIT_RDTQ    (0x02U << 3)    /* データキューからの受信待ち */
     82#define TS_WAIT_RPDQ    (0x03U << 3)    /* 優先度データキューからの受信待ち */
     83#define TS_WAIT_SEM             (0x04U << 3)    /* セマフォ資源の獲得待ち */
     84#define TS_WAIT_FLG             (0x05U << 3)    /* イベントフラグ待ち */
     85#define TS_WAIT_SDTQ    (0x06U << 3)    /* データキューへの送信待ち */
     86#define TS_WAIT_SPDQ    (0x07U << 3)    /* 優先度データキューへの送信待ち */
     87#define TS_WAIT_MBX             (0x08U << 3)    /* メールボックスからの受信待ち */
     88#define TS_WAIT_MPF             (0x09U << 3)    /* 固定長メモリブロックの獲得待ち */
     89
     90/*
     91 *  タスク状態判別マクロ
     92 *
     93 *  TSTAT_DORMANTはタスクが休止状態であるかどうかを,TSTAT_RUNNABLEは
     94 *  タスクが実行できる状態であるかどうかを判別する.TSTAT_WAITINGは待
     95 *  ち状態と二重待ち状態のいずれかであるかどうかを,TSTAT_SUSPENDEDは
     96 *  強制待ち状態と二重待ち状態のいずれかであるかどうかを判別する.
    15797 */
    15898#define TSTAT_DORMANT(tstat)    ((tstat) == TS_DORMANT)
     
    162102
    163103/*
    164  *  タスクå¾
    165 ã¡è¦å› åˆ¤åˆ¥ãƒžã‚¯ãƒ­
    166  *
    167  *  TSTAT_WAIT_SLPはタスクが起床å¾
    168 ã¡ã§ã‚るかどうかを,TSTAT_WAIT_WOBJ
    169  *  はタスクが同期・通信オブジェクトに対するå¾
    170 ã¡ã§ã‚るか(言い換えると,
    171  *  同期通信オブジェクトのå¾
    172 ã¡ã‚­ãƒ¥ãƒ¼ã«ã¤ãªãŒã‚Œã¦ã„るか)どうかを判別す
    173  *  る.また,TSTAT_WAIT_WOBJCBはタスクが同期・通信オブジェクトの管理
    174  *  ブロックのå
    175 ±é€šéƒ¨åˆ†ï¼ˆWOBJCB)のå¾
    176 ã¡ã‚­ãƒ¥ãƒ¼ã«ã¤ãªãŒã‚Œã¦ã„るかどうかを
    177  *  判別する.
    178  *
    179  *  TSTAT_WAIT_SLPは,任意のタスク状æ
    180 ‹ã®ä¸­ã‹ã‚‰ï¼Œã‚¿ã‚¹ã‚¯ãŒèµ·åºŠå¾
    181 ã¡ã§ã‚ã‚‹
    182  *  ことを判別できる.すなわち,TSTAT_WAITINGによりå¾
    183 ã¡çŠ¶æ
    184 ‹ã§ã‚ることを
    185  *  判別せずに,TSTAT_SLPだけを用いて起床å¾
    186 ã¡çŠ¶æ
    187 ‹ã§ã‚ることを判別できる.
    188  *  これを効率的に実現するために,TS_WAIT_SLPの値を,(0x00U << 3)ではな
    189  *  く(0x01U << 3)としている.そのため,タスクが時間経過å¾
    190 ã¡çŠ¶æ
    191 ‹ã§ã‚ã‚‹
    192  *  ことを判別するためのTSTAT_WAIT_DLYを,TSTAT_WAIT_SLPと同様の方法で
    193  *  実現することはできない.
    194  */
    195 #define TS_WAIT_MASK    (0x0fU << 3)    /* å¾
    196 ã¡è¦å› ã®å–出しマスク */
     104 *  タスク待ち要因判別マクロ
     105 *
     106 *  TSTAT_WAIT_SLPはタスクが起床待ちであるかどうかを,TSTAT_WAIT_WOBJ
     107 *  はタスクが同期・通信オブジェクトに対する待ちであるか(言い換えると,
     108 *  同期通信オブジェクトの待ちキューにつながれているか)どうかを判別す
     109 *  る.また,TSTAT_WAIT_WOBJCBはタスクが同期・通信オブジェクトの管理
     110 *  ブロックの共通部分(WOBJCB)の待ちキューにつながれているかどうかを
     111 *  判別する.
     112 *
     113 *  TSTAT_WAIT_SLPは,任意のタスク状態の中から,タスクが起床待ちである
     114 *  ことを判別できる.すなわち,TSTAT_WAITINGにより待ち状態であることを
     115 *  判別せずに,TSTAT_SLPだけを用いて起床待ち状態であることを判別できる.
     116 *  これを効率的に実現するために,TS_WAIT_SLPの値を,(0x00U << 3)ではな
     117 *  く(0x01U << 3)としている.そのため,タスクが時間経過待ち状態である
     118 *  ことを判別するためのTSTAT_WAIT_DLYを,TSTAT_WAIT_SLPと同様の方法で
     119 *  実現することはできない.
     120 */
     121#define TS_WAIT_MASK    (0x0fU << 3)    /* 待ち要因の取出しマスク */
    197122
    198123#define TSTAT_WAIT_SLP(tstat)           (((tstat) & TS_WAIT_MASK) == TS_WAIT_SLP)
     
    201126
    202127/*
    203  *  å¾
    204 ã¡æƒ
    205 å ±ãƒ–ロック(WINFO)の定義
    206  *
    207  *  タスクがå¾
    208 ã¡çŠ¶æ
    209 ‹ã®é–“は,TCBおよびそのp_winfoで指されるWINFOを次の
    210  *  ように設定しなければならない.
    211  *
    212  *  (a) TCBのタスク状æ
    213 ‹ã‚’å¾
    214 ã¡çŠ¶æ
    215 ‹ï¼ˆTS_WAITING)にする.その際に,å¾
    216 ã¡
    217  *  要因(TS_WAIT_???)も設定する.
    218  *
    219  *  (b) タイムアウトを監視するために,タイムイベントブロックを登録する.
    220  *  登録するタイムイベントブロックは,å¾
    221 ã¡ã«å
    222 ¥ã‚‹ã‚µãƒ¼ãƒ“スコール処理関数
    223  *  のローカル変数として確保し,それへのポインタをWINFOのp_tmevtbに記
    224  *  憶する.タイムアウトの監視がå¿
    225 è¦ãªã„場合(永ä¹
    226 å¾
    227 ã¡ã®å ´åˆï¼‰ã«ã¯ï¼Œ
    228  *  p_tmevtbをNULLにする.
    229  *
    230  *  同期・通信オブジェクトに対するå¾
    231 ã¡çŠ¶æ
    232 ‹ã®å ´åˆã«ã¯ï¼Œæ¨™æº–のWINFOに
    233  *  p_wobjcbフィールドを追加した構造体(WINFO_WOBJ,wait.hで定義)を使
    234  *  う.また,以下の(c)~(e)の設定を行うå¿
    235 è¦ãŒã‚る.同期・通信オブジェ
    236  *  クトに関係しないå¾
    237 ã¡ï¼ˆèµ·åºŠå¾
    238 ã¡ï¼Œæ™‚間経過å¾
    239 ã¡ï¼‰ã®å ´åˆã«ã¯ï¼Œ(c)~(e)
    240  *  はå¿
    241 è¦ãªã„.
    242  *
    243  *  (c) TCBをå¾
    244 ã¡å¯¾è±¡ã®åŒæœŸãƒ»é€šä¿¡ã‚ªãƒ–ジェクトのå¾
    245 ã¡ã‚­ãƒ¥ãƒ¼ã«ã¤ãªãï¼Žå¾
    246 
    247  *  ちキューにつなぐために,task_queueを使う.
    248  *
    249  *  (d) å¾
    250 ã¡å¯¾è±¡ã®åŒæœŸãƒ»é€šä¿¡ã‚ªãƒ–ジェクトの管理ブロックへのポインタを,
    251  *  WINFO_WOBJのp_wobjcbに記憶する.
    252  *
    253  *  (e) å¾
    254 ã¡å¯¾è±¡ã®åŒæœŸãƒ»é€šä¿¡ã‚ªãƒ–ジェクトに依存して記憶することがå¿
    255 è¦ãª
    256  *  æƒ
    257 å ±ãŒã‚る場合には,WINFO_WOBJにå¿
    258 è¦ãªæƒ
    259 å ±ã®ãŸã‚ã®ãƒ•ã‚£ãƒ¼ãƒ«ãƒ‰ã‚’追加
    260  *  した構造体を定義し,WINFO_WOBJの代わりに用いる.
    261  *
    262  *  å¾
    263 ã¡çŠ¶æ
    264 ‹ã‚’解除する際には,å¾
    265 ã¡è§£é™¤ã—たタスクに対する返値をWINFOの
    266  *  wercdに設定する.wercdがå¿
    267 è¦ãªã®ã¯å¾
    268 ã¡è§£é™¤ä»¥é™ã§ã‚るのに対して,
    269  *  p_tmevtbはå¾
    270 ã¡è§£é™¤å¾Œã¯å¿
    271 è¦ãªã„ため,メモリ節約のためにå
    272 ±ç”¨ä½“を使っ
    273  *  ている.そのため,wercdへエラーコードを設定するのは,タイムイベント
    274  *  ブロックを登録解除した後にしなければならない.
     128 *  待ち情報ブロック(WINFO)の定義
     129 *
     130 *  タスクが待ち状態の間は,TCBおよびそのp_winfoで指されるWINFOを次の
     131 *  ように設定しなければならない.
     132 *
     133 *  (a) TCBのタスク状態を待ち状態(TS_WAITING)にする.その際に,待ち
     134 *  要因(TS_WAIT_???)も設定する.
     135 *
     136 *  (b) タイムアウトを監視するために,タイムイベントブロックを登録する.
     137 *  登録するタイムイベントブロックは,待ちに入るサービスコール処理関数
     138 *  のローカル変数として確保し,それへのポインタをWINFOのp_tmevtbに記
     139 *  憶する.タイムアウトの監視が必要ない場合(永久待ちの場合)には,
     140 *  p_tmevtbをNULLにする.
     141 *
     142 *  同期・通信オブジェクトに対する待ち状態の場合には,標準のWINFOに
     143 *  p_wobjcbフィールドを追加した構造体(WINFO_WOBJ,wait.hで定義)を使
     144 *  う.また,以下の(c)~(e)の設定を行う必要がある.同期・通信オブジェ
     145 *  クトに関係しない待ち(起床待ち,時間経過待ち)の場合には,(c)~(e)
     146 *  は必要ない.
     147 *
     148 *  (c) TCBを待ち対象の同期・通信オブジェクトの待ちキューにつなぐ.待
     149 *  ちキューにつなぐために,task_queueを使う.
     150 *
     151 *  (d) 待ち対象の同期・通信オブジェクトの管理ブロックへのポインタを,
     152 *  WINFO_WOBJのp_wobjcbに記憶する.
     153 *
     154 *  (e) 待ち対象の同期・通信オブジェクトに依存して記憶することが必要な
     155 *  情報がある場合には,WINFO_WOBJに必要な情報のためのフィールドを追加
     156 *  した構造体を定義し,WINFO_WOBJの代わりに用いる.
     157 *
     158 *  待ち状態を解除する際には,待ち解除したタスクに対する返値をWINFOの
     159 *  wercdに設定する.wercdが必要なのは待ち解除以降であるのに対して,
     160 *  p_tmevtbは待ち解除後は必要ないため,メモリ節約のために共用体を使っ
     161 *  ている.そのため,wercdへエラーコードを設定するのは,タイムイベント
     162 *  ブロックを登録解除した後にしなければならない.
    275163 */
    276164typedef union waiting_information {
    277         ER              wercd;                  /* å¾
    278 ã¡è§£é™¤æ™‚のエラーコード */
    279         TMEVTB  *p_tmevtb;              /* å¾
    280 ã¡çŠ¶æ
    281 ‹ç”¨ã®ã‚¿ã‚¤ãƒ ã‚¤ãƒ™ãƒ³ãƒˆãƒ–ロック */
     165        ER              wercd;                  /* 待ち解除時のエラーコード */
     166        TMEVTB  *p_tmevtb;              /* 待ち状態用のタイムイベントブロック */
    282167} WINFO;
    283168
    284169/*
    285  *  タスク初期化ブロック
    286  *
    287  *  タスクに関するæƒ
    288 å ±ã‚’,値が変わらないためにROMに置ける部分(タスク
    289  *  初期化ブロック)と,値が変化するためにRAMに置かなければならない部
    290  *  分(タスク管理ブロック,TCB)に分離し,TCBå†
    291 ã«å¯¾å¿œã™ã‚‹ã‚¿ã‚¹ã‚¯åˆæœŸåŒ–
    292  *  ブロックを指すポインタをå
    293 ¥ã‚Œã‚‹ï¼Žã‚¿ã‚¹ã‚¯åˆæœŸåŒ–ブロックå†
    294 ã«å¯¾å¿œã™ã‚‹
    295  *  TCBを指すポインタをå
    296 ¥ã‚Œã‚‹æ–¹æ³•ã®æ–¹ãŒï¼ŒRAMの節約の観点からは望ましい
    297  *  が,実行効率が悪くなるために採用していない.他のオブジェクトについ
    298  *  ても同様に扱う.
    299  *
    300  *  タスク初期化ブロックには,DEF_TEXで定義されるタスク例外処理ルーチ
    301  *  ンに関するæƒ
    302 å ±ã‚‚含む.
     170 *  タスク初期化ブロック
     171 *
     172 *  タスクに関する情報を,値が変わらないためにROMに置ける部分(タスク
     173 *  初期化ブロック)と,値が変化するためにRAMに置かなければならない部
     174 *  分(タスク管理ブロック,TCB)に分離し,TCB内に対応するタスク初期化
     175 *  ブロックを指すポインタを入れる.タスク初期化ブロック内に対応する
     176 *  TCBを指すポインタを入れる方法の方が,RAMの節約の観点からは望ましい
     177 *  が,実行効率が悪くなるために採用していない.他のオブジェクトについ
     178 *  ても同様に扱う.
     179 *
     180 *  タスク初期化ブロックには,DEF_TEXで定義されるタスク例外処理ルーチ
     181 *  ンに関する情報も含む.
    303182 */
    304183typedef struct task_initialization_block {
    305         ATR                     tskatr;                 /* タスク属性 */
    306         intptr_t        exinf;                  /* タスクの拡張æƒ
    307 å ± */
    308         TASK            task;                   /* タスクの起動番地 */
    309         uint_t          ipriority;              /* タスクの起動時優å
    310 ˆåº¦ï¼ˆå†
    311 éƒ¨è¡¨ç¾ï¼‰ */
     184        ATR                     tskatr;                 /* タスク属性 */
     185        intptr_t        exinf;                  /* タスクの拡張情報 */
     186        TASK            task;                   /* タスクの起動番地 */
     187        uint_t          ipriority;              /* タスクの起動時優先度(内部表現) */
    312188
    313189#ifdef USE_TSKINICTXB
    314         TSKINICTXB      tskinictxb;             /* タスク初期化コンテキストブロック */
     190        TSKINICTXB      tskinictxb;             /* タスク初期化コンテキストブロック */
    315191#else /* USE_TSKINICTXB */
    316         SIZE            stksz;                  /* スタック領域のサイズ(丸めた値) */
    317         void            *stk;                   /* スタック領域のå
    318 ˆé ­ç•ªåœ° */
     192        SIZE            stksz;                  /* スタック領域のサイズ(丸めた値) */
     193        void            *stk;                   /* スタック領域の先頭番地 */
    319194#endif /* USE_TSKINICTXB */
    320195
    321         ATR                     texatr;                 /* タスク例外処理ルーチン属性 */
    322         TEXRTN          texrtn;                 /* タスク例外処理ルーチンの起動番地 */
     196        ATR                     texatr;                 /* タスク例外処理ルーチン属性 */
     197        TEXRTN          texrtn;                 /* タスク例外処理ルーチンの起動番地 */
    323198} TINIB;
    324199
    325200/*
    326  *  TCB中のフィールドのビットå¹
    327 ã®å®šç¾©
    328  *
    329  *  プロセッサによっては,TCB中のフィールドのビットå¹
    330 ã§ãƒ¡ãƒ¢ãƒªä½¿ç”¨é‡ã¨
    331  *  性能がトレードオフになるため,ターゲット依存にフィールドのビットå¹
    332 
    333  *  を変更することを許している.
     201 *  TCB中のフィールドのビット幅の定義
     202 *
     203 *  プロセッサによっては,TCB中のフィールドのビット幅でメモリ使用量と
     204 *  性能がトレードオフになるため,ターゲット依存にフィールドのビット幅
     205 *  を変更することを許している.
    334206 */
    335207#ifndef TBIT_TCB_PRIORITY
    336 #define TBIT_TCB_PRIORITY               8               /* priorityフィールドのビットå¹
    337  */
     208#define TBIT_TCB_PRIORITY               8               /* priorityフィールドのビット幅 */
    338209#endif /* TBIT_TCB_PRIORITY */
    339210
    340211/*
    341  *  タスク管理ブロック(TCB)
    342  *
    343  *  ASPカーネルでは,タスクの起動要求キューイング数の最大値(TMAX_ACTCNT)
    344  *  と起床要求キューイング数の最大値(TMAX_WUPCNT)は1に固定されている
    345  *  ため,キューイングされているかどうかの真偽値で表現することができる.
    346  *  また,強制å¾
    347 ã¡è¦æ±‚ネスト数の最大値(TMAX_SUSCNT)が1に固定されてい
    348  *  るので,強制å¾
    349 ã¡è¦æ±‚ネスト数(suscnt)はå¿
    350 è¦ãªã„.
    351  *
    352  *  TCBのいくつかのフィールドは,特定のタスク状æ
    353 ‹ã§ã®ã¿æœ‰åŠ¹ãªå€¤ã‚’保持し,
    354  *  それ以外の場合は値が保証されない(よって,参ç
    355 §ã—てはならない).各
    356  *  フィールドが有効な値を保持する条件は次の通り.
    357  *
    358  *  ・初期化後は常に有効:
    359  *              p_tinib,tstat,actque
    360  *  ・休止状æ
    361 ‹ä»¥å¤–で有効(休止状æ
    362 ‹ã§ã¯åˆæœŸå€¤ã«ãªã£ã¦ã„る):
    363  *              priority,wupque,enatex,texptn
    364  *  ・å¾
    365 ã¡çŠ¶æ
    366 ‹ï¼ˆäºŒé‡å¾
    367 ã¡çŠ¶æ
    368 ‹ã‚’含む)で有効:
     212 *  タスク管理ブロック(TCB)
     213 *
     214 *  ASPカーネルでは,タスクの起動要求キューイング数の最大値(TMAX_ACTCNT)
     215 *  と起床要求キューイング数の最大値(TMAX_WUPCNT)は1に固定されている
     216 *  ため,キューイングされているかどうかの真偽値で表現することができる.
     217 *  また,強制待ち要求ネスト数の最大値(TMAX_SUSCNT)が1に固定されてい
     218 *  るので,強制待ち要求ネスト数(suscnt)は必要ない.
     219 *
     220 *  TCBのいくつかのフィールドは,特定のタスク状態でのみ有効な値を保持し,
     221 *  それ以外の場合は値が保証されない(よって,参照してはならない).各
     222 *  フィールドが有効な値を保持する条件は次の通り.
     223 *
     224 *  ・初期化後は常に有効:
     225 *              p_tinib,tstat,actque
     226 *  ・休止状態以外で有効(休止状態では初期値になっている):
     227 *              priority,wupque,enatex,texptn
     228 *  ・待ち状態(二重待ち状態を含む)で有効:
    369229 *              p_winfo
    370  *  ・実行できる状æ
    371 ‹ã¨åŒæœŸãƒ»é€šä¿¡ã‚ªãƒ–ジェクトに対するå¾
    372 ã¡çŠ¶æ
    373 ‹ã§æœ‰åŠ¹ï¼š
     230 *  ・実行できる状態と同期・通信オブジェクトに対する待ち状態で有効:
    374231 *              task_queue
    375  *  ・実行可能状æ
    376 ‹ï¼Œå¾
    377 ã¡çŠ¶æ
    378 ‹ï¼Œå¼·åˆ¶å¾
    379 ã¡çŠ¶æ
    380 ‹ï¼ŒäºŒé‡å¾
    381 ã¡çŠ¶æ
    382 ‹ã§æœ‰åŠ¹ï¼š
     232 *  ・実行可能状態,待ち状態,強制待ち状態,二重待ち状態で有効:
    383233 *              tskctxb
    384234 */
    385235typedef struct task_control_block {
    386         QUEUE                   task_queue;             /* タスクキュー */
    387         const TINIB             *p_tinib;               /* 初期化ブロックへのポインタ */
     236        QUEUE                   task_queue;             /* タスクキュー */
     237        const TINIB             *p_tinib;               /* 初期化ブロックへのポインタ */
    388238
    389239#ifdef UINT8_MAX
    390         uint8_t                 tstat;                  /* タスク状æ
    391 ‹ï¼ˆå†
    392 éƒ¨è¡¨ç¾ï¼‰*/
     240        uint8_t                 tstat;                  /* タスク状態(内部表現)*/
    393241#else /* UINT8_MAX */
    394         BIT_FIELD_UINT  tstat : 8;              /* タスク状æ
    395 ‹ï¼ˆå†
    396 éƒ¨è¡¨ç¾ï¼‰*/
     242        BIT_FIELD_UINT  tstat : 8;              /* タスク状態(内部表現)*/
    397243#endif /* UINT8_MAX */
    398244#if defined(UINT8_MAX) && (TBIT_TCB_PRIORITY == 8)
    399         uint8_t                 priority;               /* 現在の優å
    400 ˆåº¦ï¼ˆå†
    401 éƒ¨è¡¨ç¾ï¼‰*/
     245        uint8_t                 priority;               /* 現在の優先度(内部表現)*/
    402246#else /* defined(UINT8_MAX) && (TBIT_TCB_PRIORITY == 8) */
    403247        BIT_FIELD_UINT  priority : TBIT_TCB_PRIORITY;
    404                                                                         /* 現在の優å
    405 ˆåº¦ï¼ˆå†
    406 éƒ¨è¡¨ç¾ï¼‰*/
     248                                                                        /* 現在の優先度(内部表現)*/
    407249#endif /* defined(UINT8_MAX) && (TBIT_TCB_PRIORITY == 8) */
    408         BIT_FIELD_BOOL  actque : 1;             /* 起動要求キューイング */
    409         BIT_FIELD_BOOL  wupque : 1;             /* 起床要求キューイング */
    410         BIT_FIELD_BOOL  enatex : 1;             /* タスク例外処理許可状æ
    411 ‹ */
    412 
    413         TEXPTN                  texptn;                 /* 保留例外要因 */
    414         WINFO                   *p_winfo;               /* å¾
    415 ã¡æƒ
    416 å ±ãƒ–ロックへのポインタ */
    417         TSKCTXB                 tskctxb;                /* タスクコンテキストブロック */
     250        BIT_FIELD_BOOL  actque : 1;             /* 起動要求キューイング */
     251        BIT_FIELD_BOOL  wupque : 1;             /* 起床要求キューイング */
     252        BIT_FIELD_BOOL  enatex : 1;             /* タスク例外処理許可状態 */
     253
     254        TEXPTN                  texptn;                 /* 保留例外要因 */
     255        WINFO                   *p_winfo;               /* 待ち情報ブロックへのポインタ */
     256        TSKCTXB                 tskctxb;                /* タスクコンテキストブロック */
    418257} TCB;
    419258
    420259/*
    421  *  実行状æ
    422 ‹ã®ã‚¿ã‚¹ã‚¯
    423  *
    424  *  実行状æ
    425 ‹ã®ã‚¿ã‚¹ã‚¯ï¼ˆï¼ãƒ—ロセッサがコンテキストを持っているタスク)の
    426  *  TCBを指すポインタ.実行状æ
    427 ‹ã®ã‚¿ã‚¹ã‚¯ãŒãªã„場合はNULLにする.
    428  *
    429  *  サービスコールの処理中で,自タスク(サービスコールを呼び出したタス
    430  *  ク)に関するæƒ
    431 å ±ã‚’参ç
    432 §ã™ã‚‹å ´åˆã¯p_runtskを使う.p_runtskを書き換え
    433  *  るのは,ディスパッチャ(と初期化処理)のみである.
     260 *  実行状態のタスク
     261 *
     262 *  実行状態のタスク(=プロセッサがコンテキストを持っているタスク)の
     263 *  TCBを指すポインタ.実行状態のタスクがない場合はNULLにする.
     264 *
     265 *  サービスコールの処理中で,自タスク(サービスコールを呼び出したタス
     266 *  ク)に関する情報を参照する場合はp_runtskを使う.p_runtskを書き換え
     267 *  るのは,ディスパッチャ(と初期化処理)のみである.
    434268 */
    435269extern TCB      *p_runtsk;
    436270
    437271/*
    438  *  最高優å
    439 ˆé †ä½ã®ã‚¿ã‚¹ã‚¯
    440  *
    441  *  実行できるタスクの中で最高優å
    442 ˆé †ä½ã®ã‚¿ã‚¹ã‚¯ã®TCBを指すポインタ.実
    443  *  行できるタスクがない場合はNULLにする.
    444  *
    445  *  ディスパッチ禁止状æ
    446 ‹ãªã©ï¼Œãƒ‡ã‚£ã‚¹ãƒ‘ッチが保留されている間はp_runtsk
    447  *  と一致しているとは限らない.
     272 *  最高優先順位のタスク
     273 *
     274 *  実行できるタスクの中で最高優先順位のタスクのTCBを指すポインタ.実
     275 *  行できるタスクがない場合はNULLにする.
     276 *
     277 *  ディスパッチ禁止状態など,ディスパッチが保留されている間はp_runtsk
     278 *  と一致しているとは限らない.
    448279 */
    449280extern TCB      *p_schedtsk;
    450281
    451282/*
    452  *  ディスパッチ/タスク例外処理ルーチン起動要求フラグ
    453  *
    454  *  割込みハンドラ/CPU例外ハンドラの出口処理に,ディスパッチまたは
    455  *  タスク例外処理ルーチンの起動を要求することを示すフラグ.
     283 *  ディスパッチ/タスク例外処理ルーチン起動要求フラグ
     284 *
     285 *  割込みハンドラ/CPU例外ハンドラの出口処理に,ディスパッチまたは
     286 *  タスク例外処理ルーチンの起動を要求することを示すフラグ.
    456287 */
    457288extern bool_t   reqflg;
    458289
    459290/*
    460  *  割込み優å
    461 ˆåº¦ãƒžã‚¹ã‚¯å
    462 ¨è§£é™¤çŠ¶æ
    463 ‹
    464  *
    465  *  割込み優å
    466 ˆåº¦ãƒžã‚¹ã‚¯å
    467 ¨è§£é™¤çŠ¶æ
    468 ‹ã§ã‚ることを示すフラグ.
     291 *  割込み優先度マスク全解除状態
     292 *
     293 *  割込み優先度マスク全解除状態であることを示すフラグ.
    469294 */
    470295extern bool_t   ipmflg;
    471296
    472297/*
    473  *  ディスパッチ禁止状æ
    474 ‹
    475  *
    476  *  ディスパッチ禁止状æ
    477 ‹ã§ã‚ることを示すフラグ.
     298 *  ディスパッチ禁止状態
     299 *
     300 *  ディスパッチ禁止状態であることを示すフラグ.
    478301 */
    479302extern bool_t   disdsp;
    480303
    481304/*
    482  *  タスクディスパッチ可能状æ
    483 ‹
    484  *
    485  *  割込み優å
    486 ˆåº¦ãƒžã‚¹ã‚¯å
    487 ¨è§£é™¤çŠ¶æ
    488 ‹ã§ã‚り,ディスパッチ許可状æ
    489 ‹ã§ã‚る(ディ
    490  *  スパッチ禁止状æ
    491 ‹ã§ãªã„)ことを示すフラグ.
     305 *  タスクディスパッチ可能状態
     306 *
     307 *  割込み優先度マスク全解除状態であり,ディスパッチ許可状態である(ディ
     308 *  スパッチ禁止状態でない)ことを示すフラグ.
    492309 */
    493310extern bool_t   dspflg;
    494311
    495312/*
    496  *  レディキュー
    497  *
    498  *  レディキューは,実行できる状æ
    499 ‹ã®ã‚¿ã‚¹ã‚¯ã‚’管理するためのキューである.
    500  *  実行状æ
    501 ‹ã®ã‚¿ã‚¹ã‚¯ã‚‚管理しているため,レディ(実行可能)キューという
    502  *  名称は正確ではないが,レディキューという名称が定着しているため,こ
    503  *  の名称で呼ぶことにする.
    504  *
    505  *  レディキューは,優å
    506 ˆåº¦ã”とのタスクキューで構成されている.タスクの
    507  *  TCBは,該当する優å
    508 ˆåº¦ã®ã‚­ãƒ¥ãƒ¼ã«ç™»éŒ²ã•ã‚Œã‚‹ï¼Ž
     313 *  レディキュー
     314 *
     315 *  レディキューは,実行できる状態のタスクを管理するためのキューである.
     316 *  実行状態のタスクも管理しているため,レディ(実行可能)キューという
     317 *  名称は正確ではないが,レディキューという名称が定着しているため,こ
     318 *  の名称で呼ぶことにする.
     319 *
     320 *  レディキューは,優先度ごとのタスクキューで構成されている.タスクの
     321 *  TCBは,該当する優先度のキューに登録される.
    509322 */
    510323extern QUEUE    ready_queue[TNUM_TPRI];
    511324
    512325/*
    513  *  レディキューサーチのためのビットマップ
    514  *
    515  *  レディキューのサーチを効率よく行うために,優å
    516 ˆåº¦ã”とのタスクキュー
    517  *  にタスクがå
    518 ¥ã£ã¦ã„るかどうかを示すビットマップを用意している.ビッ
    519  *  トマップを使うことで,メモリアクセスの回数を減らすことができるが,
    520  *  ビット操作命令がå
    521 
    522 å®Ÿã—ていないプロセッサで,優å
    523 ˆåº¦ã®æ®µéšŽæ•°ãŒå°‘ない
    524  *  場合には,ビットマップ操作のオーバーヘッドのために,逆に効率が落ち
    525  *  る可能性もある.
    526  *
    527  *  優å
    528 ˆåº¦ãŒ16段階であることを仮定しているため,uint16_t型としている.
     326 *  レディキューサーチのためのビットマップ
     327 *
     328 *  レディキューのサーチを効率よく行うために,優先度ごとのタスクキュー
     329 *  にタスクが入っているかどうかを示すビットマップを用意している.ビッ
     330 *  トマップを使うことで,メモリアクセスの回数を減らすことができるが,
     331 *  ビット操作命令が充実していないプロセッサで,優先度の段階数が少ない
     332 *  場合には,ビットマップ操作のオーバーヘッドのために,逆に効率が落ち
     333 *  る可能性もある.
     334 *
     335 *  優先度が16段階であることを仮定しているため,uint16_t型としている.
    529336 */
    530337extern uint16_t ready_primap;
    531338
    532339/*
    533  *  使用していないTCBのリスト
     340 *  使用していないTCBのリスト
    534341 */
    535342extern QUEUE    free_tcb;
    536343
    537344/*
    538  *  タスクIDの最大値(kernel_cfg.c)
     345 *  タスクIDの最大値(kernel_cfg.c)
    539346 */
    540347extern const ID tmax_tskid;
     
    542349
    543350/*
    544  *  タスク初期化ブロックのエリア(kernel_cfg.c)
     351 *  タスク初期化ブロックのエリア(kernel_cfg.c)
    545352 */
    546353extern const TINIB      tinib_table[];
     
    548355
    549356/*
    550  *  タスク生成順序テーブル(kernel_cfg.c)
     357 *  タスク生成順序テーブル(kernel_cfg.c)
    551358 */
    552359extern const ID torder_table[];
    553360
    554361/*
    555  *  TCBのエリア(kernel_cfg.c)
     362 *  TCBのエリア(kernel_cfg.c)
    556363 */
    557364extern TCB      tcb_table[];
    558365
    559366/*
    560  *  タスクの数
     367 *  タスクの数
    561368 */
    562369#define tnum_tsk        ((uint_t)(tmax_tskid - TMIN_TSKID + 1))
     
    564371
    565372/*
    566  *  タスクIDからTCBを取り出すためのマクロ
     373 *  タスクIDからTCBを取り出すためのマクロ
    567374 */
    568375#define INDEX_TSK(tskid)        ((uint_t)((tskid) - TMIN_TSKID))
     
    571378
    572379/*
    573  *  TCBからタスクIDを取り出すためのマクロ
     380 *  TCBからタスクIDを取り出すためのマクロ
    574381 */
    575382#define TSKID(p_tcb)    ((ID)(((p_tcb) - tcb_table) + TMIN_TSKID))
    576383
    577384/*
    578  *  タスク管理モジュールの初期化
     385 *  タスク管理モジュールの初期化
    579386 */
    580387extern void     initialize_task(void);
    581388
    582389/*
    583  *  最高優å
    584 ˆé †ä½ã‚¿ã‚¹ã‚¯ã®ã‚µãƒ¼ãƒ
    585  *
    586  *  レディキュー中の最高優å
    587 ˆé †ä½ã®ã‚¿ã‚¹ã‚¯ã‚’サーチし,そのTCBへのポインタ
    588  *  を返す.レディキューが空の場合には,この関数を呼び出してはならない.
     390 *  最高優先順位タスクのサーチ
     391 *
     392 *  レディキュー中の最高優先順位のタスクをサーチし,そのTCBへのポインタ
     393 *  を返す.レディキューが空の場合には,この関数を呼び出してはならない.
    589394 */
    590395extern TCB      *search_schedtsk(void);
    591396
    592397/*
    593  *  実行できる状æ
    594 ‹ã¸ã®é·ç§»
    595  *
    596  *  p_tcbで指定されるタスクをレディキューに挿å
    597 ¥ã™ã‚‹ï¼Žãƒ¬ãƒ‡ã‚£ã‚­ãƒ¥ãƒ¼ã«æŒ¿å
    598 ¥
    599  *  したタスクの優å
    600 ˆåº¦ãŒï¼Œæœ€é«˜å„ªå
    601 ˆé †ä½ã®ã‚¿ã‚¹ã‚¯ã®å„ªå
    602 ˆåº¦ã‚ˆã‚Šã‚‚高い場合は,
    603  *  最高優å
    604 ˆé †ä½ã®ã‚¿ã‚¹ã‚¯ã‚’更新し,ディスパッチ許可状æ
    605 ‹ã§ã‚ればtrueを返
    606  *  す.そうでない場合はfalseを返す.
     398 *  実行できる状態への遷移
     399 *
     400 *  p_tcbで指定されるタスクをレディキューに挿入する.レディキューに挿入
     401 *  したタスクの優先度が,最高優先順位のタスクの優先度よりも高い場合は,
     402 *  最高優先順位のタスクを更新し,ディスパッチ許可状態であればtrueを返
     403 *  す.そうでない場合はfalseを返す.
    607404 */
    608405extern bool_t   make_runnable(TCB *p_tcb);
    609406
    610407/*
    611  *  実行できる状æ
    612 ‹ã‹ã‚‰ä»–の状æ
    613 ‹ã¸ã®é·ç§»
    614  *
    615  *  p_tcbで指定されるタスクをレディキューから削除する.p_tcbで指定した
    616  *  タスクが最高優å
    617 ˆé †ä½ã®ã‚¿ã‚¹ã‚¯ã§ã‚った場合には,最高優å
    618 ˆé †ä½ã®ã‚¿ã‚¹ã‚¯
    619  *  を設定しなおし,ディスパッチ許可状æ
    620 ‹ã§ã‚ればtrueを返す.そうでない
    621  *  場合はfalseを返す.タスクの状æ
    622 ‹ã¯æ›´æ–°ã—ない.
     408 *  実行できる状態から他の状態への遷移
     409 *
     410 *  p_tcbで指定されるタスクをレディキューから削除する.p_tcbで指定した
     411 *  タスクが最高優先順位のタスクであった場合には,最高優先順位のタスク
     412 *  を設定しなおし,ディスパッチ許可状態であればtrueを返す.そうでない
     413 *  場合はfalseを返す.タスクの状態は更新しない.
    623414 */
    624415extern bool_t   make_non_runnable(TCB *p_tcb);
    625416
    626417/*
    627  *  休止状æ
    628 ‹ã¸ã®é·ç§»
    629  *
    630  *  p_tcbで指定されるタスクの状æ
    631 ‹ã‚’休止状æ
    632 ‹ã¨ã™ã‚‹ï¼Žã¾ãŸï¼Œã‚¿ã‚¹ã‚¯ã®èµ·å‹•
    633  *  時に初期化すべき変数の初期化と,タスク起動のためのコンテキストを設
    634  *  定する.
     418 *  休止状態への遷移
     419 *
     420 *  p_tcbで指定されるタスクの状態を休止状態とする.また,タスクの起動
     421 *  時に初期化すべき変数の初期化と,タスク起動のためのコンテキストを設
     422 *  定する.
    635423 */
    636424extern void     make_dormant(TCB *p_tcb);
    637425
    638426/*
    639  *  休止状æ
    640 ‹ã‹ã‚‰å®Ÿè¡Œã§ãã‚‹çŠ¶æ
    641 ‹ã¸ã®é·ç§»
    642  *
    643  *  p_tcbで指定されるタスクの状æ
    644 ‹ã‚’休止状æ
    645 ‹ã‹ã‚‰å®Ÿè¡Œã§ãã‚‹çŠ¶æ
    646 ‹ã¨ã™ã‚‹ï¼Ž
    647  *  実行できる状æ
    648 ‹ã«é·ç§»ã—たタスクへのディスパッチがå¿
    649 è¦ãªå ´åˆã¯true,
    650  *  そうでない場合はfalseを返す.
     427 *  休止状態から実行できる状態への遷移
     428 *
     429 *  p_tcbで指定されるタスクの状態を休止状態から実行できる状態とする.
     430 *  実行できる状態に遷移したタスクへのディスパッチが必要な場合はtrue,
     431 *  そうでない場合はfalseを返す.
    651432 */
    652433extern bool_t   make_active(TCB *p_tcb);
    653434
    654435/*
    655  *  タスクの優å
    656 ˆåº¦ã®å¤‰æ›´
    657  *
    658  *  p_tcbで指定されるタスクの優å
    659 ˆåº¦ã‚’newpri(å†
    660 éƒ¨è¡¨ç¾ï¼‰ã«å¤‰æ›´ã™ã‚‹ï¼Žã¾ãŸï¼Œ
    661  *  å¿
    662 è¦ãªå ´åˆã«ã¯æœ€é«˜å„ªå
    663 ˆé †ä½ã®ã‚¿ã‚¹ã‚¯ã‚’更新し,ディスパッチ許可状æ
    664 ‹ã§
    665  *  あればtrueを返す.そうでない場合はfalseを返す.
     436 *  タスクの優先度の変更
     437 *
     438 *  p_tcbで指定されるタスクの優先度をnewpri(内部表現)に変更する.また,
     439 *  必要な場合には最高優先順位のタスクを更新し,ディスパッチ許可状態で
     440 *  あればtrueを返す.そうでない場合はfalseを返す.
    666441 */
    667442extern bool_t   change_priority(TCB *p_tcb, uint_t newpri);
    668443
    669444/*
    670  *  レディキューの回転
    671  *
    672  *  レディキュー中の,priで指定される優å
    673 ˆåº¦ã®ã‚¿ã‚¹ã‚¯ã‚­ãƒ¥ãƒ¼ã‚’回転させる.
    674  *  また,å¿
    675 è¦ãªå ´åˆã«ã¯æœ€é«˜å„ªå
    676 ˆé †ä½ã®ã‚¿ã‚¹ã‚¯ã‚’変更し,ディスパッチが保
    677  *  留されていなければtrueを返す.そうでない場合はfalseを返す.
     445 *  レディキューの回転
     446 *
     447 *  レディキュー中の,priで指定される優先度のタスクキューを回転させる.
     448 *  また,必要な場合には最高優先順位のタスクを変更し,ディスパッチが保
     449 *  留されていなければtrueを返す.そうでない場合はfalseを返す.
    678450 */
    679451extern bool_t   rotate_ready_queue(uint_t pri);
    680452
    681453/*
    682  *  タスク例外処理ルーチンの呼出し
    683  *
    684  *  タスク例外処理ルーチンを呼び出す.呼び出す前に,実行状æ
    685 ‹ã®ã‚¿ã‚¹ã‚¯ã®
    686  *  保留例外要因をクリアし,タスク例外処理禁止状æ
    687 ‹ã«ã—,CPUロックを解
    688  *  除する.
    689  *
    690  *  タスク例外処理ルーチンから戻ると,まずCPUロック状æ
    691 ‹ã«æˆ»ã—,その間
    692  *  に保留例外要因が0でなくなっていれば,再びタスク例外処理ルーチンを
    693  *  呼び出す.保留例外要因が0の場合には,例外処理許可状æ
    694 ‹ã«ã—て関数か
    695  *  らリターンする.
    696  *
    697  *  この関数は,実行状æ
    698 ‹ã®ã‚¿ã‚¹ã‚¯ãŒï¼Œã‚¿ã‚¹ã‚¯ä¾‹å¤–処理許可状æ
    699 ‹ï¼ˆenatexが
    700  *  true)で,保留例外要因が0でない(texptnが0でない)場合に呼び出すこ
    701  *  とを想定している.この関数は,CPUロック状æ
    702 ‹ã§å‘¼ã³å‡ºã•ãªã‘ればなら
    703  *  ない.
     454 *  タスク例外処理ルーチンの呼出し
     455 *
     456 *  タスク例外処理ルーチンを呼び出す.呼び出す前に,実行状態のタスクの
     457 *  保留例外要因をクリアし,タスク例外処理禁止状態にし,CPUロックを解
     458 *  除する.
     459 *
     460 *  タスク例外処理ルーチンから戻ると,まずCPUロック状態に戻し,その間
     461 *  に保留例外要因が0でなくなっていれば,再びタスク例外処理ルーチンを
     462 *  呼び出す.保留例外要因が0の場合には,例外処理許可状態にして関数か
     463 *  らリターンする.
     464 *
     465 *  この関数は,実行状態のタスクが,タスク例外処理許可状態(enatexが
     466 *  true)で,保留例外要因が0でない(texptnが0でない)場合に呼び出すこ
     467 *  とを想定している.この関数は,CPUロック状態で呼び出さなければなら
     468 *  ない.
    704469 */
    705470extern void     call_texrtn(void);
    706471
    707472/*
    708  *  タスク例外処理ルーチンの起動
    709  *
    710  *  実行状æ
    711 ‹ã®ã‚¿ã‚¹ã‚¯ãŒã‚¿ã‚¹ã‚¯ä¾‹å¤–処理ルーチンの起動条件を満たしていれば,
    712  *  タスク例外処理ルーチンを呼び出す.CPU例外処理ルーチンを呼び出す時
    713  *  は,一時的にCPUロックを解除する.
    714  *
    715  *  この関数は,ディスパッチャや割込みハンドラ/CPU例外ハンドラの出口
    716  *  処理から呼び出されることを想定している.この関数は,CPUロック状æ
    717 ‹
    718  *  で呼び出さなければならない.
    719  *
    720  *  実行効率を上げるために,この関数をターゲット依存部で記述してもよい.
    721  *  その場合には,OMIT_CALLTEXをマクロ定義する.
     473 *  タスク例外処理ルーチンの起動
     474 *
     475 *  実行状態のタスクがタスク例外処理ルーチンの起動条件を満たしていれば,
     476 *  タスク例外処理ルーチンを呼び出す.CPU例外処理ルーチンを呼び出す時
     477 *  は,一時的にCPUロックを解除する.
     478 *
     479 *  この関数は,ディスパッチャや割込みハンドラ/CPU例外ハンドラの出口
     480 *  処理から呼び出されることを想定している.この関数は,CPUロック状態
     481 *  で呼び出さなければならない.
     482 *
     483 *  実行効率を上げるために,この関数をターゲット依存部で記述してもよい.
     484 *  その場合には,OMIT_CALLTEXをマクロ定義する.
    722485 */
    723486extern void     calltex(void);
Note: See TracChangeset for help on using the changeset viewer.