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/doc/configurator.txt

    • Property svn:mime-type changed from text/plain to text/plane; charset=UTF-8
    r313 r315  
    11
    2                 TOPPERS/ASPカーネル
    3                 コンフィギュレータ仕様
    4 
    5                 対応バージョン: Release 1.9.3
    6                 最終更新: 2013å¹´12月31日
    7 
    8 ã“のドキュメントは,TOPPERS/ASPカーネルのコンフィギュレータが標準的に生
    9 æˆã™ã¹ããƒ•ã‚¡ã‚¤ãƒ«ã®å†
    10 å®¹ã«ã¤ã„て解説したものである.ターゲット依存に生成
    11 ã™ã‚‹å†
    12 å®¹ã«ã¤ã„ては,このドキュメントの範囲外である.
     2                TOPPERS/ASPカーネル
     3                コンフィギュレータ仕様
     4
     5                対応バージョン: Release 1.9.3
     6                最終更新: 2013年12月31日
     7
     8このドキュメントは,TOPPERS/ASPカーネルのコンフィギュレータが標準的に生
     9成すべきファイルの内容について解説したものである.ターゲット依存に生成
     10する内容については,このドキュメントの範囲外である.
    1311
    1412----------------------------------------------------------------------
     
    2018             Graduate School of Information Science, Nagoya Univ., JAPAN
    2119 
    22  ä¸Šè¨˜è‘—作権è€
    23 ã¯ï¼Œä»¥ä¸‹ã®(1)~(4)の条件を満たす場合に限り,本ソフトウェ
    24  ã‚¢ï¼ˆæœ¬ã‚½ãƒ•ãƒˆã‚¦ã‚§ã‚¢ã‚’改変したものを含む.以下同じ)を使用・複製・改
    25  å¤‰ãƒ»å†é
    26 å¸ƒï¼ˆä»¥ä¸‹ï¼Œåˆ©ç”¨ã¨å‘¼ã¶ï¼‰ã™ã‚‹ã“とを無償で許諾する.
    27  (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
    28      æ¨©è¡¨ç¤ºï¼Œã“の利用条件および下記の無保証規定が,そのままの形でソー
    29      ã‚¹ã‚³ãƒ¼ãƒ‰ä¸­ã«å«ã¾ã‚Œã¦ã„ること.
    30  (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
    31      ç”¨ã§ãã‚‹å½¢ã§å†é
    32 å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œå†é
    33 å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨
    34      è€
    35 ãƒžãƒ‹ãƒ¥ã‚¢ãƒ«ãªã©ï¼‰ã«ï¼Œä¸Šè¨˜ã®è‘—作権表示,この利用条件および下記
    36      ã®ç„¡ä¿è¨¼è¦å®šã‚’掲載すること.
    37  (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
    38      ç”¨ã§ããªã„形で再é
    39 å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œæ¬¡ã®ã„ずれかの条件を満たすこ
    40      ã¨ï¼Ž
    41    (a) 再é
    42 å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨è€
    43 ãƒžãƒ‹ãƒ¥ã‚¢ãƒ«ãªã©ï¼‰ã«ï¼Œä¸Šè¨˜ã®è‘—
    44        ä½œæ¨©è¡¨ç¤ºï¼Œã“の利用条件および下記の無保証規定を掲載すること.
    45    (b) 再é
    46 å¸ƒã®å½¢æ
    47 ‹ã‚’,別に定める方法によって,TOPPERSプロジェクトに
    48        å ±å‘Šã™ã‚‹ã“と.
    49  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
    50      å®³ã‹ã‚‰ã‚‚,上記著作権è€
    51 ãŠã‚ˆã³TOPPERSプロジェクトをå
    52 è²¬ã™ã‚‹ã“と.
    53      ã¾ãŸï¼Œæœ¬ã‚½ãƒ•ãƒˆã‚¦ã‚§ã‚¢ã®ãƒ¦ãƒ¼ã‚¶ã¾ãŸã¯ã‚¨ãƒ³ãƒ‰ãƒ¦ãƒ¼ã‚¶ã‹ã‚‰ã®ã„かなる理
    54      ç”±ã«åŸºã¥ãè«‹æ±‚からも,上記著作権è€
    55 ãŠã‚ˆã³TOPPERSプロジェクトを
    56      å
    57 è²¬ã™ã‚‹ã“と.
     20 上記著作権者は,以下の(1)~(4)の条件を満たす場合に限り,本ソフトウェ
     21 ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
     22 変・再配布(以下,利用と呼ぶ)することを無償で許諾する.
     23 (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
     24     権表示,この利用条件および下記の無保証規定が,そのままの形でソー
     25     スコード中に含まれていること.
     26 (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
     27     用できる形で再配布する場合には,再配布に伴うドキュメント(利用
     28     者マニュアルなど)に,上記の著作権表示,この利用条件および下記
     29     の無保証規定を掲載すること.
     30 (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
     31     用できない形で再配布する場合には,次のいずれかの条件を満たすこ
     32     と.
     33   (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
     34       作権表示,この利用条件および下記の無保証規定を掲載すること.
     35   (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
     36       報告すること.
     37 (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
     38     害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
     39     また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
     40     由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを
     41     免責すること.
    5842 
    59  æœ¬ã‚½ãƒ•ãƒˆã‚¦ã‚§ã‚¢ã¯ï¼Œç„¡ä¿è¨¼ã§æä¾›ã•ã‚Œã¦ã„るものである.上記著作権è€
    60 ãŠ
    61  ã‚ˆã³TOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
    62  ã«å¯¾ã™ã‚‹é©åˆæ€§ã‚‚含めて,いかなる保証も行わない.また,本ソフトウェ
    63  ã‚¢ã®åˆ©ç”¨ã«ã‚ˆã‚Šç›´æŽ¥çš„または間接的に生じたいかなる損害に関しても,そ
    64  ã®è²¬ä»»ã‚’負わない.
     43 本ソフトウェアは,無保証で提供されているものである.上記著作権者お
     44 よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
     45 に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
     46 アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
     47 の責任を負わない.
    6548 
    6649 $Id$
    6750----------------------------------------------------------------------
    6851
    69 â—‹ç›®æ¬¡
    70 
    71 ãƒ»ç”Ÿæˆã™ã‚‹ãƒ•ã‚¡ã‚¤ãƒ«ã®ç¨®é¡ž
    72 ãƒ»é™çš„API一覧
    73 ãƒ»ã‚«ãƒ¼ãƒãƒ«æ§‹æˆãƒ»åˆæœŸåŒ–ヘッダファイル(kernel_cfg.h)
    74         (1) 固定生成部分
    75         (2) オブジェクト数の定義
    76         (3) オブジェクトのID番号の定義
    77 ãƒ»ã‚«ãƒ¼ãƒãƒ«æ§‹æˆãƒ»åˆæœŸåŒ–ファイル(kernel_cfg.c)
    78         (1) 固定生成部分
    79         (2) カーネルの種類のチェック
    80         (3) インクルードディレクティブ(#include)の処理
    81         (4) トレースログマクロのデフォルト定義
    82         (5) オブジェクトのID番号を保持する変数の定義
    83         (6) 各カーネルオブジェクトに関する定義
    84         (7) 割込みに関する定義
    85         (8) CPU例外に関する定義
    86         (9) 非タスクコンテキスト用のスタック領域に関する定義
    87         (10) タイムイベント管理に関する定義
    88         (11) 各モジュールの初期化関数の定義
    89         (12) 初期化ルーチンの実行関数の定義
    90         (13) 終了処理ルーチンの実行関数の定義
    91 
    92 
    93 â—‹ç”Ÿæˆã™ã‚‹ãƒ•ã‚¡ã‚¤ãƒ«ã®ç¨®é¡ž
    94 
    95 ASPカーネルのコンフィギュレータは,システムコンフィギュレーションファイ
    96 ãƒ«ã‚’処理して,カーネル構成・初期化ファイル(kernel_cfg.c)と構成・初期
    97 åŒ–ヘッダファイル(kernel_cfg.h)を生成する.また,コンフィギュレータの
    98 å‡¦ç†ã®é€”中に,å¿
    99 è¦ãªä¸­é–“ファイルを生成する.
    100 
    101 
    102 â—‹é™çš„API一覧
    103 
    104 ASPカーネルのコンフィギュレータが処理する静的APIは次の通り.
    105 
    106 (1) タスク管理機能
     52○目次
     53
     54・生成するファイルの種類
     55・静的API一覧
     56・カーネル構成・初期化ヘッダファイル(kernel_cfg.h)
     57        (1) 固定生成部分
     58        (2) オブジェクト数の定義
     59        (3) オブジェクトのID番号の定義
     60・カーネル構成・初期化ファイル(kernel_cfg.c)
     61        (1) 固定生成部分
     62        (2) カーネルの種類のチェック
     63        (3) インクルードディレクティブ(#include)の処理
     64        (4) トレースログマクロのデフォルト定義
     65        (5) オブジェクトのID番号を保持する変数の定義
     66        (6) 各カーネルオブジェクトに関する定義
     67        (7) 割込みに関する定義
     68        (8) CPU例外に関する定義
     69        (9) 非タスクコンテキスト用のスタック領域に関する定義
     70        (10) タイムイベント管理に関する定義
     71        (11) 各モジュールの初期化関数の定義
     72        (12) 初期化ルーチンの実行関数の定義
     73        (13) 終了処理ルーチンの実行関数の定義
     74
     75
     76○生成するファイルの種類
     77
     78ASPカーネルのコンフィギュレータは,システムコンフィギュレーションファイ
     79ルを処理して,カーネル構成・初期化ファイル(kernel_cfg.c)と構成・初期
     80化ヘッダファイル(kernel_cfg.h)を生成する.また,コンフィギュレータの
     81処理の途中に,必要な中間ファイルを生成する.
     82
     83
     84○静的API一覧
     85
     86ASPカーネルのコンフィギュレータが処理する静的APIは次の通り.
     87
     88(1) タスク管理機能
    10789        CRE_TSK(ID tskid, { ATR tskatr, intptr_t exinf, TASK task,
    10890                                                                PRI itskpri, SIZE stksz, STK_T *stk })
    10991
    110 (2) タスク例外処理機能
     92(2) タスク例外処理機能
    11193        DEF_TEX(ID tskid, { ATR texatr, TEXRTN texrtn })
    11294
    113 (3) 同期・通信機能
     95(3) 同期・通信機能
    11496        CRE_SEM(ID semid, { ATR sematr, uint_t isemcnt, uint_t maxsem })
    11597        CRE_FLG(ID flgid, { ATR flgatr, FLGPTN iflgptn })
     
    118100        CRE_MBX(ID mbxid, { ATR mbxatr, PRI maxmpri, void *mprihd })
    119101
    120 â€» dtqmb,pdqmb,mprihdがNULLでない場合はサポートしない.
    121 
    122 (4) メモリプール管理機能
     102※ dtqmb,pdqmb,mprihdがNULLでない場合はサポートしない.
     103
     104(4) メモリプール管理機能
    123105        CRE_MPF(ID mpfid, { ATR mpfatr, uint_t blkcnt, uint_t blksz,
    124106                                                                                MPF_T *mpf, void *mpfmb })
    125107
    126 â€» mpfmbがNULLでない場合はサポートしない.
    127 
    128 (5) 時間管理機能
     108※ mpfmbがNULLでない場合はサポートしない.
     109
     110(5) 時間管理機能
    129111        CRE_CYC(ID cycid, { ATR cycatr, intptr_t exinf, CYCHDR cychdr,
    130112                                                                RELTIM cyctim, RELTIM cycphs })
    131113        CRE_ALM(ID almid, { ATR almatr, intptr_t exinf, ALMHDR almhdr })
    132114
    133 (6) 割込み管理機能
     115(6) 割込み管理機能
    134116        CFG_INT(INTNO intno, { ATR intatr, PRI intpri })
    135117        ATT_ISR({ ATR isratr, intptr_t exinf, INTNO intno, ISR isr, PRI isrpri })
    136118        DEF_INH(INHNO inhno, { ATR inhatr, INTHDR inthdr })
    137119
    138 (7) CPU例外管理機能
     120(7) CPU例外管理機能
    139121        DEF_EXC(EXCNO excno, { ATR excatr, EXCHDR exchdr })
    140122
    141 (8) システム構成管理機能
     123(8) システム構成管理機能
    142124        DEF_ICS({ SIZE istksz, STK_T *istk })
    143125        ATT_INI({ ATR iniatr, intptr_t exinf, INIRTN inirtn })
    144126        ATT_TER({ ATR teratr, intptr_t exinf, TERRTN terrtn })
    145127
    146 ã“れらの静的APIのパラメータのå†
    147 ï¼ŒID型のパラメータはオブジェクト識別名,
    148 ãƒã‚¤ãƒ³ã‚¿åž‹ï¼ˆvoid *,TASK,TEXRTN,CYCHDR,ALMHDR,ISR,INTHDR,EXCHDR,
    149 INIRTN,TERRTN,STK_T *,MPF_T *)およびintptr_t型のパラメータは一般定
    150 æ•°å¼ãƒ‘ラメータとする.その他のパラメータは,整数定数式パラメータとする.
    151 
    152 
    153 â—‹ã‚«ãƒ¼ãƒãƒ«æ§‹æˆãƒ»åˆæœŸåŒ–ヘッダファイル(kernel_cfg.h)
    154 
    155 ã‚«ãƒ¼ãƒãƒ«æ§‹æˆãƒ»åˆæœŸåŒ–ヘッダファイル(kernel_cfg.h)には,次の定義を生成
    156 ã™ã‚‹ï¼Ž
    157 
    158 (1) 固定生成部分
    159 
    160 kernel_cfg.hが複数回インクルードされるのを防ぐための記述を生成する.å
    161 ·
    162 ä½“的には,ファイルのå
    163 ˆé ­ã«æ¬¡ã®è¡Œã‚’生成する.
     128これらの静的APIのパラメータの内,ID型のパラメータはオブジェクト識別名,
     129ポインタ型(void *,TASK,TEXRTN,CYCHDR,ALMHDR,ISR,INTHDR,EXCHDR,
     130INIRTN,TERRTN,STK_T *,MPF_T *)およびintptr_t型のパラメータは一般定
     131数式パラメータとする.その他のパラメータは,整数定数式パラメータとする.
     132
     133
     134○カーネル構成・初期化ヘッダファイル(kernel_cfg.h)
     135
     136カーネル構成・初期化ヘッダファイル(kernel_cfg.h)には,次の定義を生成
     137する.
     138
     139(1) 固定生成部分
     140
     141kernel_cfg.hが複数回インクルードされるのを防ぐための記述を生成する.具
     142体的には,ファイルの先頭に次の行を生成する.
    164143
    165144#ifndef TOPPERS_KERNEL_CFG_H
    166145#define TOPPERS_KERNEL_CFG_H
    167146
    168 ã¾ãŸï¼Œãƒ•ã‚¡ã‚¤ãƒ«ã®æœ«å°¾ã«æ¬¡ã®è¡Œã‚’生成する.
     147また,ファイルの末尾に次の行を生成する.
    169148
    170149#endif  /* TOPPERS_KERNEL_CFG_H */
    171150
    172 (2) オブジェクト数の定義
    173 
    174 ã‚«ãƒ¼ãƒãƒ«ãŒã‚µãƒãƒ¼ãƒˆã™ã‚‹ã‚ªãƒ–ジェクトの数をマクロ定義するプリプロセッサディ
    175 ãƒ¬ã‚¯ãƒ†ã‚£ãƒ–(#define)を生成する.å
    176 ·ä½“的には,次のような記述を生成する.
    177 
    178 #define TNUM_TSKID      <タスクの数>
    179 #define TNUM_SEMID      <セマフォの数>
    180 #define TNUM_FLGID      <イベントフラグの数>
    181 #define TNUM_DTQID      <データキューの数>
    182 #define TNUM_PDQID      <優å
    183 ˆåº¦ãƒ‡ãƒ¼ã‚¿ã‚­ãƒ¥ãƒ¼ã®æ•°>
    184 #define TNUM_MBXID      <メールボックスの数>
    185 #define TNUM_MPFID      <固定長メモリプールの数>
    186 #define TNUM_CYCID      <周期ハンドラの数>
    187 #define TNUM_ALMID      <アラームハンドラの数>
    188 
    189 (3) オブジェクトのID番号の定義
    190 
    191 ã‚³ãƒ³ãƒ•ã‚£ã‚®ãƒ¥ãƒ¬ãƒ¼ã‚¿ãŒID番号を割り付けたオブジェクトの名前を,割り付けた
    192 ID番号にマクロ定義するプリプロセッサディレクティブ(#define)を生成する.
    193 ä¾‹ãˆã°ï¼Œæ¬¡ã®ã‚ˆã†ãªè¨˜è¿°ã‚’生成する.
     151(2) オブジェクト数の定義
     152
     153カーネルがサポートするオブジェクトの数をマクロ定義するプリプロセッサディ
     154レクティブ(#define)を生成する.具体的には,次のような記述を生成する.
     155
     156#define TNUM_TSKID      <タスクの数>
     157#define TNUM_SEMID      <セマフォの数>
     158#define TNUM_FLGID      <イベントフラグの数>
     159#define TNUM_DTQID      <データキューの数>
     160#define TNUM_PDQID      <優先度データキューの数>
     161#define TNUM_MBXID      <メールボックスの数>
     162#define TNUM_MPFID      <固定長メモリプールの数>
     163#define TNUM_CYCID      <周期ハンドラの数>
     164#define TNUM_ALMID      <アラームハンドラの数>
     165
     166(3) オブジェクトのID番号の定義
     167
     168コンフィギュレータがID番号を割り付けたオブジェクトの名前を,割り付けた
     169ID番号にマクロ定義するプリプロセッサディレクティブ(#define)を生成する.
     170例えば,次のような記述を生成する.
    194171
    195172#define TASK1   1
     
    198175
    199176
    200 â—‹ã‚«ãƒ¼ãƒãƒ«æ§‹æˆãƒ»åˆæœŸåŒ–ファイル(kernel_cfg.c)
    201 
    202 (1) 固定生成部分
    203 
    204 kernel_cfg.c用のヘッダファイルとID自動割付け結果ファイルをインクルード
    205 ã™ã‚‹ãƒ—リプロセッサディレクティブ(#include)を生成する.å
    206 ·ä½“的には,次
    207 ã®è¡Œã‚’生成する.
     177○カーネル構成・初期化ファイル(kernel_cfg.c)
     178
     179(1) 固定生成部分
     180
     181kernel_cfg.c用のヘッダファイルとID自動割付け結果ファイルをインクルード
     182するプリプロセッサディレクティブ(#include)を生成する.具体的には,次
     183の行を生成する.
    208184
    209185#include "kernel/kernel_int.h"
    210186#include "kernel_cfg.h"
    211187
    212 (2) カーネルの種類のチェック
    213 
    214 kernel_cfg.cとカーネルの種類が一致しているかをチェックするために,次の
    215 è¡Œã‚’生成する.
     188(2) カーネルの種類のチェック
     189
     190kernel_cfg.cとカーネルの種類が一致しているかをチェックするために,次の
     191行を生成する.
    216192
    217193#if TKERNEL_PRID != 0x07u
     
    219195#endif
    220196
    221 (3) インクルードディレクティブ(#include)の処理
    222 
    223 ã‚·ã‚¹ãƒ†ãƒ ã‚³ãƒ³ãƒ•ã‚£ã‚®ãƒ¥ãƒ¬ãƒ¼ã‚·ãƒ§ãƒ³ãƒ•ã‚¡ã‚¤ãƒ«ã«å«ã¾ã‚Œã‚‹C言語プリプロセッサのイ
    224 ãƒ³ã‚¯ãƒ«ãƒ¼ãƒ‰ãƒ‡ã‚£ãƒ¬ã‚¯ãƒ†ã‚£ãƒ–(#include)と同一のディレクティブ(#include)
    225 ã‚’生成する.例えば,
     197(3) インクルードディレクティブ(#include)の処理
     198
     199システムコンフィギュレーションファイルに含まれるC言語プリプロセッサのイ
     200ンクルードディレクティブ(#include)と同一のディレクティブ(#include)
     201を生成する.例えば,
    226202
    227203#include "sample1.h"
    228204
    229 ã¨ã„うインクルードディレクティブに対して,
     205というインクルードディレクティブに対して,
    230206
    231207#include "sample1.h"
    232208
    233 ã¨ã„うディレクティブを生成する.生成するディレクティブの順序は,システ
    234 ãƒ ã‚³ãƒ³ãƒ•ã‚£ã‚®ãƒ¥ãƒ¬ãƒ¼ã‚·ãƒ§ãƒ³ãƒ•ã‚¡ã‚¤ãƒ«ä¸­ã§ã®ã‚¤ãƒ³ã‚¯ãƒ«ãƒ¼ãƒ‰ãƒ‡ã‚£ãƒ¬ã‚¯ãƒ†ã‚£ãƒ–の順序
    235 ã«ä¸€è‡´ã•ã›ã‚‹ï¼Ž
    236 
    237 (4) トレースログマクロのデフォルト定義
    238 
    239 kernel_cfg.cの中で使用するトレースログマクロのデフォルト定義を生成する.
    240 å
    241 ·ä½“的には,次の行を生成する.
     209というディレクティブを生成する.生成するディレクティブの順序は,システ
     210ムコンフィギュレーションファイル中でのインクルードディレクティブの順序
     211に一致させる.
     212
     213(4) トレースログマクロのデフォルト定義
     214
     215kernel_cfg.cの中で使用するトレースログマクロのデフォルト定義を生成する.
     216具体的には,次の行を生成する.
    242217
    243218#ifndef LOG_ISR_ENTER
     
    249224#endif /* LOG_ISR_LEAVE */
    250225
    251 (5) オブジェクトのID番号を保持する変数の定義
    252 
    253 ã‚³ãƒ³ãƒ•ã‚£ã‚®ãƒ¥ãƒ¬ãƒ¼ã‚¿ã«å¯¾ã™ã‚‹ã‚ªãƒ—ション指定(--external-id)により,コンフィ
    254 ã‚®ãƒ¥ãƒ¬ãƒ¼ã‚¿ãŒID 番号を割り付けたオブジェクトの名前の末尾に"_id"を付加し
    255 ãŸåå‰ã®å¤‰æ•°ã‚’生成する.変数は,const属性を付加したID型の変数とし,割り
    256 ä»˜ã‘たID番号を値とする.例えば,次のような記述を生成する.
     226(5) オブジェクトのID番号を保持する変数の定義
     227
     228コンフィギュレータに対するオプション指定(--external-id)により,コンフィ
     229ギュレータがID 番号を割り付けたオブジェクトの名前の末尾に"_id"を付加し
     230た名前の変数を生成する.変数は,const属性を付加したID型の変数とし,割り
     231付けたID番号を値とする.例えば,次のような記述を生成する.
    257232
    258233const ID TASK1_id = 1;
     
    260235const ID SEM1_id = 1;
    261236
    262 (6) 各カーネルオブジェクトに関する定義
    263 
    264 ã‚·ã‚¹ãƒ†ãƒ ã‚³ãƒ³ãƒ•ã‚£ã‚®ãƒ¥ãƒ¬ãƒ¼ã‚·ãƒ§ãƒ³ãƒ•ã‚¡ã‚¤ãƒ«ä¸­ã«ï¼Œã‚ªãƒ–ジェクトを生成する静的
    265 API「CRE_XXX」が含まれる各カーネルオブジェクトに関して,オブジェクト生
    266 æˆã®ãŸã‚ã®å®šç¾©ã‚’生成する.
    267 
    268 ã‚³ãƒ³ãƒ•ã‚£ã‚®ãƒ¥ãƒ¬ãƒ¼ã‚¿ã¯ï¼ŒåŒã˜ç¨®é¡žã®ã‚ªãƒ–ジェクトを生成する静的APIを集め,各
    269 ã‚ªãƒ–ジェクトにID番号を割り付ける.ID番号は,他のオブジェクトのID番号と
    270 é‡è¤‡ãŒãªãï¼ŒID番号が連続するように割り付ける.
    271 
    272 ã‚³ãƒ³ãƒ•ã‚£ã‚®ãƒ¥ãƒ¬ãƒ¼ã‚¿ã«å¯¾ã™ã‚‹ã‚ªãƒ—ション指定(--id-input-file)により,コン
    273 ãƒ•ã‚£ã‚®ãƒ¥ãƒ¬ãƒ¼ã‚¿ãŒã‚ªãƒ–ジェクトに割り付けるID番号を指定することができる.
    274 åŒã˜ç¨®é¡žã®ç•°ãªã‚‹ã‚ªãƒ–ジェクトに対して同じID番号を指定したり,コンフィギュ
    275 ãƒ¬ãƒ¼ã‚¿ãŒID番号をできる限り連続するように割り付けたとしてもID番号が連続
    276 ã—ない場合には(ASPカーネルは,オブジェクトのID番号が連続していることを
    277 ä»®å®šã—て実è£
    278 ã—てある),コンフィギュレータはエラーを報告する.
    279 
    280 ã¾ãŸï¼Œã‚³ãƒ³ãƒ•ã‚£ã‚®ãƒ¥ãƒ¬ãƒ¼ã‚¿ã«å¯¾ã™ã‚‹ã‚ªãƒ—ション指定(--id-output-file)によ
    281 ã‚Šï¼Œã‚³ãƒ³ãƒ•ã‚£ã‚®ãƒ¥ãƒ¬ãƒ¼ã‚¿ãŒID番号を割り付けたオブジェクトの名前と割り付け
    282 ãŸID番号の組を,オプションで指定したファイルに出力する.
    283 
    284 å„カーネルオブジェクトに関する定義の標準的な構成は,次の通りである.オ
    285 ãƒ–ジェクトによって例外がある場合には,オブジェクト毎のé 
    286 ã§èª¬æ˜Žã™ã‚‹ï¼Ž
    287 
    288 (a) 最大のオブジェクトIDの変数の定義
    289 
    290 æœ€å¤§ã®ã‚ªãƒ–ジェクトIDを持つ変数の定義を生成する.å
    291 ·ä½“的には,オブジェク
    292 ãƒˆã®çœç•¥è¨˜å·ã‚’「XXX/xxx」とすると,次のような行を生成する.
     237(6) 各カーネルオブジェクトに関する定義
     238
     239システムコンフィギュレーションファイル中に,オブジェクトを生成する静的
     240API「CRE_XXX」が含まれる各カーネルオブジェクトに関して,オブジェクト生
     241成のための定義を生成する.
     242
     243コンフィギュレータは,同じ種類のオブジェクトを生成する静的APIを集め,各
     244オブジェクトにID番号を割り付ける.ID番号は,他のオブジェクトのID番号と
     245重複がなく,ID番号が連続するように割り付ける.
     246
     247コンフィギュレータに対するオプション指定(--id-input-file)により,コン
     248フィギュレータがオブジェクトに割り付けるID番号を指定することができる.
     249同じ種類の異なるオブジェクトに対して同じID番号を指定したり,コンフィギュ
     250レータがID番号をできる限り連続するように割り付けたとしてもID番号が連続
     251しない場合には(ASPカーネルは,オブジェクトのID番号が連続していることを
     252仮定して実装してある),コンフィギュレータはエラーを報告する.
     253
     254また,コンフィギュレータに対するオプション指定(--id-output-file)によ
     255り,コンフィギュレータがID番号を割り付けたオブジェクトの名前と割り付け
     256たID番号の組を,オプションで指定したファイルに出力する.
     257
     258各カーネルオブジェクトに関する定義の標準的な構成は,次の通りである.オ
     259ブジェクトによって例外がある場合には,オブジェクト毎の項で説明する.
     260
     261(a) 最大のオブジェクトIDの変数の定義
     262
     263最大のオブジェクトIDを持つ変数の定義を生成する.具体的には,オブジェク
     264トの省略記号を「XXX/xxx」とすると,次のような行を生成する.
    293265
    294266const ID _kernel_tmax_xxxid = (TMIN_XXXID + TNUM_XXXID - 1);
    295267
    296 (b) オブジェクトにå¿
    297 è¦ãªãƒ¡ãƒ¢ãƒªé ˜åŸŸã®å®šç¾©
    298 
    299 ã‚ªãƒ–ジェクトによっては,オブジェクトにå¿
    300 è¦ãªãƒ¡ãƒ¢ãƒªé ˜åŸŸã®å®šç¾©ã‚’生成する.
    301 å
    302 ·ä½“的には,オブジェクト毎のé 
    303 ã§èª¬æ˜Žã™ã‚‹ï¼Ž
    304 
    305 (c) オブジェクトの初期化ブロックの定義
    306 
    307 ã‚ªãƒ–ジェクトの初期化ブロックの定義を生成する.å
    308 ·ä½“的には,オブジェクト
    309 ã®çœç•¥è¨˜å·ã‚’「XXX/xxx」とすると,次のような行を生成する.
     268(b) オブジェクトに必要なメモリ領域の定義
     269
     270オブジェクトによっては,オブジェクトに必要なメモリ領域の定義を生成する.
     271具体的には,オブジェクト毎の項で説明する.
     272
     273(c) オブジェクトの初期化ブロックの定義
     274
     275オブジェクトの初期化ブロックの定義を生成する.具体的には,オブジェクト
     276の省略記号を「XXX/xxx」とすると,次のような行を生成する.
    310277
    311278const XXXINIB _kernel_xxxinib_table[TNUM_XXXID] = {
    312         <オブジェクトIDが1のオブジェクトの初期化æƒ
    313 å ±>,
    314         <オブジェクトIDが2のオブジェクトの初期化æƒ
    315 å ±>,
    316                                 ……
    317         <オブジェクトIDがTNUM_XXXIDのオブジェクトの初期化æƒ
    318 å ±>
     279        <オブジェクトIDが1のオブジェクトの初期化情報>,
     280        <オブジェクトIDが2のオブジェクトの初期化情報>,
     281                                ……
     282        <オブジェクトIDがTNUM_XXXIDのオブジェクトの初期化情報>
    319283};
    320284
    321 ã‚ªãƒ–ジェクトの初期化æƒ
    322 å ±ã®å½¢å¼ã¯ï¼Œã‚ªãƒ–ジェクト毎に異なる.å
    323 ·ä½“的には,
    324 ã‚ªãƒ–ジェクト毎のé 
    325 ã§èª¬æ˜Žã™ã‚‹ï¼Ž
    326 
    327 (d) オブジェクトのコントロールブロックの定義
    328 
    329 ã‚ªãƒ–ジェクトのコントロールブロックの定義を生成する.å
    330 ·ä½“的には,オブジェ
    331 ã‚¯ãƒˆã®çœç•¥è¨˜å·ã‚’「XXX/xxx」とすると,次のような行を生成する.
     285オブジェクトの初期化情報の形式は,オブジェクト毎に異なる.具体的には,
     286オブジェクト毎の項で説明する.
     287
     288(d) オブジェクトのコントロールブロックの定義
     289
     290オブジェクトのコントロールブロックの定義を生成する.具体的には,オブジェ
     291クトの省略記号を「XXX/xxx」とすると,次のような行を生成する.
    332292
    333293XXXCB _kernel_xxxcb_table[TNUM_XXXID];
    334294
    335 (6-1) タスクに関する定義
    336 
    337 ASPカーネルは,タスクが一つもないケースに対応していないため,タスクに関
    338 ã™ã‚‹å®šç¾©ã¯å¿
    339 ãšç”Ÿæˆã—なければならない.
    340 
    341 ã‚¿ã‚¹ã‚¯ã®çœç•¥è¨˜å·ã¯ã€ŒTSK」「tsk」である.ただし,タスク初期化ブロックの
    342 ãƒ‡ãƒ¼ã‚¿åž‹ã¯TINIB,その変数名は_kernel_tinib_table,タスクコントロールブ
    343 ãƒ­ãƒƒã‚¯ã®ãƒ‡ãƒ¼ã‚¿åž‹ã¯TCB,その変数名は_kernel_tcb_table である(いずれも
    344 ã€ŒTSK/tsk」に代えて「T/t」を用いている).
    345 
    346 ã‚¿ã‚¹ã‚¯åˆæœŸåŒ–ブロックには,「CRE_TSK」静的APIで指定されるæƒ
    347 å ±ã«åŠ ãˆã¦ï¼Œ
    348 ã€ŒDEF_TEX」静的APIで指定されるæƒ
    349 å ±ã‚’含める.
    350 
    351 ä»¥ä¸‹ã§ã¯ï¼Œã‚·ã‚¹ãƒ†ãƒ ã‚³ãƒ³ãƒ•ã‚£ã‚®ãƒ¥ãƒ¬ãƒ¼ã‚·ãƒ§ãƒ³ãƒ•ã‚¡ã‚¤ãƒ«ã«æ¬¡ã®é™çš„APIが含まれ
    352 ã¦ã„る時に生成すべきæƒ
    353 å ±ã«ã¤ã„て述べる.
     295(6-1) タスクに関する定義
     296
     297ASPカーネルは,タスクが一つもないケースに対応していないため,タスクに関
     298する定義は必ず生成しなければならない.
     299
     300タスクの省略記号は「TSK」「tsk」である.ただし,タスク初期化ブロックの
     301データ型はTINIB,その変数名は_kernel_tinib_table,タスクコントロールブ
     302ロックのデータ型はTCB,その変数名は_kernel_tcb_table である(いずれも
     303「TSK/tsk」に代えて「T/t」を用いている).
     304
     305タスク初期化ブロックには,「CRE_TSK」静的APIで指定される情報に加えて,
     306「DEF_TEX」静的APIで指定される情報を含める.
     307
     308以下では,システムコンフィギュレーションファイルに次の静的APIが含まれ
     309ている時に生成すべき情報について述べる.
    354310
    355311CRE_TSK(tskid, { tskatr, exinf, task, itskpri, stksz, stk });
    356312DEF_TEX(tskid, { texatr, texrtn });
    357313
    358 (6-1-1) タスクにå¿
    359 è¦ãªãƒ¡ãƒ¢ãƒªé ˜åŸŸã®å®šç¾©
    360 
    361 ã‚¿ã‚¹ã‚¯ã«å¿
    362 è¦ãªãƒ¡ãƒ¢ãƒªé ˜åŸŸã¨ã—て,タスクのスタック領域がある.stkがNULLの
    363 å ´åˆã«ã¯ï¼Œç”Ÿæˆã™ã‚‹ã‚¿ã‚¹ã‚¯æ¯Žã«ï¼ŒæŒ‡å®šã•ã‚ŒãŸã‚µã‚¤ã‚ºã®ã‚¹ã‚¿ãƒƒã‚¯é ˜åŸŸã‚’確保する.
    364 å
    365 ·ä½“的には,上記の静的APIに対して,次の定義を生成する.
    366 
    367 ï¼ŠstkがNULLの場合のみ生成
    368 static STK_T _kernel_stack_<タスク名>[COUNT_STK_T(stksz)];
    369 
    370 (6-1-2) タスクの初期化æƒ
    371 å ±
    372 
    373 ã‚¿ã‚¹ã‚¯åˆæœŸåŒ–ブロック中に生成するタスクの初期化æƒ
    374 å ±ã¯ï¼Œæ¬¡ã®å½¢å¼ã¨ã™ã‚‹ï¼Ž
     314(6-1-1) タスクに必要なメモリ領域の定義
     315
     316タスクに必要なメモリ領域として,タスクのスタック領域がある.stkがNULLの
     317場合には,生成するタスク毎に,指定されたサイズのスタック領域を確保する.
     318具体的には,上記の静的APIに対して,次の定義を生成する.
     319
     320*stkがNULLの場合のみ生成
     321static STK_T _kernel_stack_<タスク名>[COUNT_STK_T(stksz)];
     322
     323(6-1-2) タスクの初期化情報
     324
     325タスク初期化ブロック中に生成するタスクの初期化情報は,次の形式とする.
    375326
    376327        { (tskatr), (intptr_t)(exinf), (task), INT_PRIORITY(itskpri),
    377328                                                                (stksz), (stk), (texatr), (texrtn) }
    378329
    379 ã“こで,stkがNULLの場合には,(stksz)に代えてROUND_STK_T(stksz)を,
    380 (stk)に代えて(_kernel_stack_<タスク名>)を生成する.CRE_TSKに対応する
    381 DEF_TEXがない場合には,texatrをTA_NULL,texrtnをNULLとする.
    382 
    383 (6-1-3) タスク生成順序テーブルの定義
    384 
    385 ã‚¿ã‚¹ã‚¯ã«å¯¾ã—ては,生成された順序(タスクを生成する静的APIが記述された
    386 é †åºï¼‰ã‚’テーブルに出力するå¿
    387 è¦ãŒã‚る.これは,タスクの生成された順序で,
    388 ã‚¿ã‚¹ã‚¯ã®åˆæœŸåŒ–(よりå
    389 ·ä½“的には,タスクの起動)を行うå¿
    390 è¦ãŒã‚るためであ
    391 ã‚‹ï¼Ž
    392 
    393 å
    394 ·ä½“的には,次のような行を生成する.
     330ここで,stkがNULLの場合には,(stksz)に代えてROUND_STK_T(stksz)を,
     331(stk)に代えて(_kernel_stack_<タスク名>)を生成する.CRE_TSKに対応する
     332DEF_TEXがない場合には,texatrをTA_NULL,texrtnをNULLとする.
     333
     334(6-1-3) タスク生成順序テーブルの定義
     335
     336タスクに対しては,生成された順序(タスクを生成する静的APIが記述された
     337順序)をテーブルに出力する必要がある.これは,タスクの生成された順序で,
     338タスクの初期化(より具体的には,タスクの起動)を行う必要があるためであ
     339る.
     340
     341具体的には,次のような行を生成する.
    395342
    396343const ID _kernel_torder_table[TNUM_TSKID] = {
    397         <最初に生成されたタスクのタスクID>,
    398         <2番目に生成されたタスクのタスクID>,
    399                                 ……
    400         <最後に生成されたタスクのタスクID>
     344        <最初に生成されたタスクのタスクID>,
     345        <2番目に生成されたタスクのタスクID>,
     346                                ……
     347        <最後に生成されたタスクのタスクID>
    401348};
    402349
    403 (6-1-4) エラー条件
    404 
    405 ã‚¿ã‚¹ã‚¯ã«é–¢ã™ã‚‹ã‚¨ãƒ©ãƒ¼æ¡ä»¶ã¯æ¬¡ã®é€šã‚Šã§ã‚る.
    406 
    407 ï¼Šã‚³ãƒ³ãƒ•ã‚£ã‚®ãƒ¥ãƒ¬ãƒ¼ã‚¿æœ¬ä½“が検出するもの
    408 ãƒ»åŒã˜tskidに対するCRE_TSKが複数ある場合(E_OBJ)
    409 ãƒ»DEF_TEXに対応するCRE_TSKがない場合(E_NOEXS)
    410 ãƒ»åŒã˜tskidに対するDEF_TEXが複数ある場合(E_OBJ)
    411 
    412 ï¼Šãƒ‘ス2で検出するもの
    413 ãƒ»tskatrが([TA_ACT])でない場合(E_RSATR)
    414         ※ ターゲット依存部でタスク属性を追加可(TARGET_TSKATR)
    415 ãƒ»(TMIN_TPRI <= itskpri && itskpri <= TMAX_TPRI)でない場合(E_PAR)
    416 ãƒ»stkszが0以下か,ターゲット定義の最小値(TARGET_MIN_STKSZ)よりも小さ
    417 ã€€ã„場合(E_PAR)
    418 ãƒ»stkszがスタック領域のサイズとして正しくない場合(E_PAR)
    419         - ターゲット依存の値(CHECK_STKSZ_ALIGN)の倍数でない場合
    420         ※ このエラーチェックは,stkがNULLでない場合にのみ行う
    421 ãƒ»texatrが(TA_NULL)でない場合(E_RSATR)
    422 
    423 ï¼Šãƒ‘ス3で検出するもの
    424 ãƒ»taskとtexrtnがプログラムの開始番地として正しくない場合(E_PAR)
    425         - ターゲット依存の値(CHECK_FUNC_ALIGN)の倍数でない場合
    426         - NULLの場合(ターゲット依存,CHECK_FUNC_NONNULL)
    427 ãƒ»stkがスタック領域のå
    428 ˆé ­ç•ªåœ°ã¨ã—て正しくない場合(E_PAR)
    429         - ターゲット依存の値(CHECK_STACK_ALIGN)の倍数でない場合
    430         - NULLの場合(ターゲット依存,CHECK_STACK_NONNULL)
    431 
    432 (6-2) セマフォに関する定義
    433 
    434 ã‚»ãƒžãƒ•ã‚©ã®çœç•¥è¨˜å·ã¯ã€ŒSEM/sem」である.以下では,システムコンフィギュレー
    435 ã‚·ãƒ§ãƒ³ãƒ•ã‚¡ã‚¤ãƒ«ã«æ¬¡ã®é™çš„APIが含まれている時に生成すべきæƒ
    436 å ±ã«ã¤ã„て述べ
    437 ã‚‹ï¼ŽãªãŠï¼Œã‚»ãƒžãƒ•ã‚©ã«å¿
    438 è¦ãªãƒ¡ãƒ¢ãƒªé ˜åŸŸã¯ãªã„.
     350(6-1-4) エラー条件
     351
     352タスクに関するエラー条件は次の通りである.
     353
     354*コンフィギュレータ本体が検出するもの
     355・同じtskidに対するCRE_TSKが複数ある場合(E_OBJ)
     356・DEF_TEXに対応するCRE_TSKがない場合(E_NOEXS)
     357・同じtskidに対するDEF_TEXが複数ある場合(E_OBJ)
     358
     359*パス2で検出するもの
     360・tskatrが([TA_ACT])でない場合(E_RSATR)
     361        ※ ターゲット依存部でタスク属性を追加可(TARGET_TSKATR)
     362・(TMIN_TPRI <= itskpri && itskpri <= TMAX_TPRI)でない場合(E_PAR)
     363・stkszが0以下か,ターゲット定義の最小値(TARGET_MIN_STKSZ)よりも小さ
     364 い場合(E_PAR)
     365・stkszがスタック領域のサイズとして正しくない場合(E_PAR)
     366        - ターゲット依存の値(CHECK_STKSZ_ALIGN)の倍数でない場合
     367        ※ このエラーチェックは,stkがNULLでない場合にのみ行う
     368・texatrが(TA_NULL)でない場合(E_RSATR)
     369
     370*パス3で検出するもの
     371・taskとtexrtnがプログラムの開始番地として正しくない場合(E_PAR)
     372        - ターゲット依存の値(CHECK_FUNC_ALIGN)の倍数でない場合
     373        - NULLの場合(ターゲット依存,CHECK_FUNC_NONNULL)
     374・stkがスタック領域の先頭番地として正しくない場合(E_PAR)
     375        - ターゲット依存の値(CHECK_STACK_ALIGN)の倍数でない場合
     376        - NULLの場合(ターゲット依存,CHECK_STACK_NONNULL)
     377
     378(6-2) セマフォに関する定義
     379
     380セマフォの省略記号は「SEM/sem」である.以下では,システムコンフィギュレー
     381ションファイルに次の静的APIが含まれている時に生成すべき情報について述べ
     382る.なお,セマフォに必要なメモリ領域はない.
    439383
    440384CRE_SEM(semid, { sematr, isemcnt, maxsem });
    441385
    442 (6-2-1) セマフォの初期化æƒ
    443 å ±
    444 
    445 ã‚»ãƒžãƒ•ã‚©åˆæœŸåŒ–ブロック中に生成するセマフォの初期化æƒ
    446 å ±ã¯ï¼Œæ¬¡ã®å½¢å¼ã¨ã™
    447 ã‚‹ï¼Ž
     386(6-2-1) セマフォの初期化情報
     387
     388セマフォ初期化ブロック中に生成するセマフォの初期化情報は,次の形式とす
     389る.
    448390
    449391        { (sematr), (isemcnt), (maxsem) }
    450392
    451 (6-2-2) エラー条件
    452 
    453 ã‚»ãƒžãƒ•ã‚©ã«é–¢ã™ã‚‹ã‚¨ãƒ©ãƒ¼æ¡ä»¶ã¯æ¬¡ã®é€šã‚Šã§ã‚る.
    454 
    455 ï¼Šã‚³ãƒ³ãƒ•ã‚£ã‚®ãƒ¥ãƒ¬ãƒ¼ã‚¿æœ¬ä½“が検出するもの
    456 ãƒ»åŒã˜semidに対するCRE_SEMが複数ある場合(E_OBJ)
    457 
    458 ï¼Šãƒ‘ス2で検出するもの
    459 ãƒ»sematrが([TA_TPRI])でない場合(E_RSATR)
    460 ãƒ»(0 <= isemcnt && isemcnt <= maxsem)でない場合(E_PAR)
    461 ãƒ»(1 <= maxsem && maxsem <= TMAX_MAXSEM)でない場合(E_PAR)
    462 
    463 (6-3) イベントフラグに関する定義
    464 
    465 ã‚¤ãƒ™ãƒ³ãƒˆãƒ•ãƒ©ã‚°ã®çœç•¥è¨˜å·ã¯ã€ŒFLG/flg」である.以下では,システムコンフィ
    466 ã‚®ãƒ¥ãƒ¬ãƒ¼ã‚·ãƒ§ãƒ³ãƒ•ã‚¡ã‚¤ãƒ«ã«æ¬¡ã®é™çš„APIが含まれている時に生成すべきæƒ
    467 å ±ã«ã¤
    468 ã„て述べる.なお,イベントフラグにå¿
    469 è¦ãªãƒ¡ãƒ¢ãƒªé ˜åŸŸã¯ãªã„.
     393(6-2-2) エラー条件
     394
     395セマフォに関するエラー条件は次の通りである.
     396
     397*コンフィギュレータ本体が検出するもの
     398・同じsemidに対するCRE_SEMが複数ある場合(E_OBJ)
     399
     400*パス2で検出するもの
     401・sematrが([TA_TPRI])でない場合(E_RSATR)
     402・(0 <= isemcnt && isemcnt <= maxsem)でない場合(E_PAR)
     403・(1 <= maxsem && maxsem <= TMAX_MAXSEM)でない場合(E_PAR)
     404
     405(6-3) イベントフラグに関する定義
     406
     407イベントフラグの省略記号は「FLG/flg」である.以下では,システムコンフィ
     408ギュレーションファイルに次の静的APIが含まれている時に生成すべき情報につ
     409いて述べる.なお,イベントフラグに必要なメモリ領域はない.
    470410
    471411CRE_FLG(flgid, { flgatr, iflgptn });
    472412
    473 (6-3-1) イベントフラグの初期化æƒ
    474 å ±
    475 
    476 ã‚¤ãƒ™ãƒ³ãƒˆãƒ•ãƒ©ã‚°åˆæœŸåŒ–ブロック中に生成するイベントフラグの初期化æƒ
    477 å ±ã¯ï¼Œ
    478 æ¬¡ã®å½¢å¼ã¨ã™ã‚‹ï¼Ž
     413(6-3-1) イベントフラグの初期化情報
     414
     415イベントフラグ初期化ブロック中に生成するイベントフラグの初期化情報は,
     416次の形式とする.
    479417
    480418        { (flgatr), (iflgptn) }
    481419
    482 (6-3-2) エラー条件
    483 
    484 ã‚¤ãƒ™ãƒ³ãƒˆãƒ•ãƒ©ã‚°ã«é–¢ã™ã‚‹ã‚¨ãƒ©ãƒ¼æ¡ä»¶ã¯æ¬¡ã®é€šã‚Šã§ã‚る.
    485 
    486 ï¼Šã‚³ãƒ³ãƒ•ã‚£ã‚®ãƒ¥ãƒ¬ãƒ¼ã‚¿æœ¬ä½“が検出するもの
    487 ãƒ»åŒã˜flgidに対するCRE_FLGが複数ある場合(E_OBJ)
    488 
    489 ï¼Šãƒ‘ス1で検出するもの
    490 ãƒ»iflgptnがFLGPTNに格納できない場合(E_PAR)
    491         → iflgptnがuint32_tに格納できない場合は,cfg1_out.cのコンパイル時
    492            ã«ã‚¨ãƒ©ãƒ¼ã¨ãªã‚‹ï¼Ž
    493 
    494 ï¼Šãƒ‘ス2で検出するもの
    495 ãƒ»flgatrが([TA_TPRI]|[TA_WMUL]|[TA_CLR])でない場合(E_RSATR)
    496 ãƒ»iflgptnがFLGPTNに格納できない場合(E_PAR)
    497         → iflgptnがuint32_tには格納できるが,FLGPTNに格納できない場合は,
    498            ãƒ‘ス2でエラーを検出する.
    499 
    500 (6-4) データキューに関する定義
    501 
    502 ãƒ‡ãƒ¼ã‚¿ã‚­ãƒ¥ãƒ¼ã®çœç•¥è¨˜å·ã¯ã€ŒDTQ/dtq」である.以下では,システムコンフィギュ
    503 ãƒ¬ãƒ¼ã‚·ãƒ§ãƒ³ãƒ•ã‚¡ã‚¤ãƒ«ã«æ¬¡ã®é™çš„APIが含まれている時に生成すべきæƒ
    504 å ±ã«ã¤ã„て
    505 è¿°ã¹ã‚‹ï¼Ž
     420(6-3-2) エラー条件
     421
     422イベントフラグに関するエラー条件は次の通りである.
     423
     424*コンフィギュレータ本体が検出するもの
     425・同じflgidに対するCRE_FLGが複数ある場合(E_OBJ)
     426
     427*パス1で検出するもの
     428・iflgptnがFLGPTNに格納できない場合(E_PAR)
     429        → iflgptnがuint32_tに格納できない場合は,cfg1_out.cのコンパイル時
     430           にエラーとなる.
     431
     432*パス2で検出するもの
     433・flgatrが([TA_TPRI]|[TA_WMUL]|[TA_CLR])でない場合(E_RSATR)
     434・iflgptnがFLGPTNに格納できない場合(E_PAR)
     435        → iflgptnがuint32_tには格納できるが,FLGPTNに格納できない場合は,
     436           パス2でエラーを検出する.
     437
     438(6-4) データキューに関する定義
     439
     440データキューの省略記号は「DTQ/dtq」である.以下では,システムコンフィギュ
     441レーションファイルに次の静的APIが含まれている時に生成すべき情報について
     442述べる.
    506443
    507444CRE_DTQ(dtqid, { dtqatr, dtqcnt, dtqmb });
    508445
    509 (6-4-1) データキューにå¿
    510 è¦ãªãƒ¡ãƒ¢ãƒªé ˜åŸŸã®å®šç¾©
    511 
    512 ãƒ‡ãƒ¼ã‚¿ã‚­ãƒ¥ãƒ¼ã«å¿
    513 è¦ãªãƒ¡ãƒ¢ãƒªé ˜åŸŸã¨ã—て,データキュー管理領域がある.生成
    514 ã™ã‚‹ãƒ‡ãƒ¼ã‚¿ã‚­ãƒ¥ãƒ¼æ¯Žã«ï¼Œå¿
    515 è¦ãªã‚µã‚¤ã‚ºã®ãƒ‡ãƒ¼ã‚¿ã‚­ãƒ¥ãƒ¼ç®¡ç†é ˜åŸŸã‚’定義する.å
    516 ·
    517 ä½“的には,上記の静的APIに対して,次の定義を生成する.
    518 
    519 ï¼Šdtqcntが0でない場合のみ生成
    520 static DTQMB _kernel_dtqmb_<データキュー名>[dtqcnt];
    521 
    522 (6-4-2) データキューの初期化æƒ
    523 å ±
    524 
    525 ãƒ‡ãƒ¼ã‚¿ã‚­ãƒ¥ãƒ¼åˆæœŸåŒ–ブロック中に生成するデータキューの初期化æƒ
    526 å ±ã¯ï¼Œæ¬¡ã®
    527 å½¢å¼ã¨ã™ã‚‹ï¼Ž
    528 
    529         { (dtqatr), (dtqcnt), (_kernel_dtqmb_<データキュー名>) }
    530 
    531 ã“こで,dtqcntが0の場合には,_kernel_dtqmb_<データキュー名>に代えて,
    532 NULLを用いる.
    533 
    534 (6-4-3) エラー条件
    535 
    536 ãƒ‡ãƒ¼ã‚¿ã‚­ãƒ¥ãƒ¼ã«é–¢ã™ã‚‹ã‚¨ãƒ©ãƒ¼æ¡ä»¶ã¯æ¬¡ã®é€šã‚Šã§ã‚る.
    537 
    538 ï¼Šã‚³ãƒ³ãƒ•ã‚£ã‚®ãƒ¥ãƒ¬ãƒ¼ã‚¿æœ¬ä½“が検出するもの
    539 ãƒ»åŒã˜dtqidに対するCRE_DTQが複数ある場合(E_OBJ)
    540 
    541 ï¼Šãƒ‘ス2で検出するもの
    542 ãƒ»dtqatrが([TA_TPRI])でない場合(E_RSATR)
    543 ãƒ»dtqcntが負の値の場合(E_PAR)
    544 ãƒ»dtqmbがNULLでない場合(E_NOSPT)
    545 
    546 (6-5) 優å
    547 ˆåº¦ãƒ‡ãƒ¼ã‚¿ã‚­ãƒ¥ãƒ¼ã«é–¢ã™ã‚‹å®šç¾©
    548 
    549ʌ㻌
    550 ˆåº¦ãƒ‡ãƒ¼ã‚¿ã‚­ãƒ¥ãƒ¼ã®çœç•¥è¨˜å·ã¯ã€ŒPDQ/pdq」である.以下では,システムコ
    551 ãƒ³ãƒ•ã‚£ã‚®ãƒ¥ãƒ¬ãƒ¼ã‚·ãƒ§ãƒ³ãƒ•ã‚¡ã‚¤ãƒ«ã«æ¬¡ã®é™çš„APIが含まれている時に生成すべきæƒ
    552 
    553 å ±ã«ã¤ã„て述べる.
     446(6-4-1) データキューに必要なメモリ領域の定義
     447
     448データキューに必要なメモリ領域として,データキュー管理領域がある.生成
     449するデータキュー毎に,必要なサイズのデータキュー管理領域を定義する.具
     450体的には,上記の静的APIに対して,次の定義を生成する.
     451
     452*dtqcntが0でない場合のみ生成
     453static DTQMB _kernel_dtqmb_<データキュー名>[dtqcnt];
     454
     455(6-4-2) データキューの初期化情報
     456
     457データキュー初期化ブロック中に生成するデータキューの初期化情報は,次の
     458形式とする.
     459
     460        { (dtqatr), (dtqcnt), (_kernel_dtqmb_<データキュー名>) }
     461
     462ここで,dtqcntが0の場合には,_kernel_dtqmb_<データキュー名>に代えて,
     463NULLを用いる.
     464
     465(6-4-3) エラー条件
     466
     467データキューに関するエラー条件は次の通りである.
     468
     469*コンフィギュレータ本体が検出するもの
     470・同じdtqidに対するCRE_DTQが複数ある場合(E_OBJ)
     471
     472*パス2で検出するもの
     473・dtqatrが([TA_TPRI])でない場合(E_RSATR)
     474・dtqcntが負の値の場合(E_PAR)
     475・dtqmbがNULLでない場合(E_NOSPT)
     476
     477(6-5) 優先度データキューに関する定義
     478
     479優先度データキューの省略記号は「PDQ/pdq」である.以下では,システムコ
     480ンフィギュレーションファイルに次の静的APIが含まれている時に生成すべき情
     481報について述べる.
    554482
    555483CRE_PDQ(ID pdqid, { pdqatr, pdqcnt, maxdpri, pdqmb });
    556484
    557 (6-5-1) 優å
    558 ˆåº¦ãƒ‡ãƒ¼ã‚¿ã‚­ãƒ¥ãƒ¼ã«å¿
    559 è¦ãªãƒ¡ãƒ¢ãƒªé ˜åŸŸã®å®šç¾©
    560 
    561ʌ㻌
    562 ˆåº¦ãƒ‡ãƒ¼ã‚¿ã‚­ãƒ¥ãƒ¼ã«å¿
    563 è¦ãªãƒ¡ãƒ¢ãƒªé ˜åŸŸã¨ã—て,優å
    564 ˆåº¦ãƒ‡ãƒ¼ã‚¿ã‚­ãƒ¥ãƒ¼ç®¡ç†é ˜åŸŸ
    565 ãŒã‚る.生成する優å
    566 ˆåº¦ãƒ‡ãƒ¼ã‚¿ã‚­ãƒ¥ãƒ¼æ¯Žã«ï¼Œå¿
    567 è¦ãªã‚µã‚¤ã‚ºã®å„ªå
    568 ˆåº¦ãƒ‡ãƒ¼ã‚¿ã‚­ãƒ¥ãƒ¼
    569 ç®¡ç†é ˜åŸŸã‚’定義する.å
    570 ·ä½“的には,上記の静的APIに対して,次の定義を生成す
    571 ã‚‹ï¼Ž
    572 
    573 ï¼Špdqcntが0でない場合のみ生成
    574 static PDQMB _kernel_pdqmb_<優å
    575 ˆåº¦ãƒ‡ãƒ¼ã‚¿ã‚­ãƒ¥ãƒ¼å>[pdqcnt];
    576 
    577 (6-5-2) 優å
    578 ˆåº¦ãƒ‡ãƒ¼ã‚¿ã‚­ãƒ¥ãƒ¼ã®åˆæœŸåŒ–æƒ
    579 å ±
    580 
    581ʌ㻌
    582 ˆåº¦ãƒ‡ãƒ¼ã‚¿ã‚­ãƒ¥ãƒ¼åˆæœŸåŒ–ブロック中に生成する優å
    583 ˆåº¦ãƒ‡ãƒ¼ã‚¿ã‚­ãƒ¥ãƒ¼ã®åˆæœŸåŒ–
    584 æƒ
    585 å ±ã¯ï¼Œæ¬¡ã®å½¢å¼ã¨ã™ã‚‹ï¼Ž
    586 
    587         { (pdqatr), (pdqcnt), (maxdpri), (_kernel_pdqmb_<優å
    588 ˆåº¦ãƒ‡ãƒ¼ã‚¿ã‚­ãƒ¥ãƒ¼å>) }
    589 
    590 ã“こで,pdqcntが0の場合には,_kernel_pdqmb_<優å
    591 ˆåº¦ãƒ‡ãƒ¼ã‚¿ã‚­ãƒ¥ãƒ¼å>に代え
    592 ã¦ï¼ŒNULLを用いる.
    593 
    594 (6-5-3) エラー条件
    595 
    596ʌ㻌
    597 ˆåº¦ãƒ‡ãƒ¼ã‚¿ã‚­ãƒ¥ãƒ¼ã«é–¢ã™ã‚‹ã‚¨ãƒ©ãƒ¼æ¡ä»¶ã¯æ¬¡ã®é€šã‚Šã§ã‚る.
    598 
    599 ï¼Šã‚³ãƒ³ãƒ•ã‚£ã‚®ãƒ¥ãƒ¬ãƒ¼ã‚¿æœ¬ä½“が検出するもの
    600 ãƒ»åŒã˜pdqidに対するCRE_PDQが複数ある場合(E_OBJ)
    601 
    602 ï¼Šãƒ‘ス2で検出するもの
    603 ãƒ»pdqatrが([TA_TPRI])でない場合(E_RSATR)
    604 ãƒ»pdqcntが負の値の場合(E_PAR)
    605 ãƒ»(TMIN_DPRI <= maxdpri && maxdpri <= TMAX_DPRI)でない場合(E_PAR)
    606 ãƒ»pdqmbがNULLでない場合(E_NOSPT)
    607 
    608 (6-6) メールボックスに関する定義
    609 
    610 ãƒ¡ãƒ¼ãƒ«ãƒœãƒƒã‚¯ã‚¹ã®çœç•¥è¨˜å·ã¯ã€ŒMBX/mbx」である.以下では,システムコンフィ
    611 ã‚®ãƒ¥ãƒ¬ãƒ¼ã‚·ãƒ§ãƒ³ãƒ•ã‚¡ã‚¤ãƒ«ã«æ¬¡ã®é™çš„APIが含まれている時に生成すべきæƒ
    612 å ±ã«ã¤
    613 ã„て述べる.なお,メールボックスにå¿
    614 è¦ãªãƒ¡ãƒ¢ãƒªé ˜åŸŸã¯ãªã„.
     485(6-5-1) 優先度データキューに必要なメモリ領域の定義
     486
     487優先度データキューに必要なメモリ領域として,優先度データキュー管理領域
     488がある.生成する優先度データキュー毎に,必要なサイズの優先度データキュー
     489管理領域を定義する.具体的には,上記の静的APIに対して,次の定義を生成す
     490る.
     491
     492*pdqcntが0でない場合のみ生成
     493static PDQMB _kernel_pdqmb_<優先度データキュー名>[pdqcnt];
     494
     495(6-5-2) 優先度データキューの初期化情報
     496
     497優先度データキュー初期化ブロック中に生成する優先度データキューの初期化
     498情報は,次の形式とする.
     499
     500        { (pdqatr), (pdqcnt), (maxdpri), (_kernel_pdqmb_<優先度データキュー名>) }
     501
     502ここで,pdqcntが0の場合には,_kernel_pdqmb_<優先度データキュー名>に代え
     503て,NULLを用いる.
     504
     505(6-5-3) エラー条件
     506
     507優先度データキューに関するエラー条件は次の通りである.
     508
     509*コンフィギュレータ本体が検出するもの
     510・同じpdqidに対するCRE_PDQが複数ある場合(E_OBJ)
     511
     512*パス2で検出するもの
     513・pdqatrが([TA_TPRI])でない場合(E_RSATR)
     514・pdqcntが負の値の場合(E_PAR)
     515・(TMIN_DPRI <= maxdpri && maxdpri <= TMAX_DPRI)でない場合(E_PAR)
     516・pdqmbがNULLでない場合(E_NOSPT)
     517
     518(6-6) メールボックスに関する定義
     519
     520メールボックスの省略記号は「MBX/mbx」である.以下では,システムコンフィ
     521ギュレーションファイルに次の静的APIが含まれている時に生成すべき情報につ
     522いて述べる.なお,メールボックスに必要なメモリ領域はない.
    615523
    616524CRE_MBX(mbxid, { mbxatr, maxmpri, mprihd });
    617525
    618 (6-6-1) メールボックスの初期化æƒ
    619 å ±
    620 
    621 ãƒ¡ãƒ¼ãƒ«ãƒœãƒƒã‚¯ã‚¹åˆæœŸåŒ–ブロック中に生成するメールボックスの初期化æƒ
    622 å ±ã¯ï¼Œ
    623 æ¬¡ã®å½¢å¼ã¨ã™ã‚‹ï¼Ž
     526(6-6-1) メールボックスの初期化情報
     527
     528メールボックス初期化ブロック中に生成するメールボックスの初期化情報は,
     529次の形式とする.
    624530
    625531        { (mbxatr), (maxmpri) }
    626532
    627 (6-6-2) エラー条件
    628 
    629 ãƒ¡ãƒ¼ãƒ«ãƒœãƒƒã‚¯ã‚¹ã«é–¢ã™ã‚‹ã‚¨ãƒ©ãƒ¼æ¡ä»¶ã¯æ¬¡ã®é€šã‚Šã§ã‚る.
    630 
    631 ï¼Šã‚³ãƒ³ãƒ•ã‚£ã‚®ãƒ¥ãƒ¬ãƒ¼ã‚¿æœ¬ä½“が検出するもの
    632 ãƒ»åŒã˜mbxidに対するCRE_MBXが複数ある場合(E_OBJ)
    633 
    634 ï¼Šãƒ‘ス2で検出するもの
    635 ãƒ»mbxatrが([TA_TPRI]|[TA_MPRI])でない場合(E_RSATR)
    636 ãƒ»(TMIN_MPRI <= maxmpri && maxmpri <= TMAX_MPRI)でない場合(E_PAR)
    637 ãƒ»mprihdがNULLでない場合(E_NOSPT)
    638 
    639 (6-7) 固定長メモリプールに関する定義
    640 
    641 å›ºå®šé•·ãƒ¡ãƒ¢ãƒªãƒ—ールの省略記号は「MPF/mpf」である.以下では,システムコ
    642 ãƒ³ãƒ•ã‚£ã‚®ãƒ¥ãƒ¬ãƒ¼ã‚·ãƒ§ãƒ³ãƒ•ã‚¡ã‚¤ãƒ«ã«æ¬¡ã®é™çš„APIが含まれている時に生成すべきæƒ
    643 
    644 å ±ã«ã¤ã„て述べる.
     533(6-6-2) エラー条件
     534
     535メールボックスに関するエラー条件は次の通りである.
     536
     537*コンフィギュレータ本体が検出するもの
     538・同じmbxidに対するCRE_MBXが複数ある場合(E_OBJ)
     539
     540*パス2で検出するもの
     541・mbxatrが([TA_TPRI]|[TA_MPRI])でない場合(E_RSATR)
     542・(TMIN_MPRI <= maxmpri && maxmpri <= TMAX_MPRI)でない場合(E_PAR)
     543・mprihdがNULLでない場合(E_NOSPT)
     544
     545(6-7) 固定長メモリプールに関する定義
     546
     547固定長メモリプールの省略記号は「MPF/mpf」である.以下では,システムコ
     548ンフィギュレーションファイルに次の静的APIが含まれている時に生成すべき情
     549報について述べる.
    645550
    646551CRE_MPF(mpfid, { mpfatr, blkcnt, blksz, mpf, mpfmb });
    647552
    648 (6-7-1) 固定長メモリプールにå¿
    649 è¦ãªãƒ¡ãƒ¢ãƒªé ˜åŸŸã®å®šç¾©
    650 
    651 å›ºå®šé•·ãƒ¡ãƒ¢ãƒªãƒ—ールにå¿
    652 è¦ãªãƒ¡ãƒ¢ãƒªé ˜åŸŸã¨ã—て,固定長メモリプール領域と固
    653 å®šé•·ãƒ¡ãƒ¢ãƒªãƒ—ール管理領域がある.生成する固定長メモリプール毎に,å¿
    654 è¦ãª
    655 ã‚µã‚¤ã‚ºã®å›ºå®šé•·ãƒ¡ãƒ¢ãƒªãƒ—ール領域(mpfがNULLの場合のみ)と固定長メモリプー
    656 ãƒ«ç®¡ç†é ˜åŸŸã‚’確保する.å
    657 ·ä½“的には,上記の静的APIに対して,次の定義を生成
    658 ã™ã‚‹ï¼Ž
    659 
    660 ï¼ŠmpfがNULLの場合のみ生成
    661 static MPF_T _kernel_mpf_<固定長メモリプール名>[(blkcnt) * COUNT_MPF_T(blksz)];
     553(6-7-1) 固定長メモリプールに必要なメモリ領域の定義
     554
     555固定長メモリプールに必要なメモリ領域として,固定長メモリプール領域と固
     556定長メモリプール管理領域がある.生成する固定長メモリプール毎に,必要な
     557サイズの固定長メモリプール領域(mpfがNULLの場合のみ)と固定長メモリプー
     558ル管理領域を確保する.具体的には,上記の静的APIに対して,次の定義を生成
     559する.
     560
     561*mpfがNULLの場合のみ生成
     562static MPF_T _kernel_mpf_<固定長メモリプール名>[(blkcnt) * COUNT_MPF_T(blksz)];
    662563                                                               
    663 ï¼Šå¿
    664 ãšç”Ÿæˆ
    665 static MPFMB _kernel_mpfmb_<固定長メモリプール名>[blkcnt];
    666 
    667 (6-7-2) 固定長メモリプールの初期化æƒ
    668 å ±
    669 
    670 å›ºå®šé•·ãƒ¡ãƒ¢ãƒªãƒ—ール初期化ブロック中に生成する固定長メモリプールの初期化
    671 æƒ
    672 å ±ã¯ï¼Œæ¬¡ã®å½¢å¼ã¨ã™ã‚‹ï¼Ž
     564*必ず生成
     565static MPFMB _kernel_mpfmb_<固定長メモリプール名>[blkcnt];
     566
     567(6-7-2) 固定長メモリプールの初期化情報
     568
     569固定長メモリプール初期化ブロック中に生成する固定長メモリプールの初期化
     570情報は,次の形式とする.
    673571
    674572        { (mpfatr), (blkcnt), ROUND_MPF_T(blksz), mpf,
    675                                                 (_kernel_mpfmb_<固定長メモリプール名>) }
    676 
    677 ã“こで,mpfがNULLの場合には,mpfに代えて,_kernel_mpf_<固定長メモリプー
    678 ãƒ«å>を用いる.
    679 
    680 (6-7-3) エラー条件
    681 
    682 å›ºå®šé•·ãƒ¡ãƒ¢ãƒªãƒ—ールに関するエラー条件は次の通りである.
    683 
    684 ï¼Šã‚³ãƒ³ãƒ•ã‚£ã‚®ãƒ¥ãƒ¬ãƒ¼ã‚¿æœ¬ä½“が検出するもの
    685 ãƒ»åŒã˜mpfidに対するCRE_MPFが複数ある場合(E_OBJ)
    686 
    687 ï¼Šãƒ‘ス2で検出するもの
    688 ãƒ»mpfatrが([TA_TPRI])でない場合(E_RSATR)
    689 ãƒ»blkcntが0以下の場合(E_PAR)
    690 ãƒ»blkszが0以下の場合(E_PAR)
    691 ãƒ»mpfmbがNULLでない場合(E_NOSPT)
    692 
    693 ï¼Šãƒ‘ス3で検出するもの
    694 ãƒ»mpfが固定長メモリプール領域のå
    695 ˆé ­ç•ªåœ°ã¨ã—て正しくない場合(E_PAR)
    696         - ターゲット依存の値(CHECK_MPF_ALIGN)の倍数でない場合
    697         - NULLの場合(ターゲット依存,CHECK_MPF_NONNULL)
    698 
    699 (6-8) 周期ハンドラに関する定義
    700 
    701 å‘¨æœŸãƒãƒ³ãƒ‰ãƒ©ã®çœç•¥è¨˜å·ã¯ã€ŒCYC/cyc」である.以下では,システムコンフィ
    702 ã‚®ãƒ¥ãƒ¬ãƒ¼ã‚·ãƒ§ãƒ³ãƒ•ã‚¡ã‚¤ãƒ«ã«æ¬¡ã®é™çš„APIが含まれている時に生成すべきæƒ
    703 å ±ã«ã¤
    704 ã„て述べる.なお,周期ハンドラにå¿
    705 è¦ãªãƒ¡ãƒ¢ãƒªé ˜åŸŸã¯ãªã„.
     573                                                (_kernel_mpfmb_<固定長メモリプール名>) }
     574
     575ここで,mpfがNULLの場合には,mpfに代えて,_kernel_mpf_<固定長メモリプー
     576ル名>を用いる.
     577
     578(6-7-3) エラー条件
     579
     580固定長メモリプールに関するエラー条件は次の通りである.
     581
     582*コンフィギュレータ本体が検出するもの
     583・同じmpfidに対するCRE_MPFが複数ある場合(E_OBJ)
     584
     585*パス2で検出するもの
     586・mpfatrが([TA_TPRI])でない場合(E_RSATR)
     587・blkcntが0以下の場合(E_PAR)
     588・blkszが0以下の場合(E_PAR)
     589・mpfmbがNULLでない場合(E_NOSPT)
     590
     591*パス3で検出するもの
     592・mpfが固定長メモリプール領域の先頭番地として正しくない場合(E_PAR)
     593        - ターゲット依存の値(CHECK_MPF_ALIGN)の倍数でない場合
     594        - NULLの場合(ターゲット依存,CHECK_MPF_NONNULL)
     595
     596(6-8) 周期ハンドラに関する定義
     597
     598周期ハンドラの省略記号は「CYC/cyc」である.以下では,システムコンフィ
     599ギュレーションファイルに次の静的APIが含まれている時に生成すべき情報につ
     600いて述べる.なお,周期ハンドラに必要なメモリ領域はない.
    706601
    707602CRE_CYC(cycid, { cycatr, exinf, cychdr, cyctim, cycphs });
    708603
    709 (6-8-1) 周期ハンドラの初期化æƒ
    710 å ±
    711 
    712 å‘¨æœŸãƒãƒ³ãƒ‰ãƒ©åˆæœŸåŒ–ブロック中に生成する周期ハンドラの初期化æƒ
    713 å ±ã¯ï¼Œæ¬¡ã®
    714 å½¢å¼ã¨ã™ã‚‹ï¼Ž
     604(6-8-1) 周期ハンドラの初期化情報
     605
     606周期ハンドラ初期化ブロック中に生成する周期ハンドラの初期化情報は,次の
     607形式とする.
    715608
    716609        { (cycatr), (intptr_t)(exinf), (cychdr), (cyctim), (cycphs) }
    717610
    718 (6-8-2) エラー条件
    719 
    720 å‘¨æœŸãƒãƒ³ãƒ‰ãƒ©ã«é–¢ã™ã‚‹ã‚¨ãƒ©ãƒ¼æ¡ä»¶ã¯æ¬¡ã®é€šã‚Šã§ã‚る.
    721 
    722 ï¼Šã‚³ãƒ³ãƒ•ã‚£ã‚®ãƒ¥ãƒ¬ãƒ¼ã‚¿æœ¬ä½“が検出するもの
    723 ãƒ»åŒã˜cycidに対するCRE_CYCが複数ある場合(E_OBJ)
    724 
    725 ï¼Šãƒ‘ス2で検出するもの
    726 ãƒ»cycatrが([TA_STA])でない場合(E_RSATR)
    727 ãƒ»(0 < cyctim && cyctim <= TMAX_RELTIM)でない場合(E_PAR)
    728 ãƒ»(0 <= cycphs && cycphs <= TMAX_RELTIM)でない場合(E_PAR)
    729 ãƒ»è­¦å‘Šï¼šcycatrにTA_STAが設定されていて,(cycphs == 0)の場合
    730 
    731 ï¼Šãƒ‘ス3で検出するもの
    732 ãƒ»cychdrがプログラムの開始番地として正しくない場合(E_PAR)
    733         - ターゲット依存の値(CHECK_FUNC_ALIGN)の倍数でない場合
    734         - NULLの場合(ターゲット依存,CHECK_FUNC_NONNULL)
    735 
    736 (6-9) アラームハンドラに関する定義
    737 
    738 ã‚¢ãƒ©ãƒ¼ãƒ ãƒãƒ³ãƒ‰ãƒ©ã®çœç•¥è¨˜å·ã¯ã€ŒALM/alm」である.以下では,システムコン
    739 ãƒ•ã‚£ã‚®ãƒ¥ãƒ¬ãƒ¼ã‚·ãƒ§ãƒ³ãƒ•ã‚¡ã‚¤ãƒ«ã«æ¬¡ã®é™çš„APIが含まれている時に生成すべきæƒ
    740 å ±
    741 ã«ã¤ã„て述べる.なお,アラームハンドラにå¿
    742 è¦ãªãƒ¡ãƒ¢ãƒªé ˜åŸŸã¯ãªã„.
     611(6-8-2) エラー条件
     612
     613周期ハンドラに関するエラー条件は次の通りである.
     614
     615*コンフィギュレータ本体が検出するもの
     616・同じcycidに対するCRE_CYCが複数ある場合(E_OBJ)
     617
     618*パス2で検出するもの
     619・cycatrが([TA_STA])でない場合(E_RSATR)
     620・(0 < cyctim && cyctim <= TMAX_RELTIM)でない場合(E_PAR)
     621・(0 <= cycphs && cycphs <= TMAX_RELTIM)でない場合(E_PAR)
     622・警告:cycatrにTA_STAが設定されていて,(cycphs == 0)の場合
     623
     624*パス3で検出するもの
     625・cychdrがプログラムの開始番地として正しくない場合(E_PAR)
     626        - ターゲット依存の値(CHECK_FUNC_ALIGN)の倍数でない場合
     627        - NULLの場合(ターゲット依存,CHECK_FUNC_NONNULL)
     628
     629(6-9) アラームハンドラに関する定義
     630
     631アラームハンドラの省略記号は「ALM/alm」である.以下では,システムコン
     632フィギュレーションファイルに次の静的APIが含まれている時に生成すべき情報
     633について述べる.なお,アラームハンドラに必要なメモリ領域はない.
    743634
    744635CRE_ALM(ID almid, { almatr, (intptr_t)(exinf), almhdr });
    745636
    746 (6-9-1) アラームハンドラの初期化æƒ
    747 å ±
    748 
    749 ã‚¢ãƒ©ãƒ¼ãƒ ãƒãƒ³ãƒ‰ãƒ©åˆæœŸåŒ–ブロック中に生成するアラームハンドラの初期化æƒ
    750 å ±
    751 ã¯ï¼Œæ¬¡ã®å½¢å¼ã¨ã™ã‚‹ï¼Ž
     637(6-9-1) アラームハンドラの初期化情報
     638
     639アラームハンドラ初期化ブロック中に生成するアラームハンドラの初期化情報
     640は,次の形式とする.
    752641
    753642        { (almatr), (exinf), (almhdr) }
    754643
    755 (6-9-2) エラー条件
    756 
    757 ã‚¢ãƒ©ãƒ¼ãƒ ãƒãƒ³ãƒ‰ãƒ©ã«é–¢ã™ã‚‹ã‚¨ãƒ©ãƒ¼æ¡ä»¶ã¯æ¬¡ã®é€šã‚Šã§ã‚る.
    758 
    759 ï¼Šã‚³ãƒ³ãƒ•ã‚£ã‚®ãƒ¥ãƒ¬ãƒ¼ã‚¿æœ¬ä½“が検出するもの
    760 ãƒ»åŒã˜almidに対するCRE_ALMが複数ある場合(E_OBJ)
    761 
    762 ï¼Šãƒ‘ス2で検出するもの
    763 ãƒ»almatrが(TA_NULL)でない場合(E_RSATR)
    764 
    765 ï¼Šãƒ‘ス3で検出するもの
    766 ãƒ»almhdrがプログラムの開始番地として正しくない場合(E_PAR)
    767         - ターゲット依存の値(CHECK_FUNC_ALIGN)の倍数でない場合
    768         - NULLの場合(ターゲット依存,CHECK_FUNC_NONNULL)
    769 
    770 (7) 割込みに関する定義
    771 
    772 å‰²è¾¼ã¿ã«é–¢ã—て生成するæƒ
    773 å ±ã¯ï¼Œã‚¿ãƒ¼ã‚²ãƒƒãƒˆæ¯Žã«å®šã‚ã‚‹ã“とができる.ターゲッ
    774 ãƒˆæ¯Žã«å®šã‚ãªã„場合には,以下で述べるターゲットに依存しない標準的なæƒ
    775 å ±
    776 ã‚’生成する.ターゲット毎に定める場合には,(7-1)と(7-3)に述べるæƒ
    777 å ±ã¯ç”Ÿ
    778 æˆã—ない((7-2)に述べるæƒ
    779 å ±ã¯ç”Ÿæˆã™ã‚‹ï¼‰ï¼Ž
    780 
    781 (7-1) 割込み要求ラインに関する定義
    782 
    783 å‰²è¾¼ã¿è¦æ±‚ラインの属性を設定する静的API「CFG_INT」で設定した割込み要求
    784 ãƒ©ã‚¤ãƒ³ã«é–¢ã™ã‚‹å®šç¾©ã‚’生成する.å
    785 ·ä½“的には次の通り.
    786 
    787 ä»¥ä¸‹ã§ã¯ï¼Œã‚·ã‚¹ãƒ†ãƒ ã‚³ãƒ³ãƒ•ã‚£ã‚®ãƒ¥ãƒ¬ãƒ¼ã‚·ãƒ§ãƒ³ãƒ•ã‚¡ã‚¤ãƒ«ã«æ¬¡ã®é™çš„APIが含まれ
    788 ã¦ã„る時に生成すべきæƒ
    789 å ±ã«ã¤ã„て述べる.
     644(6-9-2) エラー条件
     645
     646アラームハンドラに関するエラー条件は次の通りである.
     647
     648*コンフィギュレータ本体が検出するもの
     649・同じalmidに対するCRE_ALMが複数ある場合(E_OBJ)
     650
     651*パス2で検出するもの
     652・almatrが(TA_NULL)でない場合(E_RSATR)
     653
     654*パス3で検出するもの
     655・almhdrがプログラムの開始番地として正しくない場合(E_PAR)
     656        - ターゲット依存の値(CHECK_FUNC_ALIGN)の倍数でない場合
     657        - NULLの場合(ターゲット依存,CHECK_FUNC_NONNULL)
     658
     659(7) 割込みに関する定義
     660
     661割込みに関して生成する情報は,ターゲット毎に定めることができる.ターゲッ
     662ト毎に定めない場合には,以下で述べるターゲットに依存しない標準的な情報
     663を生成する.ターゲット毎に定める場合には,(7-1)と(7-3)に述べる情報は生
     664成しない((7-2)に述べる情報は生成する).
     665
     666(7-1) 割込み要求ラインに関する定義
     667
     668割込み要求ラインの属性を設定する静的API「CFG_INT」で設定した割込み要求
     669ラインに関する定義を生成する.具体的には次の通り.
     670
     671以下では,システムコンフィギュレーションファイルに次の静的APIが含まれ
     672ている時に生成すべき情報について述べる.
    790673
    791674CFG_INT(INTNO intno, { intatr, intpri });
    792675
    793 (7-1-1) 設定する割込み要求ラインの数
    794 
    795 è¨­å®šã™ã‚‹å‰²è¾¼ã¿è¦æ±‚ラインの数をマクロ定義するプリプロセッサディレクティ
    796 ãƒ–(#define)を生成する.また,その値を持つ変数の定義を生成する.å
    797 ·ä½“çš„
    798 ã«ã¯ï¼Œæ¬¡ã®ã‚ˆã†ãªè¡Œã‚’生成する.
    799 
    800 #define TNUM_INTNO <設定する割込み要求ラインの数>
     676(7-1-1) 設定する割込み要求ラインの数
     677
     678設定する割込み要求ラインの数をマクロ定義するプリプロセッサディレクティ
     679ブ(#define)を生成する.また,その値を持つ変数の定義を生成する.具体的
     680には,次のような行を生成する.
     681
     682#define TNUM_INTNO <設定する割込み要求ラインの数>
    801683const uint_t    _kernel_tnum_intno = TNUM_INTNO;
    802684
    803 (7-1-2) 割込み要求ライン初期化ブロックの定義
    804 
    805 å‰²è¾¼ã¿è¦æ±‚ライン初期化ブロックを生成する.å
    806 ·ä½“的には,次のような行を生
    807 æˆã™ã‚‹ï¼Ž
     685(7-1-2) 割込み要求ライン初期化ブロックの定義
     686
     687割込み要求ライン初期化ブロックを生成する.具体的には,次のような行を生
     688成する.
    808689
    809690const INTINIB _kernel_intinib_table[TNUM_INTNO] = {
    810         <割込み要求ライン1の初期化æƒ
    811 å ±>,
    812         <割込み要求ライン2の初期化æƒ
    813 å ±>,
    814                                 ……
    815         <割込み要求ラインTNUM_INTNOの初期化æƒ
    816 å ±>
     691        <割込み要求ライン1の初期化情報>,
     692        <割込み要求ライン2の初期化情報>,
     693                                ……
     694        <割込み要求ラインTNUM_INTNOの初期化情報>
    817695};
    818696
    819 ã“の中の割込み要求ラインの初期化æƒ
    820 å ±ã¯ï¼Œæ¬¡ã®å½¢å¼ã¨ã™ã‚‹ï¼Ž
     697この中の割込み要求ラインの初期化情報は,次の形式とする.
    821698
    822699        { (intno), (intatr), (intpri) }
    823700
    824 (7-1-3) エラー条件
    825 
    826 å‰²è¾¼ã¿è¦æ±‚ラインに関するエラー条件は次の通りである.
    827 
    828 ï¼Šãƒ‘ス2で検出するもの
    829 ãƒ»intnoがCFG_INTに対する割込み番号として正しくない場合(E_PAR)
    830 ãƒ»intnoがCFG_INTによって設定済みの場合(E_OBJ)
    831 ãƒ»intatrが([TA_ENAINT]|[TA_EDGE])でない場合(E_RSATR)
    832         ※ ターゲット依存部で割込み属性を追加可(TARGET_INTATR)
    833 ãƒ»ã‚«ãƒ¼ãƒãƒ«ç®¡ç†ã«å›ºå®šã•ã‚Œã¦ã„ã‚‹intnoに対して,intpriにTMIN_INTPRIよりも
    834 ã€€å°ã•ã„値が指定された場合(E_OBJ)
    835 ãƒ»ã‚«ãƒ¼ãƒãƒ«ç®¡ç†å¤–に固定されているintnoに対して,intpriにTMIN_INTPRIより
    836 ã€€ã‚‚小さい値が指定されなかった場合(E_OBJ)
    837 ãƒ»intpriがCFG_INTに対する割込み優å
    838 ˆåº¦ã¨ã—て正しくない場合(E_PAR)
    839 
    840 ï¼Šå¿
    841 è¦ã«å¿œã˜ã¦ã‚¿ãƒ¼ã‚²ãƒƒãƒˆä¾å­˜éƒ¨ã§æ¤œå‡ºã™ã‚‹ã‚‚の
    842 ãƒ»intatrが割込み属性として設定できない値の場合(E_RSATR)
    843 ãƒ»intpriが割込み優å
    844 ˆåº¦ã¨ã—て設定できない値の場合(E_PAR)
    845 ãƒ»åŒä¸€ã®å‰²è¾¼ã¿å„ªå
    846 ˆåº¦ã—か設定できない割込み要求ラインに対して,異なる割
    847 ã€€è¾¼ã¿å„ªå
    848 ˆåº¦ã‚’設定した場合(E_PAR)
    849 
    850 (7-2) 割込みサービスルーチンに関する定義
    851 
    852 (7-2-1) 割込みハンドラの生成
    853 
    854 ã‚·ã‚¹ãƒ†ãƒ ã‚³ãƒ³ãƒ•ã‚£ã‚®ãƒ¥ãƒ¬ãƒ¼ã‚·ãƒ§ãƒ³ãƒ•ã‚¡ã‚¤ãƒ«ä¸­ã«å«ã¾ã‚Œã‚‹å‰²è¾¼ã¿ã‚µãƒ¼ãƒ“スルーチ
    855 ãƒ³ã‚’追加する静的API「ATT_ISR」に対して,同一の割込み番号に対して追加さ
    856 ã‚ŒãŸå‰²è¾¼ã¿ã‚µãƒ¼ãƒ“スルーチンを順に呼び出す関数を生成する.
    857 
    858 å
    859 ·ä½“的には,同一の割込み番号に対して割込みサービスルーチンを追加する
     701(7-1-3) エラー条件
     702
     703割込み要求ラインに関するエラー条件は次の通りである.
     704
     705*パス2で検出するもの
     706・intnoがCFG_INTに対する割込み番号として正しくない場合(E_PAR)
     707・intnoがCFG_INTによって設定済みの場合(E_OBJ)
     708・intatrが([TA_ENAINT]|[TA_EDGE])でない場合(E_RSATR)
     709        ※ ターゲット依存部で割込み属性を追加可(TARGET_INTATR)
     710・カーネル管理に固定されているintnoに対して,intpriにTMIN_INTPRIよりも
     711 小さい値が指定された場合(E_OBJ)
     712・カーネル管理外に固定されているintnoに対して,intpriにTMIN_INTPRIより
     713 も小さい値が指定されなかった場合(E_OBJ)
     714・intpriがCFG_INTに対する割込み優先度として正しくない場合(E_PAR)
     715
     716*必要に応じてターゲット依存部で検出するもの
     717・intatrが割込み属性として設定できない値の場合(E_RSATR)
     718・intpriが割込み優先度として設定できない値の場合(E_PAR)
     719・同一の割込み優先度しか設定できない割込み要求ラインに対して,異なる割
     720 込み優先度を設定した場合(E_PAR)
     721
     722(7-2) 割込みサービスルーチンに関する定義
     723
     724(7-2-1) 割込みハンドラの生成
     725
     726システムコンフィギュレーションファイル中に含まれる割込みサービスルーチ
     727ンを追加する静的API「ATT_ISR」に対して,同一の割込み番号に対して追加さ
     728れた割込みサービスルーチンを順に呼び出す関数を生成する.
     729
     730具体的には,同一の割込み番号に対して割込みサービスルーチンを追加する
    860731
    861732ATT_ISR({ isratr_1, exinf_1, intno, isr_1, isrpri_1 });
    862733ATT_ISR({ isratr_2, exinf_2, intno, isr_2, isrpri_2 });
    863         ……
     734        ……
    864735ATT_ISR({ isratr_n, exinf_n, intno, isr_n, isrpri_n });
    865736
    866 ã¨ã„う静的APIに対して,次のような関数を生成する.ここで,isrpri_1,
    867 isrpri_2,……,isrpri_nは,値の小さい順に並べ替えられているものとする.
    868 å€¤ãŒåŒã˜ã‚‚のの間では,システムコンフィギュレーションファイル中での静的
    869 APIの順序の通りに並んでいるものとする.
     737という静的APIに対して,次のような関数を生成する.ここで,isrpri_1,
     738isrpri_2,……,isrpri_nは,値の小さい順に並べ替えられているものとする.
     739値が同じものの間では,システムコンフィギュレーションファイル中での静的
     740APIの順序の通りに並んでいるものとする.
    870741
    871742static void
     
    877748        saved_ipm = i_get_ipm();
    878749
    879         LOG_ISR_ENTER(<intno>);         /* ISR1の呼出し */
     750        LOG_ISR_ENTER(<intno>);         /* ISR1の呼出し */
    880751        isr_1((intptr_t)(exinf_1));
    881752        LOG_ISR_LEAVE(intno);
    882753
    883         if (i_sense_lock()) {           /* ISRの呼出し前の状æ
    884 ‹ã«æˆ»ã™ */
     754        if (i_sense_lock()) {           /* ISRの呼出し前の状態に戻す */
    885755                i_unlock_cpu();
    886756        }
    887757        i_set_ipm(saved_ipm);
    888758
    889         LOG_ISR_ENTER(<intno>);         /* ISR2の呼出し */
     759        LOG_ISR_ENTER(<intno>);         /* ISR2の呼出し */
    890760        isr_2((intptr_t)(exinf_2));
    891761        LOG_ISR_LEAVE(intno);
    892762
    893         if (i_sense_lock()) {           /* ISRの呼出し前の状æ
    894 ‹ã«æˆ»ã™ */
     763        if (i_sense_lock()) {           /* ISRの呼出し前の状態に戻す */
    895764                i_unlock_cpu();
    896765        }
    897766        i_set_ipm(saved_ipm);
    898767
    899         ……
    900 
    901         LOG_ISR_ENTER(<intno>);         /* ISRnの呼出し */
     768        ……
     769
     770        LOG_ISR_ENTER(<intno>);         /* ISRnの呼出し */
    902771        isr_n((intptr_t)(exinf_n));
    903772        LOG_ISR_LEAVE(intno);
     
    906775}
    907776
    908 ã“こで,ISRnの呼出しの後に呼出し前の状æ
    909 ‹ã«æˆ»ã•ãªã„のは,割込みハンドラ
    910 ã‹ã‚‰ã®ãƒªã‚¿ãƒ¼ãƒ³ã«ã‚ˆã‚Šï¼Œã‚«ãƒ¼ãƒãƒ«ãŒå
    911 ƒã®çŠ¶æ
    912 ‹ã«æˆ»ã™ãŸã‚ã§ã‚る.
    913 
    914 åŒä¸€ã®å‰²è¾¼ã¿ç•ªå·ã«å¯¾ã—て追加された割込みサービスルーチンが1つのみの場合
    915 ã«ã¯ï¼Œæ¬¡ã®ã‚ˆã†ãªé–¢æ•°ã‚’生成する.
     777ここで,ISRnの呼出しの後に呼出し前の状態に戻さないのは,割込みハンドラ
     778からのリターンにより,カーネルが元の状態に戻すためである.
     779
     780同一の割込み番号に対して追加された割込みサービスルーチンが1つのみの場合
     781には,次のような関数を生成する.
    916782
    917783static void
     
    925791}
    926792
    927 ã€èª²é¡Œã€‘ここで,LOG_ISR_ENTER,LOG_ISR_LEAVEの引数をどうするかが課題と
    928 ã—て残っている.ATT_ISRで登録されたISRに対してはISR IDが付与されないた
    929 ã‚ï¼ŒIDでISRを区別することができない.やむなく割込み番号を渡しているが,
    930 æ‹¡å¼µæƒ
    931 å ±ï¼ˆexinf)も渡すべきかもしれない.
    932 
    933 (7-2-2) 割込みハンドラの定義に相当する処理
    934 
    935 ä¸Šã®ã‚ˆã†ã«å‰²è¾¼ã¿ãƒãƒ³ãƒ‰ãƒ©ã‚’生成した場合には,次に説明する割込みハンドラ
    936 ã«é–¢ã™ã‚‹å®šç¾©ã«ãŠã„て,システムコンフィギュレーションファイル中に次の静
    937 çš„APIが含まれているのと同様に処理する.
     793【課題】ここで,LOG_ISR_ENTER,LOG_ISR_LEAVEの引数をどうするかが課題と
     794して残っている.ATT_ISRで登録されたISRに対してはISR IDが付与されないた
     795め,IDでISRを区別することができない.やむなく割込み番号を渡しているが,
     796拡張情報(exinf)も渡すべきかもしれない.
     797
     798(7-2-2) 割込みハンドラの定義に相当する処理
     799
     800上のように割込みハンドラを生成した場合には,次に説明する割込みハンドラ
     801に関する定義において,システムコンフィギュレーションファイル中に次の静
     802的APIが含まれているのと同様に処理する.
    938803
    939804DEF_INH(inhno, { TA_NULL, _kernel_inthdr_<intno> });
    940805
    941 ã“こでinhnoは,intnoに対応する割込みハンドラ番号である.
    942 
    943 (7-2-3) エラー条件
    944 
    945 å‰²è¾¼ã¿ã‚µãƒ¼ãƒ“スルーチンに関するエラー条件は次の通りである.
    946 
    947 ï¼Šãƒ‘ス2で検出するもの
    948 ãƒ»isratrが(TA_NULL)でない場合(E_RSATR)
    949         ※ ターゲット依存部で割込みサービスルーチン属性を追加可(TARGET_ISRATR)
    950 ãƒ»intnoがATT_ISRに対する割込み番号として正しくない場合(E_PAR)
    951         ※ intnoに対応するinhnoがない場合を含む
    952 ãƒ»(TMIN_ISRPRI <= isrpri && isrpri <= TMAX_ISRPRI)でない場合(E_PAR)
    953 ãƒ»intnoに対応するinhnoに対してDEF_INHがある場合(E_OBJ)
    954 ãƒ»intnoに対するCFG_INTがない場合(E_OBJ)
    955 ãƒ»intnoに対してCFG_INTで設定された割込み優å
    956 ˆåº¦ãŒTMIN_INTPRIよりも小さい
    957 ã€€å ´åˆï¼ˆE_OBJ)
    958         ※ カーネル管理外のISRはサポートしないため
    959 
    960 ï¼Šå¯èƒ½ã§ã‚ればターゲット依存部で検出するもの
    961 ãƒ»isrがプログラムの開始番地として正しくない場合(E_PAR)
    962 
    963 (7-3) 割込みハンドラに関する定義
    964 
    965 å‰²è¾¼ã¿ãƒãƒ³ãƒ‰ãƒ©ã‚’定義する静的API「DEF_INH」で定義した割込みハンドラ(上
    966 è¿°ã®å‰²è¾¼ã¿ã‚µãƒ¼ãƒ“スルーチンの追加によりコンフィギュレータが生成した割込
    967 ã¿ãƒãƒ³ãƒ‰ãƒ©ã‚’含む)に関する定義を生成する.å
    968 ·ä½“的には次の通り.
    969 
    970 ä»¥ä¸‹ã§ã¯ï¼Œã‚·ã‚¹ãƒ†ãƒ ã‚³ãƒ³ãƒ•ã‚£ã‚®ãƒ¥ãƒ¬ãƒ¼ã‚·ãƒ§ãƒ³ãƒ•ã‚¡ã‚¤ãƒ«ã«æ¬¡ã®é™çš„APIが含まれ
    971 ã¦ã„る時に生成すべきæƒ
    972 å ±ã«ã¤ã„て述べる.
     806ここでinhnoは,intnoに対応する割込みハンドラ番号である.
     807
     808(7-2-3) エラー条件
     809
     810割込みサービスルーチンに関するエラー条件は次の通りである.
     811
     812*パス2で検出するもの
     813・isratrが(TA_NULL)でない場合(E_RSATR)
     814        ※ ターゲット依存部で割込みサービスルーチン属性を追加可(TARGET_ISRATR)
     815・intnoがATT_ISRに対する割込み番号として正しくない場合(E_PAR)
     816        ※ intnoに対応するinhnoがない場合を含む
     817・(TMIN_ISRPRI <= isrpri && isrpri <= TMAX_ISRPRI)でない場合(E_PAR)
     818・intnoに対応するinhnoに対してDEF_INHがある場合(E_OBJ)
     819・intnoに対するCFG_INTがない場合(E_OBJ)
     820・intnoに対してCFG_INTで設定された割込み優先度がTMIN_INTPRIよりも小さい
     821 場合(E_OBJ)
     822        ※ カーネル管理外のISRはサポートしないため
     823
     824*可能であればターゲット依存部で検出するもの
     825・isrがプログラムの開始番地として正しくない場合(E_PAR)
     826
     827(7-3) 割込みハンドラに関する定義
     828
     829割込みハンドラを定義する静的API「DEF_INH」で定義した割込みハンドラ(上
     830述の割込みサービスルーチンの追加によりコンフィギュレータが生成した割込
     831みハンドラを含む)に関する定義を生成する.具体的には次の通り.
     832
     833以下では,システムコンフィギュレーションファイルに次の静的APIが含まれ
     834ている時に生成すべき情報について述べる.
    973835
    974836DEF_INH(inhno, { inhatr, inthdr });
    975837
    976 (7-3-1) 定義する割込みハンドラの数
    977 
    978 å®šç¾©ã™ã‚‹å‰²è¾¼ã¿ãƒãƒ³ãƒ‰ãƒ©ã®æ•°ã‚’マクロ定義するプリプロセッサディレクティブ
    979 ï¼ˆ#define)を生成する.また,その値を持つ変数の定義を生成する.å
    980 ·ä½“çš„
    981 ã«ã¯ï¼Œæ¬¡ã®ã‚ˆã†ãªè¡Œã‚’生成する.
    982 
    983 #define TNUM_INHNO <定義する割込みハンドラの数>
     838(7-3-1) 定義する割込みハンドラの数
     839
     840定義する割込みハンドラの数をマクロ定義するプリプロセッサディレクティブ
     841(#define)を生成する.また,その値を持つ変数の定義を生成する.具体的
     842には,次のような行を生成する.
     843
     844#define TNUM_INHNO <定義する割込みハンドラの数>
    984845const uint_t    _kernel_tnum_inhno = TNUM_INHNO;
    985846
    986 (7-3-2) 割込みハンドラの出å
    987 ¥å£å‡¦ç†
    988 
    989 å®šç¾©ã™ã‚‹å‰²è¾¼ã¿ãƒãƒ³ãƒ‰ãƒ©æ¯Žã«ï¼Œå‰²è¾¼ã¿ãƒãƒ³ãƒ‰ãƒ©ã®å‡ºå
    990 ¥å£å‡¦ç†ãƒ«ãƒ¼ãƒãƒ³ã‚’生成す
    991 ã‚‹ï¼Žå
    992 ·ä½“的には,次のような行を生成する.
     847(7-3-2) 割込みハンドラの出入口処理
     848
     849定義する割込みハンドラ毎に,割込みハンドラの出入口処理ルーチンを生成す
     850る.具体的には,次のような行を生成する.
    993851
    994852INTHDR_ENTRY(inhno, inhno_num, inthdr)
    995853
    996 ã“こでinhno_numは,inhno(割込みハンドラ番号)を数値で表現したもので,
    997 ã‚¢ã‚»ãƒ³ãƒ–リ言語記述に使用するためのものである.
    998 
    999 (7-3-3) 割込みハンドラ初期化ブロックの定義
    1000 
    1001 å‰²è¾¼ã¿ãƒãƒ³ãƒ‰ãƒ©åˆæœŸåŒ–ブロックを生成する.å
    1002 ·ä½“的には,次のような行を生成
    1003 ã™ã‚‹ï¼Ž
     854ここでinhno_numは,inhno(割込みハンドラ番号)を数値で表現したもので,
     855アセンブリ言語記述に使用するためのものである.
     856
     857(7-3-3) 割込みハンドラ初期化ブロックの定義
     858
     859割込みハンドラ初期化ブロックを生成する.具体的には,次のような行を生成
     860する.
    1004861
    1005862const INHINIB _kernel_inhinib_table[TNUM_INHNO] = {
    1006         <割込みハンドラ1の初期化æƒ
    1007 å ±>,
    1008         <割込みハンドラ2の初期化æƒ
    1009 å ±>,
    1010                                 ……
    1011         <割込みハンドラTNUM_INHNOの初期化æƒ
    1012 å ±>
     863        <割込みハンドラ1の初期化情報>,
     864        <割込みハンドラ2の初期化情報>,
     865                                ……
     866        <割込みハンドラTNUM_INHNOの初期化情報>
    1013867};
    1014868
    1015 ã“の中の割込みハンドラの初期化æƒ
    1016 å ±ã¯ï¼Œæ¬¡ã®å½¢å¼ã¨ã™ã‚‹ï¼Ž
     869この中の割込みハンドラの初期化情報は,次の形式とする.
    1017870
    1018871        { (inhno), (inhatr), (FP)(INT_ENTRY(inhno, inthdr)) }
    1019872
    1020 (7-3-4) エラー条件
    1021 
    1022 å‰²è¾¼ã¿ãƒãƒ³ãƒ‰ãƒ©ã«é–¢ã™ã‚‹ã‚¨ãƒ©ãƒ¼æ¡ä»¶ã¯æ¬¡ã®é€šã‚Šã§ã‚る.
    1023 
    1024 ï¼Šãƒ‘ス2で検出するもの
    1025 ãƒ»inhnoがDEF_INHに対する割込みハンドラ番号として正しくない場合(E_PAR)
    1026 ãƒ»inhnoがDEF_INHによって設定済みの場合(E_OBJ)
    1027 #・inhnoに対応するintnoに対してATT_ISRがある場合(E_OBJ)
    1028 #       â€» inhnoに対応するintnoがない場合には,このチェックを行わない
    1029 #       â†’ このチェックは,割込みサービスルーチン側で行う
    1030 ãƒ»inhatrが(TA_NULL)でない場合(E_RSATR)
    1031         ※ ターゲット依存部で割込みハンドラ属性を追加可(TARGET_INHATR)
    1032         ※ TA_NONKERNELを使う場合には,TARGET_INHATRに設定する
    1033 ãƒ»ã‚«ãƒ¼ãƒãƒ«ç®¡ç†ã«å›ºå®šã•ã‚Œã¦ã„ã‚‹inhnoに対して,inhatrにTA_NONKERNELが指定
    1034 ã€€ã•ã‚Œã¦ã„る場合(E_RSATR)
    1035 ãƒ»ã‚«ãƒ¼ãƒãƒ«ç®¡ç†å¤–に固定されているinhnoに対して,inhatrにTA_NONKERNELが指
    1036 ã€€å®šã•ã‚Œã¦ã„ない場合(E_RSATR)
    1037 ãƒ»inhnoに対応するintnoに対するCFG_INTがない場合(E_OBJ)
    1038         ※ inhnoに対応するintnoがない場合には,このチェックを行わない
    1039 ãƒ»inhatrにTA_NONKERNELが指定されておらず,inhnoに対応するintnoに対して
    1040 ã€€CFG_INTで設定された割込み優å
    1041 ˆåº¦ãŒTMIN_INTPRIよりも小さい場合(E_OBJ)
    1042         ※ inhnoに対応するintnoがない場合には,このチェックを行わない
    1043 ãƒ»inhatrにTA_NONKERNELが指定されており,inhnoに対応するintnoに対して
    1044 ã€€CFG_INTで設定された割込み優å
    1045 ˆåº¦ãŒTMIN_INTPRI以上である場合(E_OBJ)
    1046         ※ inhnoに対応するintnoがない場合には,このチェックを行わない
    1047 
    1048 ï¼Šå¯èƒ½ã§ã‚ればターゲット依存部で検出するもの
    1049 ãƒ»inthdrがプログラムの開始番地として正しくない場合(E_PAR)
    1050 
    1051 (8) CPU例外に関する定義
    1052 
    1053 CPU例外に関して生成するæƒ
    1054 å ±ã¯ï¼Œã‚¿ãƒ¼ã‚²ãƒƒãƒˆæ¯Žã«å®šã‚ã‚‹ã“とができる.ターゲッ
    1055 ãƒˆæ¯Žã«å®šã‚ãªã„場合には,以下で述べるターゲットに依存しない標準的なæƒ
    1056 å ±
    1057 ã‚’生成する.ターゲット毎に定める場合には,これらのæƒ
    1058 å ±ã¯ç”Ÿæˆã•ã‚Œãªã„.
    1059 
    1060 ã‚·ã‚¹ãƒ†ãƒ ã‚³ãƒ³ãƒ•ã‚£ã‚®ãƒ¥ãƒ¬ãƒ¼ã‚·ãƒ§ãƒ³ãƒ•ã‚¡ã‚¤ãƒ«ä¸­ã«ï¼ŒCPU例外ハンドラを定義する
    1061 é™çš„API「DEF_EXC」が含まれている場合に,CPU例外ハンドラに関する定義を
    1062 ç”Ÿæˆã™ã‚‹ï¼Ž
    1063 
    1064 ä»¥ä¸‹ã§ã¯ï¼Œã‚·ã‚¹ãƒ†ãƒ ã‚³ãƒ³ãƒ•ã‚£ã‚®ãƒ¥ãƒ¬ãƒ¼ã‚·ãƒ§ãƒ³ãƒ•ã‚¡ã‚¤ãƒ«ã«æ¬¡ã®é™çš„APIが含まれ
    1065 ã¦ã„る時に生成すべきæƒ
    1066 å ±ã«ã¤ã„て述べる.
     873(7-3-4) エラー条件
     874
     875割込みハンドラに関するエラー条件は次の通りである.
     876
     877*パス2で検出するもの
     878・inhnoがDEF_INHに対する割込みハンドラ番号として正しくない場合(E_PAR)
     879・inhnoがDEF_INHによって設定済みの場合(E_OBJ)
     880#・inhnoに対応するintnoに対してATT_ISRがある場合(E_OBJ)
     881#       ※ inhnoに対応するintnoがない場合には,このチェックを行わない
     882#       → このチェックは,割込みサービスルーチン側で行う
     883・inhatrが(TA_NULL)でない場合(E_RSATR)
     884        ※ ターゲット依存部で割込みハンドラ属性を追加可(TARGET_INHATR)
     885        ※ TA_NONKERNELを使う場合には,TARGET_INHATRに設定する
     886・カーネル管理に固定されているinhnoに対して,inhatrにTA_NONKERNELが指定
     887 されている場合(E_RSATR)
     888・カーネル管理外に固定されているinhnoに対して,inhatrにTA_NONKERNELが指
     889 定されていない場合(E_RSATR)
     890・inhnoに対応するintnoに対するCFG_INTがない場合(E_OBJ)
     891        ※ inhnoに対応するintnoがない場合には,このチェックを行わない
     892・inhatrにTA_NONKERNELが指定されておらず,inhnoに対応するintnoに対して
     893 CFG_INTで設定された割込み優先度がTMIN_INTPRIよりも小さい場合(E_OBJ)
     894        ※ inhnoに対応するintnoがない場合には,このチェックを行わない
     895・inhatrにTA_NONKERNELが指定されており,inhnoに対応するintnoに対して
     896 CFG_INTで設定された割込み優先度がTMIN_INTPRI以上である場合(E_OBJ)
     897        ※ inhnoに対応するintnoがない場合には,このチェックを行わない
     898
     899*可能であればターゲット依存部で検出するもの
     900・inthdrがプログラムの開始番地として正しくない場合(E_PAR)
     901
     902(8) CPU例外に関する定義
     903
     904CPU例外に関して生成する情報は,ターゲット毎に定めることができる.ターゲッ
     905ト毎に定めない場合には,以下で述べるターゲットに依存しない標準的な情報
     906を生成する.ターゲット毎に定める場合には,これらの情報は生成されない.
     907
     908システムコンフィギュレーションファイル中に,CPU例外ハンドラを定義する
     909静的API「DEF_EXC」が含まれている場合に,CPU例外ハンドラに関する定義を
     910生成する.
     911
     912以下では,システムコンフィギュレーションファイルに次の静的APIが含まれ
     913ている時に生成すべき情報について述べる.
    1067914
    1068915DEF_EXC(excno, { excatr, exchdr });
    1069916
    1070 (8-1) 定義するCPU例外ハンドラの数
    1071 
    1072 å®šç¾©ã™ã‚‹CPU例外ハンドラの数をマクロ定義するプリプロセッサディレクティ
    1073 ãƒ–(#define)を生成する.また,その値を持つ変数の定義を生成する.å
    1074 ·ä½“
    1075 çš„には,次のような行を生成する.
    1076 
    1077 #define TNUM_EXCNO <定義するCPU例外ハンドラの数>
     917(8-1) 定義するCPU例外ハンドラの数
     918
     919定義するCPU例外ハンドラの数をマクロ定義するプリプロセッサディレクティ
     920ブ(#define)を生成する.また,その値を持つ変数の定義を生成する.具体
     921的には,次のような行を生成する.
     922
     923#define TNUM_EXCNO <定義するCPU例外ハンドラの数>
    1078924const uint_t    _kernel_tnum_excno = TNUM_EXCNO;
    1079925
    1080 (8-2) CPU例外ハンドラの出å
    1081 ¥å£å‡¦ç†
    1082 
    1083 å®šç¾©ã™ã‚‹CPU例外ハンドラ毎に,CPU例外ハンドラの出å
    1084 ¥å£å‡¦ç†ãƒ«ãƒ¼ãƒãƒ³ã‚’生成
    1085 ã™ã‚‹ï¼Žå
    1086 ·ä½“的には,次のような行を生成する.
     926(8-2) CPU例外ハンドラの出入口処理
     927
     928定義するCPU例外ハンドラ毎に,CPU例外ハンドラの出入口処理ルーチンを生成
     929する.具体的には,次のような行を生成する.
    1087930
    1088931EXCHDR_ENTRY(excno, excno_num, exchdr)
    1089932
    1090 ã“こでexcno_numは,excno(CPU例外ハンドラ番号)を数値で表現したもので,
    1091 ã‚¢ã‚»ãƒ³ãƒ–リ言語記述に使用するためのものである.
    1092 
    1093 (8-3) CPU例外ハンドラ初期化ブロックの定義
    1094 
    1095 CPU例外ハンドラ初期化ブロックを生成する.å
    1096 ·ä½“的には,次のような行を生成
    1097 ã™ã‚‹ï¼Ž
     933ここでexcno_numは,excno(CPU例外ハンドラ番号)を数値で表現したもので,
     934アセンブリ言語記述に使用するためのものである.
     935
     936(8-3) CPU例外ハンドラ初期化ブロックの定義
     937
     938CPU例外ハンドラ初期化ブロックを生成する.具体的には,次のような行を生成
     939する.
    1098940
    1099941const EXCINIB _kernel_excinib_table[TNUM_EXCNO] = {
    1100         <CPU例外ハンドラ1の初期化æƒ
    1101 å ±>,
    1102         <CPU例外ハンドラ2の初期化æƒ
    1103 å ±>,
    1104                                 ……
    1105         <CPU例外ハンドラTNUM_EXCNOの初期化æƒ
    1106 å ±>
     942        <CPU例外ハンドラ1の初期化情報>,
     943        <CPU例外ハンドラ2の初期化情報>,
     944                                ……
     945        <CPU例外ハンドラTNUM_EXCNOの初期化情報>
    1107946};
    1108947
    1109 ã“の中のCPU例外ハンドラの初期化æƒ
    1110 å ±ã¯ï¼Œæ¬¡ã®å½¢å¼ã¨ã™ã‚‹ï¼Ž
     948この中のCPU例外ハンドラの初期化情報は,次の形式とする.
    1111949
    1112950        { (excno), (excatr), (FP)(EXC_ENTRY(excno, exchdr)) }
    1113951
    1114 (8-4) エラー条件
    1115 
    1116 CPU例外ハンドラに関するエラー条件は次の通りである.
    1117 
    1118 ï¼Šãƒ‘ス2で検出するもの
    1119 ãƒ»excnoがDEF_EXCに対するCPU例外ハンドラ番号として正しくない場合(E_PAR)
    1120 ãƒ»excnoがDEF_EXCによって設定済みの場合(E_OBJ)
    1121 ãƒ»excatrが(TA_NULL)でない場合(E_RSATR)
    1122         ※ ターゲット依存部でCPU例外ハンドラ属性を追加可(TARGET_EXCATR)
    1123 
    1124 ï¼Šå¯èƒ½ã§ã‚ればターゲット依存部で検出するもの
    1125 ãƒ»exchdrがプログラムの開始番地として正しくない場合(E_PAR)
    1126 
    1127 (9) 非タスクコンテキスト用のスタック領域に関する定義
    1128 
    1129 éžã‚¿ã‚¹ã‚¯ã‚³ãƒ³ãƒ†ã‚­ã‚¹ãƒˆç”¨ã®ã‚¹ã‚¿ãƒƒã‚¯é ˜åŸŸã«é–¢ã™ã‚‹å®šç¾©ã¯ï¼Œå¿
    1130 ãšç”Ÿæˆã—なければ
    1131 ãªã‚‰ãªã„.
    1132 
    1133 (9-1) DEF_ICSがない場合
    1134 
    1135 ã‚·ã‚¹ãƒ†ãƒ ã‚³ãƒ³ãƒ•ã‚£ã‚®ãƒ¥ãƒ¬ãƒ¼ã‚·ãƒ§ãƒ³ãƒ•ã‚¡ã‚¤ãƒ«ã«ï¼Œé™çš„API「DEF_ICS」が含まれて
    1136 ã„ない場合には,次の行を生成する.
     952(8-4) エラー条件
     953
     954CPU例外ハンドラに関するエラー条件は次の通りである.
     955
     956*パス2で検出するもの
     957・excnoがDEF_EXCに対するCPU例外ハンドラ番号として正しくない場合(E_PAR)
     958・excnoがDEF_EXCによって設定済みの場合(E_OBJ)
     959・excatrが(TA_NULL)でない場合(E_RSATR)
     960        ※ ターゲット依存部でCPU例外ハンドラ属性を追加可(TARGET_EXCATR)
     961
     962*可能であればターゲット依存部で検出するもの
     963・exchdrがプログラムの開始番地として正しくない場合(E_PAR)
     964
     965(9) 非タスクコンテキスト用のスタック領域に関する定義
     966
     967非タスクコンテキスト用のスタック領域に関する定義は,必ず生成しなければ
     968ならない.
     969
     970(9-1) DEF_ICSがない場合
     971
     972システムコンフィギュレーションファイルに,静的API「DEF_ICS」が含まれて
     973いない場合には,次の行を生成する.
    1137974
    1138975#ifdef DEFAULT_ISTK
     
    1149986#endif /* DEFAULT_ISTK */
    1150987
    1151 (9-2) DEF_ICSがある場合
    1152 
    1153 ä»¥ä¸‹ã§ã¯ï¼Œã‚·ã‚¹ãƒ†ãƒ ã‚³ãƒ³ãƒ•ã‚£ã‚®ãƒ¥ãƒ¬ãƒ¼ã‚·ãƒ§ãƒ³ãƒ•ã‚¡ã‚¤ãƒ«ã«æ¬¡ã®é™çš„APIが含まれて
    1154 ã„る時に生成すべきæƒ
    1155 å ±ã«ã¤ã„て述べる.
     988(9-2) DEF_ICSがある場合
     989
     990以下では,システムコンフィギュレーションファイルに次の静的APIが含まれて
     991いる時に生成すべき情報について述べる.
    1156992
    1157993DEF_ICS({ istksz, istk });
    1158994
    1159 istkがNULLの場合には,指定されたサイズの非タスクコンテキスト用のスタッ
    1160 ã‚¯é ˜åŸŸã‚’確保し,非タスクコンテキスト用のスタック領域の初期化æƒ
    1161 å ±ã‚’生成
    1162 ã™ã‚‹ï¼Žå
    1163 ·ä½“的には,上記の静的APIに対して,次の行を生成する.
     995istkがNULLの場合には,指定されたサイズの非タスクコンテキスト用のスタッ
     996ク領域を確保し,非タスクコンテキスト用のスタック領域の初期化情報を生成
     997する.具体的には,上記の静的APIに対して,次の行を生成する.
    1164998
    1165999static STK_T                            _kernel_istack[COUNT_STK_T(istksz)];
     
    11671001#define TOPPERS_ISTK            _kernel_istack
    11681002
    1169 istkがNULLでない場合には,非タスクコンテキスト用のスタック領域の初期化
    1170 æƒ
    1171 å ±ã‚’,次の形式で生成する.
     1003istkがNULLでない場合には,非タスクコンテキスト用のスタック領域の初期化
     1004情報を,次の形式で生成する.
    11721005
    11731006#define TOPPERS_ISTKSZ          (istksz)
    11741007#define TOPPERS_ISTK            (istk)
    11751008
    1176 (9-3) 変数の生成
    1177 
    1178 DEF_ICSの有無によらず,次の定義を生成する.
     1009(9-3) 変数の生成
     1010
     1011DEF_ICSの有無によらず,次の定義を生成する.
    11791012
    11801013const SIZE              _kernel_istksz = TOPPERS_ISTKSZ;
     
    11851018#endif /* TOPPERS_ISTKPT */
    11861019
    1187 (9-4) エラー条件
    1188 
    1189 éžã‚¿ã‚¹ã‚¯ã‚³ãƒ³ãƒ†ã‚­ã‚¹ãƒˆç”¨ã®ã‚¹ã‚¿ãƒƒã‚¯é ˜åŸŸã«é–¢ã™ã‚‹ã‚¨ãƒ©ãƒ¼æ¡ä»¶ã¯æ¬¡ã®é€šã‚Šã§ã‚る.
    1190 
    1191 ï¼Šãƒ‘ス2で検出するもの
    1192 ãƒ»é™çš„API「DEF_ICS」が複数ある(E_OBJ)
    1193 ãƒ»istkszが0以下か,ターゲット定義の最小値(TARGET_MIN_ISTKSZ)よりも小
    1194 ã€€ã•ã„場合(E_PAR)
    1195 ãƒ»istkszがスタック領域のサイズとして正しくない場合(E_PAR)
    1196         - ターゲット依存の値(CHECK_STKSZ_ALIGN)の倍数でない場合
    1197         ※ このエラーチェックは,istkがNULLでない場合にのみ行う
    1198 
    1199 ï¼Šãƒ‘ス3で検出するもの
    1200 ãƒ»istkがスタック領域のå
    1201 ˆé ­ç•ªåœ°ã¨ã—て正しくない場合(E_PAR)
    1202         - ターゲット依存の値(CHECK_STACK_ALIGN)の倍数でない場合
    1203         - NULLの場合(ターゲット依存,CHECK_STACK_NONNULL)
    1204 
    1205 (10) タイムイベント管理に関する定義
    1206 
    1207 ã‚¿ã‚¤ãƒ ã‚¤ãƒ™ãƒ³ãƒˆç®¡ç†ã«é–¢é€£ã—て,次の定義を生成する.
     1020(9-4) エラー条件
     1021
     1022非タスクコンテキスト用のスタック領域に関するエラー条件は次の通りである.
     1023
     1024*パス2で検出するもの
     1025・静的API「DEF_ICS」が複数ある(E_OBJ)
     1026・istkszが0以下か,ターゲット定義の最小値(TARGET_MIN_ISTKSZ)よりも小
     1027 さい場合(E_PAR)
     1028・istkszがスタック領域のサイズとして正しくない場合(E_PAR)
     1029        - ターゲット依存の値(CHECK_STKSZ_ALIGN)の倍数でない場合
     1030        ※ このエラーチェックは,istkがNULLでない場合にのみ行う
     1031
     1032*パス3で検出するもの
     1033・istkがスタック領域の先頭番地として正しくない場合(E_PAR)
     1034        - ターゲット依存の値(CHECK_STACK_ALIGN)の倍数でない場合
     1035        - NULLの場合(ターゲット依存,CHECK_STACK_NONNULL)
     1036
     1037(10) タイムイベント管理に関する定義
     1038
     1039タイムイベント管理に関連して,次の定義を生成する.
    12081040
    12091041TMEVTN  _kernel_tmevt_heap[TNUM_TSKID + TNUM_CYCID + TNUM_ALMID];
    12101042
    1211 (11) 各モジュールの初期化関数の定義
    1212 
    1213 å„カーネルオブジェクトの管理,割込み管理,CPU例外ハンドラ管理の各機能を
    1214 åˆæœŸåŒ–関数を順に呼び出す関数(_kernel_initialize_object)を生成する.次
    1215 ã®3つの初期化関数を除いては,使用しない機能の初期化関数は呼び出さない.
     1043(11) 各モジュールの初期化関数の定義
     1044
     1045各カーネルオブジェクトの管理,割込み管理,CPU例外ハンドラ管理の各機能を
     1046初期化関数を順に呼び出す関数(_kernel_initialize_object)を生成する.次
     1047の3つの初期化関数を除いては,使用しない機能の初期化関数は呼び出さない.
    12161048
    12171049        _kernel_initialize_task
     
    12191051        _kernel_initialize_exception
    12201052
    1221 ã™ã¹ã¦ã®æ©Ÿèƒ½ã‚’使った場合に生成される関数は次の通りである.
     1053すべての機能を使った場合に生成される関数は次の通りである.
    12221054
    12231055void
     
    12371069}
    12381070
    1239 (12) 初期化ルーチンの実行関数の定義
    1240 
    1241 ã‚·ã‚¹ãƒ†ãƒ ã‚³ãƒ³ãƒ•ã‚£ã‚®ãƒ¥ãƒ¬ãƒ¼ã‚·ãƒ§ãƒ³ãƒ•ã‚¡ã‚¤ãƒ«ä¸­ã«å«ã¾ã‚Œã‚‹åˆæœŸåŒ–ルーチンを追加
    1242 ã™ã‚‹é™çš„API「ATT_INI」に対して,追加した初期化ルーチンを順に呼び出す関
    1243 æ•°ã‚’生成する.å
    1244 ·ä½“的には,
     1071(12) 初期化ルーチンの実行関数の定義
     1072
     1073システムコンフィギュレーションファイル中に含まれる初期化ルーチンを追加
     1074する静的API「ATT_INI」に対して,追加した初期化ルーチンを順に呼び出す関
     1075数を生成する.具体的には,
    12451076
    12461077ATT_INI({ iniatr, exinf, inirtn });
    12471078
    1248 ã¨ã„う静的APIに対して,
     1079という静的APIに対して,
    12491080
    12501081        (inirtn)((intptr_t)(exinf));
    12511082
    1252 ã‚’呼び出す関数を,_kernel_call_inirtnという名前で生成する.初期化ルーチ
    1253 ãƒ³ã‚’呼び出す順序は,システムコンフィギュレーションファイル中での静的
    1254 APIの順序に一致させる.
    1255 
    1256 ä¾‹ãˆã°ï¼Œ
     1083を呼び出す関数を,_kernel_call_inirtnという名前で生成する.初期化ルーチ
     1084ンを呼び出す順序は,システムコンフィギュレーションファイル中での静的
     1085APIの順序に一致させる.
     1086
     1087例えば,
    12571088
    12581089ATT_INI({ TA_NULL, 0, timer_initialize });
    12591090ATT_INI({ TA_NULL, CONSOLE_PORTID, serial_initialize });
    12601091
    1261 ã¨ã„う2つの静的APIがこの順序で記述された時に生成する関数は次の通りであ
    1262 ã‚‹ï¼Ž
     1092という2つの静的APIがこの順序で記述された時に生成する関数は次の通りであ
     1093る.
    12631094
    12641095void
     
    12691100}
    12701101
    1271 (12-1) エラー条件
    1272 
    1273 åˆæœŸåŒ–ルーチンに関するエラー条件は次の通りである.
    1274 
    1275 ï¼Šãƒ‘ス2で検出するもの
    1276 ãƒ»iniatrが(TA_NULL)でない場合(E_RSATR)
    1277 
    1278 ï¼Šå¯èƒ½ã§ã‚ればターゲット依存部で検出するもの
    1279 ãƒ»inirtnがプログラムの開始番地として正しくない場合(E_PAR)
    1280 
    1281 (13) 終了処理ルーチンの実行関数の定義
    1282 
    1283 ã‚·ã‚¹ãƒ†ãƒ ã‚³ãƒ³ãƒ•ã‚£ã‚®ãƒ¥ãƒ¬ãƒ¼ã‚·ãƒ§ãƒ³ãƒ•ã‚¡ã‚¤ãƒ«ä¸­ã«å«ã¾ã‚Œã‚‹çµ‚了処理ルーチンを追
    1284 åŠ ã™ã‚‹é™çš„API「ATT_TER」に対して,追加した終了処理ルーチンを順に呼び出
    1285 ã™é–¢æ•°ã‚’生成する.å
    1286 ·ä½“的には,
     1102(12-1) エラー条件
     1103
     1104初期化ルーチンに関するエラー条件は次の通りである.
     1105
     1106*パス2で検出するもの
     1107・iniatrが(TA_NULL)でない場合(E_RSATR)
     1108
     1109*可能であればターゲット依存部で検出するもの
     1110・inirtnがプログラムの開始番地として正しくない場合(E_PAR)
     1111
     1112(13) 終了処理ルーチンの実行関数の定義
     1113
     1114システムコンフィギュレーションファイル中に含まれる終了処理ルーチンを追
     1115加する静的API「ATT_TER」に対して,追加した終了処理ルーチンを順に呼び出
     1116す関数を生成する.具体的には,
    12871117
    12881118ATT_TER({ teratr, exinf, terrtn });
    12891119
    1290 ã¨ã„う静的APIに対して,
     1120という静的APIに対して,
    12911121
    12921122        (terrtn)((intptr_t)(exinf));
    12931123
    1294 ã‚’呼び出す関数を,_kernel_call_terrtnという名前で生成する.終了処理ルー
    1295 ãƒãƒ³ã‚’呼び出す順序は,システムコンフィギュレーションファイル中での静的
    1296 APIの逆順に一致させる.
    1297 
    1298 ä¾‹ãˆã°ï¼Œ
     1124を呼び出す関数を,_kernel_call_terrtnという名前で生成する.終了処理ルー
     1125チンを呼び出す順序は,システムコンフィギュレーションファイル中での静的
     1126APIの逆順に一致させる.
     1127
     1128例えば,
    12991129
    13001130ATT_TER({ TA_NULL, 0, timer_terminate });
    13011131ATT_TER({ TA_NULL, CONSOLE_PORTID, serial_terminate });
    13021132
    1303 ã¨ã„う2つの静的APIがこの順序で記述された時に生成する関数は次の通りであ
    1304 ã‚‹ï¼Ž
     1133という2つの静的APIがこの順序で記述された時に生成する関数は次の通りであ
     1134る.
    13051135
    13061136void
     
    13111141}
    13121142
    1313 (13-1) エラー条件
    1314 
    1315 çµ‚了処理ルーチンに関するエラー条件は次の通りである.
    1316 
    1317 ï¼Šãƒ‘ス2で検出するもの
    1318 ãƒ»teratrが(TA_NULL)でない場合(E_RSATR)
    1319 
    1320 ï¼Šå¯èƒ½ã§ã‚ればターゲット依存部で検出するもの
    1321 ãƒ»terrtnがプログラムの開始番地として正しくない場合(E_PAR)
    1322 
    1323 ä»¥ä¸Š
     1143(13-1) エラー条件
     1144
     1145終了処理ルーチンに関するエラー条件は次の通りである.
     1146
     1147*パス2で検出するもの
     1148・teratrが(TA_NULL)でない場合(E_RSATR)
     1149
     1150*可能であればターゲット依存部で検出するもの
     1151・terrtnがプログラムの開始番地として正しくない場合(E_PAR)
     1152
     1153以上
Note: See TracChangeset for help on using the changeset viewer.