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

    • Property svn:keywords deleted
    • Property svn:mime-type changed from text/x-chdr to text/x-chdr;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  *  トレースログマクロのデフォルト定義
     55 *  トレースログマクロのデフォルト定義
    7156 */
    7257#ifndef LOG_TSKSTAT
     
    7560
    7661/*
    77  *  タスク優å
    78 ˆåº¦ã®å†
    79 éƒ¨è¡¨ç¾ãƒ»å¤–部表現変換マクロ
     62 *  タスク優先度の内部表現・外部表現変換マクロ
    8063 */
    8164#define INT_PRIORITY(x)         ((uint_t)((x) - TMIN_TPRI))
     
    8366
    8467/*
    85  *  タスク状æ
    86 ‹ã®å†
    87 éƒ¨è¡¨ç¾
    88  *
    89  *  TCB中のタスク状æ
    90 ‹ã®ãƒ•ã‚£ãƒ¼ãƒ«ãƒ‰ã§ã¯ï¼Œã‚¿ã‚¹ã‚¯ã®çŠ¶æ
    91 ‹ã¨ï¼Œã‚¿ã‚¹ã‚¯ãŒå¾
    92 ã¡çŠ¶æ
    93 ‹
    94  *  の時のå¾
    95 ã¡è¦å› ã‚’表す.ただし,実行状æ
    96 ‹ï¼ˆRUNNING)と実行可能状æ
    97 ‹
    98  *  (READY)は区別せず,両状æ
    99 ‹ã‚’あわせて実行できる状æ
    100 ‹ï¼ˆRUNNABLE)とし
    101  *  て管理する.二重å¾
    102 ã¡çŠ¶æ
    103 ‹ã¯ï¼Œ(TS_WAITING_??? | TS_SUSPENDED)で表す.
    104  *
    105  *  タスクがå¾
    106 ã¡çŠ¶æ
    107 ‹ï¼ˆäºŒé‡å¾
    108 ã¡çŠ¶æ
    109 ‹ã‚’含む)の時は,TS_WAITING_???でå¾
    110 ã¡
    111  *  要因を表す.å¾
    112 ã¡è¦å› ï¼ˆ5ビットで表現される)の上位2ビットで,同期・
    113  *  通信オブジェクトのå¾
    114 ã¡ã‚­ãƒ¥ãƒ¼ã«ã¤ãªãŒã£ã¦ã„るかどうかを表す.同期・
    115  *  通信オブジェクトのå¾
    116 ã¡ã‚­ãƒ¥ãƒ¼ã«ã¤ãªãŒã‚‰ãªã„ものは上位2ビットを00,同
    117  *  期・通信オブジェクトの管理ブロックのå
    118 ±é€šéƒ¨åˆ†ï¼ˆWOBJCB)のå¾
    119 ã¡ã‚­ãƒ¥ãƒ¼
    120  *  につながるものは10または11,それ以外のå¾
    121 ã¡ã‚­ãƒ¥ãƒ¼ã«ã¤ãªãŒã‚‹ã‚‚のは01
    122  *  とする.
    123  */
    124 #define TS_DORMANT              0x00U                   /* 休止状æ
    125 ‹ */
    126 #define TS_RUNNABLE             0x01U                   /* 実行できる状æ
    127 ‹ */
    128 #define TS_SUSPENDED    0x02U                   /* 強制å¾
    129 ã¡çŠ¶æ
    130 ‹ */
    131 
    132 #define TS_WAITING_SLP  (0x01U << 2)    /* 起床å¾
    133 ã¡ */
    134 #define TS_WAITING_DLY  (0x02U << 2)    /* 時間経過å¾
    135 ã¡ */
    136 #define TS_WAITING_RDTQ (0x08U << 2)    /* データキューからの受信å¾
    137 ã¡ */
    138 #define TS_WAITING_RPDQ (0x09U << 2)    /* 優å
    139 ˆåº¦ãƒ‡ãƒ¼ã‚¿ã‚­ãƒ¥ãƒ¼ã‹ã‚‰ã®å—ä¿¡å¾
    140 ã¡ */
    141 #define TS_WAITING_SEM  (0x10U << 2)    /* セマフォ資源の獲得å¾
    142 ã¡ */
    143 #define TS_WAITING_FLG  (0x11U << 2)    /* イベントフラグå¾
    144 ã¡ */
    145 #define TS_WAITING_SDTQ (0x12U << 2)    /* データキューへの送信å¾
    146 ã¡ */
    147 #define TS_WAITING_SPDQ (0x13U << 2)    /* 優å
    148 ˆåº¦ãƒ‡ãƒ¼ã‚¿ã‚­ãƒ¥ãƒ¼ã¸ã®é€ä¿¡å¾
    149 ã¡ */
    150 #define TS_WAITING_MTX  (0x14U << 2)    /* ミューテックスのロックå¾
    151 ã¡ */
    152 #define TS_WAITING_MPF  (0x15U << 2)    /* 固定長メモリブロックの獲得å¾
    153 ã¡ */
    154 
    155 #define TS_WAITING_MASK (0x1fU << 2)    /* å¾
    156 ã¡çŠ¶æ
    157 ‹ã®åˆ¤åˆ¥ç”¨ãƒžã‚¹ã‚¯ */
    158 
    159 /*
    160  *  タスク状æ
    161 ‹åˆ¤åˆ¥ãƒžã‚¯ãƒ­
    162  *
    163  *  TSTAT_DORMANTはタスクが休止状æ
    164 ‹ã§ã‚るかどうかを,TSTAT_RUNNABLEは
    165  *  タスクが実行できる状æ
    166 ‹ã§ã‚るかどうかを判別する.TSTAT_WAITINGはå¾
    167 
    168  *  ち状æ
    169 ‹ã¨äºŒé‡å¾
    170 ã¡çŠ¶æ
    171 ‹ã®ã„ずれかであるかどうかを,TSTAT_SUSPENDEDは
    172  *  強制å¾
    173 ã¡çŠ¶æ
    174 ‹ã¨äºŒé‡å¾
    175 ã¡çŠ¶æ
    176 ‹ã®ã„ずれかであるかどうかを判別する.
     68 *  タスク状態の内部表現
     69 *
     70 *  TCB中のタスク状態のフィールドでは,タスクの状態と,タスクが待ち状態
     71 *  の時の待ち要因を表す.ただし,実行状態(RUNNING)と実行可能状態
     72 *  (READY)は区別せず,両状態をあわせて実行できる状態(RUNNABLE)とし
     73 *  て管理する.二重待ち状態は,(TS_WAITING_??? | TS_SUSPENDED)で表す.
     74 *
     75 *  タスクが待ち状態(二重待ち状態を含む)の時は,TS_WAITING_???で待ち
     76 *  要因を表す.待ち要因(5ビットで表現される)の上位2ビットで,同期・
     77 *  通信オブジェクトの待ちキューにつながっているかどうかを表す.同期・
     78 *  通信オブジェクトの待ちキューにつながらないものは上位2ビットを00,同
     79 *  期・通信オブジェクトの管理ブロックの共通部分(WOBJCB)の待ちキュー
     80 *  につながるものは10または11,それ以外の待ちキューにつながるものは01
     81 *  とする.
     82 */
     83#define TS_DORMANT              0x00U                   /* 休止状態 */
     84#define TS_RUNNABLE             0x01U                   /* 実行できる状態 */
     85#define TS_SUSPENDED    0x02U                   /* 強制待ち状態 */
     86
     87#define TS_WAITING_SLP  (0x01U << 2)    /* 起床待ち */
     88#define TS_WAITING_DLY  (0x02U << 2)    /* 時間経過待ち */
     89#define TS_WAITING_RDTQ (0x08U << 2)    /* データキューからの受信待ち */
     90#define TS_WAITING_RPDQ (0x09U << 2)    /* 優先度データキューからの受信待ち */
     91#define TS_WAITING_SEM  (0x10U << 2)    /* セマフォ資源の獲得待ち */
     92#define TS_WAITING_FLG  (0x11U << 2)    /* イベントフラグ待ち */
     93#define TS_WAITING_SDTQ (0x12U << 2)    /* データキューへの送信待ち */
     94#define TS_WAITING_SPDQ (0x13U << 2)    /* 優先度データキューへの送信待ち */
     95#define TS_WAITING_MTX  (0x14U << 2)    /* ミューテックスのロック待ち */
     96#define TS_WAITING_MPF  (0x15U << 2)    /* 固定長メモリブロックの獲得待ち */
     97
     98#define TS_WAITING_MASK (0x1fU << 2)    /* 待ち状態の判別用マスク */
     99
     100/*
     101 *  タスク状態判別マクロ
     102 *
     103 *  TSTAT_DORMANTはタスクが休止状態であるかどうかを,TSTAT_RUNNABLEは
     104 *  タスクが実行できる状態であるかどうかを判別する.TSTAT_WAITINGは待
     105 *  ち状態と二重待ち状態のいずれかであるかどうかを,TSTAT_SUSPENDEDは
     106 *  強制待ち状態と二重待ち状態のいずれかであるかどうかを判別する.
    177107 */
    178108#define TSTAT_DORMANT(tstat)    ((tstat) == TS_DORMANT)
     
    182112
    183113/*
    184  *  タスクå¾
    185 ã¡è¦å› åˆ¤åˆ¥ãƒžã‚¯ãƒ­
    186  *
    187  *  TSTAT_WAIT_SLPはタスクが起床å¾
    188 ã¡ã§ã‚るかどうかを,TSTAT_WAIT_MTXは
    189  *  タスクがミューテックスå¾
    190 ã¡ã§ã‚るかどうかを判別する.
    191  *
    192  *  また,TSTAT_WAIT_WOBJ はタスクが同期・通信オブジェクトに対するå¾
    193 ã¡
    194  *  であるか(言い換えると,同期・通信オブジェクトのå¾
    195 ã¡ã‚­ãƒ¥ãƒ¼ã«ã¤ãªãŒ
    196  *  れているか)どうかを,TSTAT_WAIT_WOBJCBはタスクが同期・通信オブジェ
    197  *  クトの管理ブロックのå
    198 ±é€šéƒ¨åˆ†ï¼ˆWOBJCB)のå¾
    199 ã¡ã‚­ãƒ¥ãƒ¼ã«ã¤ãªãŒã‚Œã¦ã„ã‚‹
    200  *  かどうかを判別する.
     114 *  タスク待ち要因判別マクロ
     115 *
     116 *  TSTAT_WAIT_SLPはタスクが起床待ちであるかどうかを,TSTAT_WAIT_MTXは
     117 *  タスクがミューテックス待ちであるかどうかを判別する.
     118 *
     119 *  また,TSTAT_WAIT_WOBJ はタスクが同期・通信オブジェクトに対する待ち
     120 *  であるか(言い換えると,同期・通信オブジェクトの待ちキューにつなが
     121 *  れているか)どうかを,TSTAT_WAIT_WOBJCBはタスクが同期・通信オブジェ
     122 *  クトの管理ブロックの共通部分(WOBJCB)の待ちキューにつながれている
     123 *  かどうかを判別する.
    201124 */
    202125#define TSTAT_WAIT_SLP(tstat)   (((tstat) & ~TS_SUSPENDED) == TS_WAITING_SLP)
     
    207130
    208131/*
    209  *  å¾
    210 ã¡æƒ
    211 å ±ãƒ–ロック(WINFO)の定義
    212  *
    213  *  タスクがå¾
    214 ã¡çŠ¶æ
    215 ‹ã®é–“は,TCBおよびそのp_winfoで指されるWINFOを次の
    216  *  ように設定しなければならない.
    217  *
    218  *  (a) TCBのタスク状æ
    219 ‹ã‚’å¾
    220 ã¡çŠ¶æ
    221 ‹ï¼ˆTS_WAITING_???)にする.
    222  *
    223  *  (b) タイムアウトを監視するために,タイムイベントブロックを登録する.
    224  *  登録するタイムイベントブロックは,å¾
    225 ã¡ã«å
    226 ¥ã‚‹ã‚µãƒ¼ãƒ“スコール処理関数
    227  *  のローカル変数として確保し,それへのポインタをWINFOのp_tmevtbに記
    228  *  憶する.タイムアウトの監視がå¿
    229 è¦ãªã„場合(永ä¹
    230 å¾
    231 ã¡ã®å ´åˆï¼‰ã«ã¯ï¼Œ
    232  *  p_tmevtbをNULLにする.
    233  *
    234  *  同期・通信オブジェクトに対するå¾
    235 ã¡çŠ¶æ
    236 ‹ã®å ´åˆã«ã¯ï¼Œæ¨™æº–のWINFOに
    237  *  p_wobjcbフィールドを追加した構造体(WINFO_WOBJ,wait.hで定義)に,
    238  *  å¾
    239 ã¡å¯¾è±¡ã®åŒæœŸãƒ»é€šä¿¡ã‚ªãƒ–ジェクトに依存して記憶することがå¿
    240 è¦ãªæƒ
    241 å ±
    242  *  のためのフィールドを追加した構造体(WINFO_???)を定義し,WINFOの代
    243  *  わりに用いる.また,以下の(c)~(e)の設定を行うå¿
    244 è¦ãŒã‚る.同期・通
    245  *  信オブジェクトに関係しないå¾
    246 ã¡ï¼ˆèµ·åºŠå¾
    247 ã¡ï¼Œæ™‚間経過å¾
    248 ã¡ï¼‰ã®å ´åˆã«ã¯ï¼Œ
    249  *  これらはå¿
    250 è¦ãªã„.
    251  *
    252  *  (c) TCBをå¾
    253 ã¡å¯¾è±¡ã®åŒæœŸãƒ»é€šä¿¡ã‚ªãƒ–ジェクトのå¾
    254 ã¡ã‚­ãƒ¥ãƒ¼ã«ã¤ãªãï¼Žå¾
    255 
    256  *  ちキューにつなぐために,task_queueを使う.
    257  *
    258  *  (d) å¾
    259 ã¡å¯¾è±¡ã®åŒæœŸãƒ»é€šä¿¡ã‚ªãƒ–ジェクトの管理ブロックへのポインタを,
    260  *  WINFO_WOBJのp_wobjcbに記憶する.
    261  *
    262  *  (e) å¾
    263 ã¡å¯¾è±¡ã®åŒæœŸãƒ»é€šä¿¡ã‚ªãƒ–ジェクトに依存して記憶することがå¿
    264 è¦ãª
    265  *  æƒ
    266 å ±ãŒã‚る場合には,WINFO_???å†
    267 ã®ãƒ•ã‚£ãƒ¼ãƒ«ãƒ‰ã«è¨˜æ†¶ã™ã‚‹ï¼Ž
    268  *
    269  *  å¾
    270 ã¡çŠ¶æ
    271 ‹ã‚’解除する際には,å¾
    272 ã¡è§£é™¤ã—たタスクに対する返値をWINFOの
    273  *  wercdに設定する.wercdがå¿
    274 è¦ãªã®ã¯å¾
    275 ã¡è§£é™¤ä»¥é™ã§ã‚るのに対して,
    276  *  p_tmevtbはå¾
    277 ã¡è§£é™¤å¾Œã¯å¿
    278 è¦ãªã„ため,メモリ節約のためにå
    279 ±ç”¨ä½“を使っ
    280  *  ている.そのため,wercdへエラーコードを設定するのは,タイムイベント
    281  *  ブロックを登録解除した後にしなければならない.
     132 *  待ち情報ブロック(WINFO)の定義
     133 *
     134 *  タスクが待ち状態の間は,TCBおよびそのp_winfoで指されるWINFOを次の
     135 *  ように設定しなければならない.
     136 *
     137 *  (a) TCBのタスク状態を待ち状態(TS_WAITING_???)にする.
     138 *
     139 *  (b) タイムアウトを監視するために,タイムイベントブロックを登録する.
     140 *  登録するタイムイベントブロックは,待ちに入るサービスコール処理関数
     141 *  のローカル変数として確保し,それへのポインタをWINFOのp_tmevtbに記
     142 *  憶する.タイムアウトの監視が必要ない場合(永久待ちの場合)には,
     143 *  p_tmevtbをNULLにする.
     144 *
     145 *  同期・通信オブジェクトに対する待ち状態の場合には,標準のWINFOに
     146 *  p_wobjcbフィールドを追加した構造体(WINFO_WOBJ,wait.hで定義)に,
     147 *  待ち対象の同期・通信オブジェクトに依存して記憶することが必要な情報
     148 *  のためのフィールドを追加した構造体(WINFO_???)を定義し,WINFOの代
     149 *  わりに用いる.また,以下の(c)~(e)の設定を行う必要がある.同期・通
     150 *  信オブジェクトに関係しない待ち(起床待ち,時間経過待ち)の場合には,
     151 *  これらは必要ない.
     152 *
     153 *  (c) TCBを待ち対象の同期・通信オブジェクトの待ちキューにつなぐ.待
     154 *  ちキューにつなぐために,task_queueを使う.
     155 *
     156 *  (d) 待ち対象の同期・通信オブジェクトの管理ブロックへのポインタを,
     157 *  WINFO_WOBJのp_wobjcbに記憶する.
     158 *
     159 *  (e) 待ち対象の同期・通信オブジェクトに依存して記憶することが必要な
     160 *  情報がある場合には,WINFO_???内のフィールドに記憶する.
     161 *
     162 *  待ち状態を解除する際には,待ち解除したタスクに対する返値をWINFOの
     163 *  wercdに設定する.wercdが必要なのは待ち解除以降であるのに対して,
     164 *  p_tmevtbは待ち解除後は必要ないため,メモリ節約のために共用体を使っ
     165 *  ている.そのため,wercdへエラーコードを設定するのは,タイムイベント
     166 *  ブロックを登録解除した後にしなければならない.
    282167 */
    283168typedef union waiting_information {
    284         ER              wercd;                  /* å¾
    285 ã¡è§£é™¤æ™‚のエラーコード */
    286         TMEVTB  *p_tmevtb;              /* å¾
    287 ã¡çŠ¶æ
    288 ‹ç”¨ã®ã‚¿ã‚¤ãƒ ã‚¤ãƒ™ãƒ³ãƒˆãƒ–ロック */
     169        ER              wercd;                  /* 待ち解除時のエラーコード */
     170        TMEVTB  *p_tmevtb;              /* 待ち状態用のタイムイベントブロック */
    289171} WINFO;
    290172
    291173/*
    292  *  ミューテックス管理ブロックの型の前方参ç
    293 §
     174 *  ミューテックス管理ブロックの型の前方参照
    294175 */
    295176typedef struct mutex_control_block MTXCB;
    296177
    297178/*
    298  *  タスク初期化ブロック
    299  *
    300  *  タスクに関するæƒ
    301 å ±ã‚’,値が変わらないためにROMに置ける部分(タスク
    302  *  初期化ブロック)と,値が変化するためにRAMに置かなければならない部
    303  *  分(タスク管理ブロック,TCB)に分離し,TCBå†
    304 ã«å¯¾å¿œã™ã‚‹ã‚¿ã‚¹ã‚¯åˆæœŸåŒ–
    305  *  ブロックを指すポインタをå
    306 ¥ã‚Œã‚‹ï¼Žã‚¿ã‚¹ã‚¯åˆæœŸåŒ–ブロックå†
    307 ã«å¯¾å¿œã™ã‚‹
    308  *  TCBを指すポインタをå
    309 ¥ã‚Œã‚‹æ–¹æ³•ã®æ–¹ãŒï¼ŒRAMの節約の観点からは望ましい
    310  *  が,実行効率が悪くなるために採用していない.他のオブジェクトについ
    311  *  ても同様に扱う.
    312  *
    313  *  タスク初期化ブロックには,DEF_TEXで定義されるタスク例外処理ルーチ
    314  *  ンに関するæƒ
    315 å ±ã‚‚含む.
     179 *  タスク初期化ブロック
     180 *
     181 *  タスクに関する情報を,値が変わらないためにROMに置ける部分(タスク
     182 *  初期化ブロック)と,値が変化するためにRAMに置かなければならない部
     183 *  分(タスク管理ブロック,TCB)に分離し,TCB内に対応するタスク初期化
     184 *  ブロックを指すポインタを入れる.タスク初期化ブロック内に対応する
     185 *  TCBを指すポインタを入れる方法の方が,RAMの節約の観点からは望ましい
     186 *  が,実行効率が悪くなるために採用していない.他のオブジェクトについ
     187 *  ても同様に扱う.
     188 *
     189 *  タスク初期化ブロックには,DEF_TEXで定義されるタスク例外処理ルーチ
     190 *  ンに関する情報も含む.
    316191 */
    317192typedef struct task_initialization_block {
    318         ATR                     tskatr;                 /* タスク属性 */
    319         intptr_t        exinf;                  /* タスクの拡張æƒ
    320 å ± */
    321         TASK            task;                   /* タスクの起動番地 */
    322         uint_t          ipriority;              /* タスクの起動時優å
    323 ˆåº¦ï¼ˆå†
    324 éƒ¨è¡¨ç¾ï¼‰ */
     193        ATR                     tskatr;                 /* タスク属性 */
     194        intptr_t        exinf;                  /* タスクの拡張情報 */
     195        TASK            task;                   /* タスクの起動番地 */
     196        uint_t          ipriority;              /* タスクの起動時優先度(内部表現) */
    325197
    326198#ifdef USE_TSKINICTXB
    327         TSKINICTXB      tskinictxb;             /* タスク初期化コンテキストブロック */
     199        TSKINICTXB      tskinictxb;             /* タスク初期化コンテキストブロック */
    328200#else /* USE_TSKINICTXB */
    329         size_t          stksz;                  /* スタック領域のサイズ(丸めた値) */
    330         void            *stk;                   /* スタック領域のå
    331 ˆé ­ç•ªåœ° */
     201        size_t          stksz;                  /* スタック領域のサイズ(丸めた値) */
     202        void            *stk;                   /* スタック領域の先頭番地 */
    332203#endif /* USE_TSKINICTXB */
    333204} TINIB;
    334205
    335206/*
    336  *  タスク管理ブロック(TCB)
    337  *
    338  *  ASPカーネルでは,タスクの起動要求キューイング数の最大値(TMAX_ACTCNT)
    339  *  と起床要求キューイング数の最大値(TMAX_WUPCNT)は1に固定されている
    340  *  ため,キューイングされているかどうかの真偽値で表現することができる.
    341  *  また,強制å¾
    342 ã¡è¦æ±‚ネスト数の最大値(TMAX_SUSCNT)が1に固定されてい
    343  *  るので,強制å¾
    344 ã¡è¦æ±‚ネスト数(suscnt)はå¿
    345 è¦ãªã„.
    346  *
    347  *  TCBのいくつかのフィールドは,特定のタスク状æ
    348 ‹ã§ã®ã¿æœ‰åŠ¹ãªå€¤ã‚’保持し,
    349  *  それ以外の場合は値が保証されない(よって,参ç
    350 §ã—てはならない).各
    351  *  フィールドが有効な値を保持する条件は次の通り.
    352  *
    353  *  ・初期化後は常に有効:
    354  *              p_tinib,tstat,actque
    355  *  ・休止状æ
    356 ‹ä»¥å¤–で有効(休止状æ
    357 ‹ã§ã¯åˆæœŸå€¤ã«ãªã£ã¦ã„る):
    358  *              bpriority,priority,wupque,raster,enater,p_lastmtx
    359  *  ・å¾
    360 ã¡çŠ¶æ
    361 ‹ï¼ˆäºŒé‡å¾
    362 ã¡çŠ¶æ
    363 ‹ã‚’含む)で有効:
     207 *  タスク管理ブロック(TCB)
     208 *
     209 *  ASPカーネルでは,タスクの起動要求キューイング数の最大値(TMAX_ACTCNT)
     210 *  と起床要求キューイング数の最大値(TMAX_WUPCNT)は1に固定されている
     211 *  ため,キューイングされているかどうかの真偽値で表現することができる.
     212 *  また,強制待ち要求ネスト数の最大値(TMAX_SUSCNT)が1に固定されてい
     213 *  るので,強制待ち要求ネスト数(suscnt)は必要ない.
     214 *
     215 *  TCBのいくつかのフィールドは,特定のタスク状態でのみ有効な値を保持し,
     216 *  それ以外の場合は値が保証されない(よって,参照してはならない).各
     217 *  フィールドが有効な値を保持する条件は次の通り.
     218 *
     219 *  ・初期化後は常に有効:
     220 *              p_tinib,tstat,actque
     221 *  ・休止状態以外で有効(休止状態では初期値になっている):
     222 *              bpriority,priority,wupque,raster,enater,p_lastmtx
     223 *  ・待ち状態(二重待ち状態を含む)で有効:
    364224 *              p_winfo
    365  *  ・実行できる状æ
    366 ‹ã¨åŒæœŸãƒ»é€šä¿¡ã‚ªãƒ–ジェクトに対するå¾
    367 ã¡çŠ¶æ
    368 ‹ã§æœ‰åŠ¹ï¼š
     225 *  ・実行できる状態と同期・通信オブジェクトに対する待ち状態で有効:
    369226 *              task_queue
    370  *  ・実行可能状æ
    371 ‹ï¼Œå¾
    372 ã¡çŠ¶æ
    373 ‹ï¼Œå¼·åˆ¶å¾
    374 ã¡çŠ¶æ
    375 ‹ï¼ŒäºŒé‡å¾
    376 ã¡çŠ¶æ
    377 ‹ã§æœ‰åŠ¹ï¼š
     227 *  ・実行可能状態,待ち状態,強制待ち状態,二重待ち状態で有効:
    378228 *              tskctxb
    379229 */
    380230typedef struct task_control_block {
    381         QUEUE                   task_queue;             /* タスクキュー */
    382         const TINIB             *p_tinib;               /* 初期化ブロックへのポインタ */
     231        QUEUE                   task_queue;             /* タスクキュー */
     232        const TINIB             *p_tinib;               /* 初期化ブロックへのポインタ */
    383233
    384234#ifdef UINT8_MAX
    385         uint8_t                 tstat;                  /* タスク状æ
    386 ‹ï¼ˆå†
    387 éƒ¨è¡¨ç¾ï¼‰*/
    388         uint8_t                 bpriority;              /* ベース優å
    389 ˆåº¦ï¼ˆå†
    390 éƒ¨è¡¨ç¾ï¼‰*/
    391         uint8_t                 priority;               /* 現在の優å
    392 ˆåº¦ï¼ˆå†
    393 éƒ¨è¡¨ç¾ï¼‰*/
     235        uint8_t                 tstat;                  /* タスク状態(内部表現)*/
     236        uint8_t                 bpriority;              /* ベース優先度(内部表現)*/
     237        uint8_t                 priority;               /* 現在の優先度(内部表現)*/
    394238#else /* UINT8_MAX */
    395         BIT_FIELD_UINT  tstat : 8;              /* タスク状æ
    396 ‹ï¼ˆå†
    397 éƒ¨è¡¨ç¾ï¼‰*/
    398         BIT_FIELD_UINT  bpriority : 8;  /* ベース優å
    399 ˆåº¦ï¼ˆå†
    400 éƒ¨è¡¨ç¾ï¼‰*/
    401         BIT_FIELD_UINT  priority : 8    /* 現在の優å
    402 ˆåº¦ï¼ˆå†
    403 éƒ¨è¡¨ç¾ï¼‰*/;
     239        BIT_FIELD_UINT  tstat : 8;              /* タスク状態(内部表現)*/
     240        BIT_FIELD_UINT  bpriority : 8;  /* ベース優先度(内部表現)*/
     241        BIT_FIELD_UINT  priority : 8    /* 現在の優先度(内部表現)*/;
    404242#endif /* UINT8_MAX */
    405         BIT_FIELD_BOOL  actque : 1;             /* 起動要求キューイング */
    406         BIT_FIELD_BOOL  wupque : 1;             /* 起床要求キューイング */
    407         BIT_FIELD_BOOL  raster : 1;             /* タスク終了要求状æ
    408 ‹ */
    409         BIT_FIELD_BOOL  enater : 1;             /* タスク終了許可状æ
    410 ‹ */
    411 
    412         WINFO                   *p_winfo;               /* å¾
    413 ã¡æƒ
    414 å ±ãƒ–ロックへのポインタ */
    415         MTXCB                   *p_lastmtx;             /* 最後にロックしたミューテックス */
    416         TSKCTXB                 tskctxb;                /* タスクコンテキストブロック */
     243        BIT_FIELD_BOOL  actque : 1;             /* 起動要求キューイング */
     244        BIT_FIELD_BOOL  wupque : 1;             /* 起床要求キューイング */
     245        BIT_FIELD_BOOL  raster : 1;             /* タスク終了要求状態 */
     246        BIT_FIELD_BOOL  enater : 1;             /* タスク終了許可状態 */
     247
     248        WINFO                   *p_winfo;               /* 待ち情報ブロックへのポインタ */
     249        MTXCB                   *p_lastmtx;             /* 最後にロックしたミューテックス */
     250        TSKCTXB                 tskctxb;                /* タスクコンテキストブロック */
    417251} TCB;
    418252
    419253/*
    420  *  実行状æ
    421 ‹ã®ã‚¿ã‚¹ã‚¯
    422  *
    423  *  実行状æ
    424 ‹ã®ã‚¿ã‚¹ã‚¯ï¼ˆï¼ãƒ—ロセッサがコンテキストを持っているタスク)の
    425  *  TCBを指すポインタ.実行状æ
    426 ‹ã®ã‚¿ã‚¹ã‚¯ãŒãªã„場合はNULLにする.
    427  *
    428  *  サービスコールの処理中で,自タスク(サービスコールを呼び出したタス
    429  *  ク)に関するæƒ
    430 å ±ã‚’参ç
    431 §ã™ã‚‹å ´åˆã¯p_runtskを使う.p_runtskを書き換え
    432  *  るのは,ディスパッチャ(と初期化処理)のみである.
     254 *  実行状態のタスク
     255 *
     256 *  実行状態のタスク(=プロセッサがコンテキストを持っているタスク)の
     257 *  TCBを指すポインタ.実行状態のタスクがない場合はNULLにする.
     258 *
     259 *  サービスコールの処理中で,自タスク(サービスコールを呼び出したタス
     260 *  ク)に関する情報を参照する場合はp_runtskを使う.p_runtskを書き換え
     261 *  るのは,ディスパッチャ(と初期化処理)のみである.
    433262 */
    434263extern TCB      *p_runtsk;
    435264
    436265/*
    437  *  実行すべきタスク
    438  *
    439  *  実行すべきタスクのTCBを指すポインタ.実行できるタスクがない場合は
    440  *  NULLにする.
    441  *
    442  *  p_runtskは,通常はp_schedtskと一致しているが,非タスクコンテキスト
    443  *  実行中は,一致しているとは限らない.割込み優å
    444 ˆåº¦ãƒžã‚¹ã‚¯å
    445 ¨è§£é™¤ã§ãªã„
    446  *  状æ
    447 ‹ã®é–“とディスパッチ禁止状æ
    448 ‹ã®é–“(すなわち,dspflgがfalseである間)
    449  *  は,p_schedtskを更新しない.
     266 *  実行すべきタスク
     267 *
     268 *  実行すべきタスクのTCBを指すポインタ.実行できるタスクがない場合は
     269 *  NULLにする.
     270 *
     271 *  p_runtskは,通常はp_schedtskと一致しているが,非タスクコンテキスト
     272 *  実行中は,一致しているとは限らない.割込み優先度マスク全解除でない
     273 *  状態の間とディスパッチ禁止状態の間(すなわち,dspflgがfalseである間)
     274 *  は,p_schedtskを更新しない.
    450275 */
    451276extern TCB      *p_schedtsk;
    452277
    453278/*
    454  *  ディスパッチ許可状æ
    455 ‹
    456  *
    457  *  ディスパッチ許可状æ
    458 ‹ã§ã‚ることを示すフラグ.
     279 *  ディスパッチ許可状態
     280 *
     281 *  ディスパッチ許可状態であることを示すフラグ.
    459282 */
    460283extern bool_t   enadsp;
    461284
    462285/*
    463  *  タスクディスパッチ可能状æ
    464 ‹
    465  *
    466  *  割込み優å
    467 ˆåº¦ãƒžã‚¹ã‚¯å
    468 ¨è§£é™¤çŠ¶æ
    469 ‹ã§ã‚り,ディスパッチ許可状æ
    470 ‹ã§ã‚る(ディ
    471  *  スパッチ禁止状æ
    472 ‹ã§ãªã„)ことを示すフラグ.ディスパッチ保留状æ
    473 ‹ã§ãª
    474  *  いことは,タスクコンテキスト実行中で,CPUロック状æ
    475 ‹ã§ãªãï¼Œdspflgが
    476  *  trueであることで判別することができる.
     286 *  タスクディスパッチ可能状態
     287 *
     288 *  割込み優先度マスク全解除状態であり,ディスパッチ許可状態である(ディ
     289 *  スパッチ禁止状態でない)ことを示すフラグ.ディスパッチ保留状態でな
     290 *  いことは,タスクコンテキスト実行中で,CPUロック状態でなく,dspflgが
     291 *  trueであることで判別することができる.
    477292 */
    478293extern bool_t   dspflg;
    479294
    480295/*
    481  *  レディキュー
    482  *
    483  *  レディキューは,実行できる状æ
    484 ‹ã®ã‚¿ã‚¹ã‚¯ã‚’管理するためのキューである.
    485  *  実行状æ
    486 ‹ã®ã‚¿ã‚¹ã‚¯ã‚‚管理しているため,レディ(実行可能)キューという
    487  *  名称は正確ではないが,レディキューという名称が定着しているため,こ
    488  *  の名称で呼ぶことにする.
    489  *
    490  *  レディキューは,優å
    491 ˆåº¦ã”とのタスクキューで構成されている.タスクの
    492  *  TCBは,該当する優å
    493 ˆåº¦ã®ã‚­ãƒ¥ãƒ¼ã«ç™»éŒ²ã•ã‚Œã‚‹ï¼Ž
     296 *  レディキュー
     297 *
     298 *  レディキューは,実行できる状態のタスクを管理するためのキューである.
     299 *  実行状態のタスクも管理しているため,レディ(実行可能)キューという
     300 *  名称は正確ではないが,レディキューという名称が定着しているため,こ
     301 *  の名称で呼ぶことにする.
     302 *
     303 *  レディキューは,優先度ごとのタスクキューで構成されている.タスクの
     304 *  TCBは,該当する優先度のキューに登録される.
    494305 */
    495306extern QUEUE    ready_queue[TNUM_TPRI];
    496307
    497308/*
    498  *  レディキューサーチのためのビットマップ
    499  *
    500  *  レディキューのサーチを効率よく行うために,優å
    501 ˆåº¦ã”とのタスクキュー
    502  *  にタスクがå
    503 ¥ã£ã¦ã„るかどうかを示すビットマップを用意している.ビッ
    504  *  トマップを使うことで,メモリアクセスの回数を減らすことができるが,
    505  *  ビット操作命令がå
    506 
    507 å®Ÿã—ていないプロセッサで,優å
    508 ˆåº¦ã®æ®µéšŽæ•°ãŒå°‘ない
    509  *  場合には,ビットマップ操作のオーバーヘッドのために,逆に効率が落ち
    510  *  る可能性もある.
    511  *
    512  *  優å
    513 ˆåº¦ãŒ16段階であることを仮定しているため,uint16_t型としている.
     309 *  レディキューサーチのためのビットマップ
     310 *
     311 *  レディキューのサーチを効率よく行うために,優先度ごとのタスクキュー
     312 *  にタスクが入っているかどうかを示すビットマップを用意している.ビッ
     313 *  トマップを使うことで,メモリアクセスの回数を減らすことができるが,
     314 *  ビット操作命令が充実していないプロセッサで,優先度の段階数が少ない
     315 *  場合には,ビットマップ操作のオーバーヘッドのために,逆に効率が落ち
     316 *  る可能性もある.
     317 *
     318 *  優先度が16段階であることを仮定しているため,uint16_t型としている.
    514319 */
    515320extern uint16_t ready_primap;
    516321
    517322/*
    518  *  使用していないTCBのリスト
     323 *  使用していないTCBのリスト
    519324 */
    520325extern QUEUE    free_tcb;
    521326
    522327/*
    523  *  タスクIDの最大値(kernel_cfg.c)
     328 *  タスクIDの最大値(kernel_cfg.c)
    524329 */
    525330extern const ID tmax_tskid;
     
    527332
    528333/*
    529  *  タスク初期化ブロックのエリア(kernel_cfg.c)
     334 *  タスク初期化ブロックのエリア(kernel_cfg.c)
    530335 */
    531336extern const TINIB      tinib_table[];
     
    533338
    534339/*
    535  *  タスク生成順序テーブル(kernel_cfg.c)
     340 *  タスク生成順序テーブル(kernel_cfg.c)
    536341 */
    537342extern const ID torder_table[];
    538343
    539344/*
    540  *  TCBのエリア(kernel_cfg.c)
     345 *  TCBのエリア(kernel_cfg.c)
    541346 */
    542347extern TCB      tcb_table[];
    543348
    544349/*
    545  *  タスクの数
     350 *  タスクの数
    546351 */
    547352#define tnum_tsk        ((uint_t)(tmax_tskid - TMIN_TSKID + 1))
     
    549354
    550355/*
    551  *  タスクIDからTCBを取り出すためのマクロ
     356 *  タスクIDからTCBを取り出すためのマクロ
    552357 */
    553358#define INDEX_TSK(tskid)        ((uint_t)((tskid) - TMIN_TSKID))
     
    555360
    556361/*
    557  *  TCBからタスクIDを取り出すためのマクロ
     362 *  TCBからタスクIDを取り出すためのマクロ
    558363 */
    559364#define TSKID(p_tcb)    ((ID)(((p_tcb) - tcb_table) + TMIN_TSKID))
    560365
    561366/*
    562  *  タスク管理モジュールの初期化
     367 *  タスク管理モジュールの初期化
    563368 */
    564369extern void     initialize_task(void);
    565370
    566371/*
    567  *  最高優å
    568 ˆé †ä½ã‚¿ã‚¹ã‚¯ã®ã‚µãƒ¼ãƒ
    569  *
    570  *  レディキュー中の最高優å
    571 ˆé †ä½ã®ã‚¿ã‚¹ã‚¯ã‚’サーチし,そのTCBへのポインタ
    572  *  を返す.レディキューが空の場合には,この関数を呼び出してはならない.
     372 *  最高優先順位タスクのサーチ
     373 *
     374 *  レディキュー中の最高優先順位のタスクをサーチし,そのTCBへのポインタ
     375 *  を返す.レディキューが空の場合には,この関数を呼び出してはならない.
    573376 */
    574377extern TCB      *search_schedtsk(void);
    575378
    576379/*
    577  *  実行できる状æ
    578 ‹ã¸ã®é·ç§»
    579  *
    580  *  p_tcbで指定されるタスクをレディキューに挿å
    581 ¥ã™ã‚‹ï¼Žãƒ¬ãƒ‡ã‚£ã‚­ãƒ¥ãƒ¼ã«æŒ¿å
    582 ¥
    583  *  したタスクの優å
    584 ˆåº¦ãŒï¼Œå®Ÿè¡Œã™ã¹ãã‚¿ã‚¹ã‚¯ã®å„ªå
    585 ˆåº¦ã‚ˆã‚Šã‚‚高い場合は,実
    586  *  行すべきタスクを更新する.
     380 *  実行できる状態への遷移
     381 *
     382 *  p_tcbで指定されるタスクをレディキューに挿入する.レディキューに挿入
     383 *  したタスクの優先度が,実行すべきタスクの優先度よりも高い場合は,実
     384 *  行すべきタスクを更新する.
    587385 */
    588386extern void     make_runnable(TCB *p_tcb);
    589387
    590388/*
    591  *  実行できる状æ
    592 ‹ã‹ã‚‰ä»–の状æ
    593 ‹ã¸ã®é·ç§»
    594  *
    595  *  p_tcbで指定されるタスクをレディキューから削除する.p_tcbで指定した
    596  *  タスクが実行すべきタスクであった場合には,実行すべきタスクを更新す
    597  *  る.
     389 *  実行できる状態から他の状態への遷移
     390 *
     391 *  p_tcbで指定されるタスクをレディキューから削除する.p_tcbで指定した
     392 *  タスクが実行すべきタスクであった場合には,実行すべきタスクを更新す
     393 *  る.
    598394 */
    599395extern void     make_non_runnable(TCB *p_tcb);
    600396
    601397/*
    602  *  休止状æ
    603 ‹ã¸ã®é·ç§»
    604  *
    605  *  p_tcbで指定されるタスクの状æ
    606 ‹ã‚’休止状æ
    607 ‹ã¨ã™ã‚‹ï¼Žã¾ãŸï¼Œã‚¿ã‚¹ã‚¯ã®èµ·å‹•
    608  *  時に初期化すべき変数の初期化と,タスク起動のためのコンテキストを設
    609  *  定する.
     398 *  休止状態への遷移
     399 *
     400 *  p_tcbで指定されるタスクの状態を休止状態とする.また,タスクの起動
     401 *  時に初期化すべき変数の初期化と,タスク起動のためのコンテキストを設
     402 *  定する.
    610403 */
    611404extern void     make_dormant(TCB *p_tcb);
    612405
    613406/*
    614  *  休止状æ
    615 ‹ã‹ã‚‰å®Ÿè¡Œã§ãã‚‹çŠ¶æ
    616 ‹ã¸ã®é·ç§»
    617  *
    618  *  p_tcbで指定されるタスクの状æ
    619 ‹ã‚’休止状æ
    620 ‹ã‹ã‚‰å®Ÿè¡Œã§ãã‚‹çŠ¶æ
    621 ‹ã¨ã™ã‚‹ï¼Ž
     407 *  休止状態から実行できる状態への遷移
     408 *
     409 *  p_tcbで指定されるタスクの状態を休止状態から実行できる状態とする.
    622410 */
    623411extern void     make_active(TCB *p_tcb);
    624412
    625413/*
    626  *  タスクの優å
    627 ˆåº¦ã®å¤‰æ›´
    628  *
    629  *  p_tcbで指定されるタスクの優å
    630 ˆåº¦ã‚’newpri(å†
    631 éƒ¨è¡¨ç¾ï¼‰ã«å¤‰æ›´ã™ã‚‹ï¼Žã¾ãŸï¼Œ
    632  *  å¿
    633 è¦ãªå ´åˆã«ã¯ï¼Œå®Ÿè¡Œã™ã¹ãã‚¿ã‚¹ã‚¯ã‚’更新する.
    634  *
    635  *  p_tcbで指定されるタスクの優å
    636 ˆé †ä½ã¯ï¼Œå„ªå
    637 ˆåº¦ãŒåŒã˜ã‚¿ã‚¹ã‚¯ã®ä¸­ã§ï¼Œ
    638  *  mtxmodeがfalseの時は最低,mtxmodeがtrueの時は最高とする.
     414 *  タスクの優先度の変更
     415 *
     416 *  p_tcbで指定されるタスクの優先度をnewpri(内部表現)に変更する.また,
     417 *  必要な場合には,実行すべきタスクを更新する.
     418 *
     419 *  p_tcbで指定されるタスクの優先順位は,優先度が同じタスクの中で,
     420 *  mtxmodeがfalseの時は最低,mtxmodeがtrueの時は最高とする.
    639421 */
    640422extern void     change_priority(TCB *p_tcb, uint_t newpri, bool_t mtxmode);
    641423
    642424/*
    643  *  レディキューの回転
    644  *
    645  *  レディキュー中の,p_queueで指定されるタスクキューを回転させる.また,
    646  *  å¿
    647 è¦ãªå ´åˆã«ã¯ï¼Œå®Ÿè¡Œã™ã¹ãã‚¿ã‚¹ã‚¯ã‚’更新する.
     425 *  レディキューの回転
     426 *
     427 *  レディキュー中の,p_queueで指定されるタスクキューを回転させる.また,
     428 *  必要な場合には,実行すべきタスクを更新する.
    648429 */
    649430extern void     rotate_ready_queue(QUEUE *p_queue);
    650431
    651432/*
    652  *  タスクの終了処理
    653  *
    654  *  p_tcbで指定されるタスクを終了させる処理を行う.タスクの起動要求キュー
    655  *  イング数が0でない場合には,再度起動するための処理を行う.
     433 *  タスクの終了処理
     434 *
     435 *  p_tcbで指定されるタスクを終了させる処理を行う.タスクの起動要求キュー
     436 *  イング数が0でない場合には,再度起動するための処理を行う.
    656437 */
    657438extern void     task_terminate(TCB *p_tcb);
Note: See TracChangeset for help on using the changeset viewer.