Changeset 315 for rubycfg_asp/trunk/asp_dcre/doc/configurator.txt
- Timestamp:
- Jul 23, 2017, 2:29:40 PM (7 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
rubycfg_asp/trunk/asp_dcre/doc/configurator.txt
-
Property svn:mime-type
changed from
text/plain
totext/plane; charset=UTF-8
r313 r315 1 1 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 する内容については,このドキュメントの範囲外である. 13 11 14 12 ---------------------------------------------------------------------- … … 20 18 Graduate School of Information Science, Nagoya Univ., JAPAN 21 19 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 免責すること. 58 42 59 æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è 60 ã 61 ãã³TOPPERSããã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç 62 ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ 63 ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ害ã«é¢ãã¦ãï¼ã 64 ã®è²¬ä»»ãè² ããªãï¼ 43 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 44 よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的 45 に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ 46 アの利用により直接的または間接的に生じたいかなる損害に関しても,そ 47 の責任を負わない. 65 48 66 49 $Id$ 67 50 ---------------------------------------------------------------------- 68 51 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 78 ASPカーネルのコンフィギュレータは,システムコンフィギュレーションファイ 79 ルを処理して,カーネル構成・初期化ファイル(kernel_cfg.c)と構成・初期 80 化ヘッダファイル(kernel_cfg.h)を生成する.また,コンフィギュレータの 81 処理の途中に,必要な中間ファイルを生成する. 82 83 84 ○静的API一覧 85 86 ASPカーネルのコンフィギュレータが処理する静的APIは次の通り. 87 88 (1) タスク管理機能 107 89 CRE_TSK(ID tskid, { ATR tskatr, intptr_t exinf, TASK task, 108 90 PRI itskpri, SIZE stksz, STK_T *stk }) 109 91 110 (2) ã¿ã¹ã¯ä¾å¤å¦çæ©è½92 (2) タスク例外処理機能 111 93 DEF_TEX(ID tskid, { ATR texatr, TEXRTN texrtn }) 112 94 113 (3) åæã»éä¿¡æ©è½95 (3) 同期・通信機能 114 96 CRE_SEM(ID semid, { ATR sematr, uint_t isemcnt, uint_t maxsem }) 115 97 CRE_FLG(ID flgid, { ATR flgatr, FLGPTN iflgptn }) … … 118 100 CRE_MBX(ID mbxid, { ATR mbxatr, PRI maxmpri, void *mprihd }) 119 101 120 â» dtqmbï¼pdqmbï¼mprihdãNULLã§ãªãå ´åã¯ãµãã¼ãããªãï¼ 121 122 (4) ã¡ã¢ãªãã¼ã«ç®¡çæ©è½102 ※ dtqmb,pdqmb,mprihdがNULLでない場合はサポートしない. 103 104 (4) メモリプール管理機能 123 105 CRE_MPF(ID mpfid, { ATR mpfatr, uint_t blkcnt, uint_t blksz, 124 106 MPF_T *mpf, void *mpfmb }) 125 107 126 â» mpfmbãNULLã§ãªãå ´åã¯ãµãã¼ãããªãï¼ 127 128 (5) æé管çæ©è½108 ※ mpfmbがNULLでない場合はサポートしない. 109 110 (5) 時間管理機能 129 111 CRE_CYC(ID cycid, { ATR cycatr, intptr_t exinf, CYCHDR cychdr, 130 112 RELTIM cyctim, RELTIM cycphs }) 131 113 CRE_ALM(ID almid, { ATR almatr, intptr_t exinf, ALMHDR almhdr }) 132 114 133 (6) å²è¾¼ã¿ç®¡çæ©è½115 (6) 割込み管理機能 134 116 CFG_INT(INTNO intno, { ATR intatr, PRI intpri }) 135 117 ATT_ISR({ ATR isratr, intptr_t exinf, INTNO intno, ISR isr, PRI isrpri }) 136 118 DEF_INH(INHNO inhno, { ATR inhatr, INTHDR inthdr }) 137 119 138 (7) CPU ä¾å¤ç®¡çæ©è½120 (7) CPU例外管理機能 139 121 DEF_EXC(EXCNO excno, { ATR excatr, EXCHDR exchdr }) 140 122 141 (8) ã·ã¹ãã æ§æ管çæ©è½123 (8) システム構成管理機能 142 124 DEF_ICS({ SIZE istksz, STK_T *istk }) 143 125 ATT_INI({ ATR iniatr, intptr_t exinf, INIRTN inirtn }) 144 126 ATT_TER({ ATR teratr, intptr_t exinf, TERRTN terrtn }) 145 127 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, 130 INIRTN,TERRTN,STK_T *,MPF_T *)およびintptr_t型のパラメータは一般定 131 数式パラメータとする.その他のパラメータは,整数定数式パラメータとする. 132 133 134 ○カーネル構成・初期化ヘッダファイル(kernel_cfg.h) 135 136 カーネル構成・初期化ヘッダファイル(kernel_cfg.h)には,次の定義を生成 137 する. 138 139 (1) 固定生成部分 140 141 kernel_cfg.hが複数回インクルードされるのを防ぐための記述を生成する.具 142 体的には,ファイルの先頭に次の行を生成する. 164 143 165 144 #ifndef TOPPERS_KERNEL_CFG_H 166 145 #define TOPPERS_KERNEL_CFG_H 167 146 168 ã¾ãï¼ãã¡ã¤ã«ã®æ«å°¾ã«æ¬¡ã®è¡ãçæããï¼ 147 また,ファイルの末尾に次の行を生成する. 169 148 170 149 #endif /* TOPPERS_KERNEL_CFG_H */ 171 150 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番号を割り付けたオブジェクトの名前を,割り付けた 169 ID番号にマクロ定義するプリプロセッサディレクティブ(#define)を生成する. 170 例えば,次のような記述を生成する. 194 171 195 172 #define TASK1 1 … … 198 175 199 176 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 181 kernel_cfg.c用のヘッダファイルとID自動割付け結果ファイルをインクルード 182 するプリプロセッサディレクティブ(#include)を生成する.具体的には,次 183 の行を生成する. 208 184 209 185 #include "kernel/kernel_int.h" 210 186 #include "kernel_cfg.h" 211 187 212 (2) ã«ã¼ãã«ã®ç¨®é¡ã®ãã§ãã¯213 214 kernel_cfg.c ã¨ã«ã¼ãã«ã®ç¨®é¡ãä¸è´ãã¦ãããããã§ãã¯ããããã«ï¼æ¬¡ã®215 è¡ãçæããï¼ 188 (2) カーネルの種類のチェック 189 190 kernel_cfg.cとカーネルの種類が一致しているかをチェックするために,次の 191 行を生成する. 216 192 217 193 #if TKERNEL_PRID != 0x07u … … 219 195 #endif 220 196 221 (3) ã¤ã³ã¯ã«ã¼ããã£ã¬ã¯ãã£ãï¼#includeï¼ã®å¦ç222 223 ã·ã¹ãã ã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³ãã¡ã¤ã«ã«å«ã¾ããCè¨èªããªããã»ããµã®ã¤ 224 ã³ã¯ã«ã¼ããã£ã¬ã¯ãã£ãï¼#includeï¼ã¨åä¸ã®ãã£ã¬ã¯ãã£ãï¼#includeï¼ 225 ãçæããï¼ä¾ãã°ï¼ 197 (3) インクルードディレクティブ(#include)の処理 198 199 システムコンフィギュレーションファイルに含まれるC言語プリプロセッサのイ 200 ンクルードディレクティブ(#include)と同一のディレクティブ(#include) 201 を生成する.例えば, 226 202 227 203 #include "sample1.h" 228 204 229 ã¨ããã¤ã³ã¯ã«ã¼ããã£ã¬ã¯ãã£ãã«å¯¾ãã¦ï¼ 205 というインクルードディレクティブに対して, 230 206 231 207 #include "sample1.h" 232 208 233 ã¨ãããã£ã¬ã¯ãã£ããçæããï¼çæãããã£ã¬ã¯ãã£ãã®é åºã¯ï¼ã·ã¹ã 234 ã ã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³ãã¡ã¤ã«ä¸ã§ã®ã¤ã³ã¯ã«ã¼ããã£ã¬ã¯ãã£ãã®é åº 235 ã«ä¸è´ãããï¼ 236 237 (4) ãã¬ã¼ã¹ãã°ãã¯ãã®ããã©ã«ãå®ç¾© 238 239 kernel_cfg.cã®ä¸ã§ä½¿ç¨ãããã¬ã¼ã¹ãã°ãã¯ãã®ããã©ã«ãå®ç¾©ãçæããï¼ 240 å 241 ·ä½çã«ã¯ï¼æ¬¡ã®è¡ãçæããï¼ 209 というディレクティブを生成する.生成するディレクティブの順序は,システ 210 ムコンフィギュレーションファイル中でのインクルードディレクティブの順序 211 に一致させる. 212 213 (4) トレースログマクロのデフォルト定義 214 215 kernel_cfg.cの中で使用するトレースログマクロのデフォルト定義を生成する. 216 具体的には,次の行を生成する. 242 217 243 218 #ifndef LOG_ISR_ENTER … … 249 224 #endif /* LOG_ISR_LEAVE */ 250 225 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番号を値とする.例えば,次のような記述を生成する. 257 232 258 233 const ID TASK1_id = 1; … … 260 235 const ID SEM1_id = 1; 261 236 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 システムコンフィギュレーションファイル中に,オブジェクトを生成する静的 240 API「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」とすると,次のような行を生成する. 293 265 294 266 const ID _kernel_tmax_xxxid = (TMIN_XXXID + TNUM_XXXID - 1); 295 267 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」とすると,次のような行を生成する. 310 277 311 278 const 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のオブジェクトの初期化情報> 319 283 }; 320 284 321 ãªãã¸ã§ã¯ãã®åæåæ 322 å ±ã®å½¢å¼ã¯ï¼ãªãã¸ã§ã¯ãæ¯ã«ç°ãªãï¼å 323 ·ä½çã«ã¯ï¼ 324 ãªãã¸ã§ã¯ãæ¯ã®é 325 ã§èª¬æããï¼ 326 327 (d) ãªãã¸ã§ã¯ãã®ã³ã³ããã¼ã«ãããã¯ã®å®ç¾© 328 329 ãªãã¸ã§ã¯ãã®ã³ã³ããã¼ã«ãããã¯ã®å®ç¾©ãçæããï¼å 330 ·ä½çã«ã¯ï¼ãªãã¸ã§ 331 ã¯ãã®çç¥è¨å·ããXXXï¼xxxãã¨ããã¨ï¼æ¬¡ã®ãããªè¡ãçæããï¼ 285 オブジェクトの初期化情報の形式は,オブジェクト毎に異なる.具体的には, 286 オブジェクト毎の項で説明する. 287 288 (d) オブジェクトのコントロールブロックの定義 289 290 オブジェクトのコントロールブロックの定義を生成する.具体的には,オブジェ 291 クトの省略記号を「XXX/xxx」とすると,次のような行を生成する. 332 292 333 293 XXXCB _kernel_xxxcb_table[TNUM_XXXID]; 334 294 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 297 ASPカーネルは,タスクが一つもないケースに対応していないため,タスクに関 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 ている時に生成すべき情報について述べる. 354 310 355 311 CRE_TSK(tskid, { tskatr, exinf, task, itskpri, stksz, stk }); 356 312 DEF_TEX(tskid, { texatr, texrtn }); 357 313 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の場合のみ生成 321 static STK_T _kernel_stack_<タスク名>[COUNT_STK_T(stksz)]; 322 323 (6-1-2) タスクの初期化情報 324 325 タスク初期化ブロック中に生成するタスクの初期化情報は,次の形式とする. 375 326 376 327 { (tskatr), (intptr_t)(exinf), (task), INT_PRIORITY(itskpri), 377 328 (stksz), (stk), (texatr), (texrtn) } 378 329 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に対応する 332 DEF_TEXがない場合には,texatrをTA_NULL,texrtnをNULLとする. 333 334 (6-1-3) タスク生成順序テーブルの定義 335 336 タスクに対しては,生成された順序(タスクを生成する静的APIが記述された 337 順序)をテーブルに出力する必要がある.これは,タスクの生成された順序で, 338 タスクの初期化(より具体的には,タスクの起動)を行う必要があるためであ 339 る. 340 341 具体的には,次のような行を生成する. 395 342 396 343 const ID _kernel_torder_table[TNUM_TSKID] = { 397 < æåã«çæãããã¿ã¹ã¯ã®ã¿ã¹ã¯ID>,398 <2 çªç®ã«çæãããã¿ã¹ã¯ã®ã¿ã¹ã¯ID>,399 â¦â¦400 < æå¾ã«çæãããã¿ã¹ã¯ã®ã¿ã¹ã¯ID>344 <最初に生成されたタスクのタスクID>, 345 <2番目に生成されたタスクのタスクID>, 346 …… 347 <最後に生成されたタスクのタスクID> 401 348 }; 402 349 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 る.なお,セマフォに必要なメモリ領域はない. 439 383 440 384 CRE_SEM(semid, { sematr, isemcnt, maxsem }); 441 385 442 (6-2-1) ã»ããã©ã®åæåæ 443 å ± 444 445 ã»ããã©åæåãããã¯ä¸ã«çæããã»ããã©ã®åæåæ 446 å ±ã¯ï¼æ¬¡ã®å½¢å¼ã¨ã 447 ãï¼ 386 (6-2-1) セマフォの初期化情報 387 388 セマフォ初期化ブロック中に生成するセマフォの初期化情報は,次の形式とす 389 る. 448 390 449 391 { (sematr), (isemcnt), (maxsem) } 450 392 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 いて述べる.なお,イベントフラグに必要なメモリ領域はない. 470 410 471 411 CRE_FLG(flgid, { flgatr, iflgptn }); 472 412 473 (6-3-1) ã¤ãã³ããã©ã°ã®åæåæ 474 å ± 475 476 ã¤ãã³ããã©ã°åæåãããã¯ä¸ã«çæããã¤ãã³ããã©ã°ã®åæåæ 477 å ±ã¯ï¼ 478 次ã®å½¢å¼ã¨ããï¼ 413 (6-3-1) イベントフラグの初期化情報 414 415 イベントフラグ初期化ブロック中に生成するイベントフラグの初期化情報は, 416 次の形式とする. 479 417 480 418 { (flgatr), (iflgptn) } 481 419 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 述べる. 506 443 507 444 CRE_DTQ(dtqid, { dtqatr, dtqcnt, dtqmb }); 508 445 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でない場合のみ生成 453 static DTQMB _kernel_dtqmb_<データキュー名>[dtqcnt]; 454 455 (6-4-2) データキューの初期化情報 456 457 データキュー初期化ブロック中に生成するデータキューの初期化情報は,次の 458 形式とする. 459 460 { (dtqatr), (dtqcnt), (_kernel_dtqmb_<データキュー名>) } 461 462 ここで,dtqcntが0の場合には,_kernel_dtqmb_<データキュー名>に代えて, 463 NULLを用いる. 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 報について述べる. 554 482 555 483 CRE_PDQ(ID pdqid, { pdqatr, pdqcnt, maxdpri, pdqmb }); 556 484 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でない場合のみ生成 493 static 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 いて述べる.なお,メールボックスに必要なメモリ領域はない. 615 523 616 524 CRE_MBX(mbxid, { mbxatr, maxmpri, mprihd }); 617 525 618 (6-6-1) ã¡ã¼ã«ããã¯ã¹ã®åæåæ 619 å ± 620 621 ã¡ã¼ã«ããã¯ã¹åæåãããã¯ä¸ã«çæããã¡ã¼ã«ããã¯ã¹ã®åæåæ 622 å ±ã¯ï¼ 623 次ã®å½¢å¼ã¨ããï¼ 526 (6-6-1) メールボックスの初期化情報 527 528 メールボックス初期化ブロック中に生成するメールボックスの初期化情報は, 529 次の形式とする. 624 530 625 531 { (mbxatr), (maxmpri) } 626 532 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 報について述べる. 645 550 646 551 CRE_MPF(mpfid, { mpfatr, blkcnt, blksz, mpf, mpfmb }); 647 552 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の場合のみ生成 562 static MPF_T _kernel_mpf_<固定長メモリプール名>[(blkcnt) * COUNT_MPF_T(blksz)]; 662 563 663 ï¼å¿ 664 ãçæ 665 static MPFMB _kernel_mpfmb_<åºå®é·ã¡ã¢ãªãã¼ã«å>[blkcnt]; 666 667 (6-7-2) åºå®é·ã¡ã¢ãªãã¼ã«ã®åæåæ 668 å ± 669 670 åºå®é·ã¡ã¢ãªãã¼ã«åæåãããã¯ä¸ã«çæããåºå®é·ã¡ã¢ãªãã¼ã«ã®åæå 671 æ 672 å ±ã¯ï¼æ¬¡ã®å½¢å¼ã¨ããï¼ 564 *必ず生成 565 static MPFMB _kernel_mpfmb_<固定長メモリプール名>[blkcnt]; 566 567 (6-7-2) 固定長メモリプールの初期化情報 568 569 固定長メモリプール初期化ブロック中に生成する固定長メモリプールの初期化 570 情報は,次の形式とする. 673 571 674 572 { (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 いて述べる.なお,周期ハンドラに必要なメモリ領域はない. 706 601 707 602 CRE_CYC(cycid, { cycatr, exinf, cychdr, cyctim, cycphs }); 708 603 709 (6-8-1) å¨æãã³ãã©ã®åæåæ 710 å ± 711 712 å¨æãã³ãã©åæåãããã¯ä¸ã«çæããå¨æãã³ãã©ã®åæåæ 713 å ±ã¯ï¼æ¬¡ã® 714 å½¢å¼ã¨ããï¼ 604 (6-8-1) 周期ハンドラの初期化情報 605 606 周期ハンドラ初期化ブロック中に生成する周期ハンドラの初期化情報は,次の 607 形式とする. 715 608 716 609 { (cycatr), (intptr_t)(exinf), (cychdr), (cyctim), (cycphs) } 717 610 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 について述べる.なお,アラームハンドラに必要なメモリ領域はない. 743 634 744 635 CRE_ALM(ID almid, { almatr, (intptr_t)(exinf), almhdr }); 745 636 746 (6-9-1) ã¢ã©ã¼ã ãã³ãã©ã®åæåæ 747 å ± 748 749 ã¢ã©ã¼ã ãã³ãã©åæåãããã¯ä¸ã«çæããã¢ã©ã¼ã ãã³ãã©ã®åæåæ 750 å ± 751 ã¯ï¼æ¬¡ã®å½¢å¼ã¨ããï¼ 637 (6-9-1) アラームハンドラの初期化情報 638 639 アラームハンドラ初期化ブロック中に生成するアラームハンドラの初期化情報 640 は,次の形式とする. 752 641 753 642 { (almatr), (exinf), (almhdr) } 754 643 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 ている時に生成すべき情報について述べる. 790 673 791 674 CFG_INT(INTNO intno, { intatr, intpri }); 792 675 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 <設定する割込み要求ラインの数> 801 683 const uint_t _kernel_tnum_intno = TNUM_INTNO; 802 684 803 (7-1-2) å²è¾¼ã¿è¦æ±ã©ã¤ã³åæåãããã¯ã®å®ç¾© 804 805 å²è¾¼ã¿è¦æ±ã©ã¤ã³åæåãããã¯ãçæããï¼å 806 ·ä½çã«ã¯ï¼æ¬¡ã®ãããªè¡ãç 807 æããï¼ 685 (7-1-2) 割込み要求ライン初期化ブロックの定義 686 687 割込み要求ライン初期化ブロックを生成する.具体的には,次のような行を生 688 成する. 808 689 809 690 const 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の初期化情報> 817 695 }; 818 696 819 ãã®ä¸ã®å²è¾¼ã¿è¦æ±ã©ã¤ã³ã®åæåæ 820 å ±ã¯ï¼æ¬¡ã®å½¢å¼ã¨ããï¼ 697 この中の割込み要求ラインの初期化情報は,次の形式とする. 821 698 822 699 { (intno), (intatr), (intpri) } 823 700 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 具体的には,同一の割込み番号に対して割込みサービスルーチンを追加する 860 731 861 732 ATT_ISR({ isratr_1, exinf_1, intno, isr_1, isrpri_1 }); 862 733 ATT_ISR({ isratr_2, exinf_2, intno, isr_2, isrpri_2 }); 863 â¦â¦734 …… 864 735 ATT_ISR({ isratr_n, exinf_n, intno, isr_n, isrpri_n }); 865 736 866 ã¨ããéçAPIã«å¯¾ãã¦ï¼æ¬¡ã®ãããªé¢æ°ãçæããï¼ããã§ï¼isrpri_1ï¼ 867 isrpri_2 ï¼â¦â¦ï¼isrpri_nã¯ï¼å¤ã®å°ããé ã«ä¸¦ã¹æ¿ãããã¦ãããã®ã¨ããï¼868 å¤ãåããã®ã®éã§ã¯ï¼ã·ã¹ãã ã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³ãã¡ã¤ã«ä¸ã§ã®éç 869 API ã®é åºã®éãã«ä¸¦ãã§ãããã®ã¨ããï¼737 という静的APIに対して,次のような関数を生成する.ここで,isrpri_1, 738 isrpri_2,……,isrpri_nは,値の小さい順に並べ替えられているものとする. 739 値が同じものの間では,システムコンフィギュレーションファイル中での静的 740 APIの順序の通りに並んでいるものとする. 870 741 871 742 static void … … 877 748 saved_ipm = i_get_ipm(); 878 749 879 LOG_ISR_ENTER(<intno>); /* ISR1 ã®å¼åºã*/750 LOG_ISR_ENTER(<intno>); /* ISR1の呼出し */ 880 751 isr_1((intptr_t)(exinf_1)); 881 752 LOG_ISR_LEAVE(intno); 882 753 883 if (i_sense_lock()) { /* ISRã®å¼åºãåã®ç¶æ 884 ã«æ»ã */ 754 if (i_sense_lock()) { /* ISRの呼出し前の状態に戻す */ 885 755 i_unlock_cpu(); 886 756 } 887 757 i_set_ipm(saved_ipm); 888 758 889 LOG_ISR_ENTER(<intno>); /* ISR2 ã®å¼åºã*/759 LOG_ISR_ENTER(<intno>); /* ISR2の呼出し */ 890 760 isr_2((intptr_t)(exinf_2)); 891 761 LOG_ISR_LEAVE(intno); 892 762 893 if (i_sense_lock()) { /* ISRã®å¼åºãåã®ç¶æ 894 ã«æ»ã */ 763 if (i_sense_lock()) { /* ISRの呼出し前の状態に戻す */ 895 764 i_unlock_cpu(); 896 765 } 897 766 i_set_ipm(saved_ipm); 898 767 899 â¦â¦900 901 LOG_ISR_ENTER(<intno>); /* ISRn ã®å¼åºã*/768 …… 769 770 LOG_ISR_ENTER(<intno>); /* ISRnの呼出し */ 902 771 isr_n((intptr_t)(exinf_n)); 903 772 LOG_ISR_LEAVE(intno); … … 906 775 } 907 776 908 ããã§ï¼ISRnã®å¼åºãã®å¾ã«å¼åºãåã®ç¶æ 909 ã«æ»ããªãã®ã¯ï¼å²è¾¼ã¿ãã³ãã© 910 ããã®ãªã¿ã¼ã³ã«ããï¼ã«ã¼ãã«ãå 911 ã®ç¶æ 912 ã«æ»ãããã§ããï¼ 913 914 åä¸ã®å²è¾¼ã¿çªå·ã«å¯¾ãã¦è¿½å ãããå²è¾¼ã¿ãµã¼ãã¹ã«ã¼ãã³ã1ã¤ã®ã¿ã®å ´å 915 ã«ã¯ï¼æ¬¡ã®ãããªé¢æ°ãçæããï¼ 777 ここで,ISRnの呼出しの後に呼出し前の状態に戻さないのは,割込みハンドラ 778 からのリターンにより,カーネルが元の状態に戻すためである. 779 780 同一の割込み番号に対して追加された割込みサービスルーチンが1つのみの場合 781 には,次のような関数を生成する. 916 782 917 783 static void … … 925 791 } 926 792 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が含まれているのと同様に処理する. 938 803 939 804 DEF_INH(inhno, { TA_NULL, _kernel_inthdr_<intno> }); 940 805 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 ている時に生成すべき情報について述べる. 973 835 974 836 DEF_INH(inhno, { inhatr, inthdr }); 975 837 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 <定義する割込みハンドラの数> 984 845 const uint_t _kernel_tnum_inhno = TNUM_INHNO; 985 846 986 (7-3-2) å²è¾¼ã¿ãã³ãã©ã®åºå 987 ¥å£å¦ç 988 989 å®ç¾©ããå²è¾¼ã¿ãã³ãã©æ¯ã«ï¼å²è¾¼ã¿ãã³ãã©ã®åºå 990 ¥å£å¦çã«ã¼ãã³ãçæã 991 ãï¼å 992 ·ä½çã«ã¯ï¼æ¬¡ã®ãããªè¡ãçæããï¼ 847 (7-3-2) 割込みハンドラの出入口処理 848 849 定義する割込みハンドラ毎に,割込みハンドラの出入口処理ルーチンを生成す 850 る.具体的には,次のような行を生成する. 993 851 994 852 INTHDR_ENTRY(inhno, inhno_num, inthdr) 995 853 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 する. 1004 861 1005 862 const 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の初期化情報> 1013 867 }; 1014 868 1015 ãã®ä¸ã®å²è¾¼ã¿ãã³ãã©ã®åæåæ 1016 å ±ã¯ï¼æ¬¡ã®å½¢å¼ã¨ããï¼ 869 この中の割込みハンドラの初期化情報は,次の形式とする. 1017 870 1018 871 { (inhno), (inhatr), (FP)(INT_ENTRY(inhno, inthdr)) } 1019 872 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 904 CPU例外に関して生成する情報は,ターゲット毎に定めることができる.ターゲッ 905 ト毎に定めない場合には,以下で述べるターゲットに依存しない標準的な情報 906 を生成する.ターゲット毎に定める場合には,これらの情報は生成されない. 907 908 システムコンフィギュレーションファイル中に,CPU例外ハンドラを定義する 909 静的API「DEF_EXC」が含まれている場合に,CPU例外ハンドラに関する定義を 910 生成する. 911 912 以下では,システムコンフィギュレーションファイルに次の静的APIが含まれ 913 ている時に生成すべき情報について述べる. 1067 914 1068 915 DEF_EXC(excno, { excatr, exchdr }); 1069 916 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例外ハンドラの数> 1078 924 const uint_t _kernel_tnum_excno = TNUM_EXCNO; 1079 925 1080 (8-2) CPUä¾å¤ãã³ãã©ã®åºå 1081 ¥å£å¦ç 1082 1083 å®ç¾©ããCPUä¾å¤ãã³ãã©æ¯ã«ï¼CPUä¾å¤ãã³ãã©ã®åºå 1084 ¥å£å¦çã«ã¼ãã³ãçæ 1085 ããï¼å 1086 ·ä½çã«ã¯ï¼æ¬¡ã®ãããªè¡ãçæããï¼ 926 (8-2) CPU例外ハンドラの出入口処理 927 928 定義するCPU例外ハンドラ毎に,CPU例外ハンドラの出入口処理ルーチンを生成 929 する.具体的には,次のような行を生成する. 1087 930 1088 931 EXCHDR_ENTRY(excno, excno_num, exchdr) 1089 932 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 938 CPU例外ハンドラ初期化ブロックを生成する.具体的には,次のような行を生成 939 する. 1098 940 1099 941 const 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の初期化情報> 1107 946 }; 1108 947 1109 ãã®ä¸ã®CPUä¾å¤ãã³ãã©ã®åæåæ 1110 å ±ã¯ï¼æ¬¡ã®å½¢å¼ã¨ããï¼ 948 この中のCPU例外ハンドラの初期化情報は,次の形式とする. 1111 949 1112 950 { (excno), (excatr), (FP)(EXC_ENTRY(excno, exchdr)) } 1113 951 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 954 CPU例外ハンドラに関するエラー条件は次の通りである. 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 いない場合には,次の行を生成する. 1137 974 1138 975 #ifdef DEFAULT_ISTK … … 1149 986 #endif /* DEFAULT_ISTK */ 1150 987 1151 (9-2) DEF_ICSãããå ´å 1152 1153 以ä¸ã§ã¯ï¼ã·ã¹ãã ã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³ãã¡ã¤ã«ã«æ¬¡ã®éçAPIãå«ã¾ã㦠1154 ããæã«çæãã¹ãæ 1155 å ±ã«ã¤ãã¦è¿°ã¹ãï¼ 988 (9-2) DEF_ICSがある場合 989 990 以下では,システムコンフィギュレーションファイルに次の静的APIが含まれて 991 いる時に生成すべき情報について述べる. 1156 992 1157 993 DEF_ICS({ istksz, istk }); 1158 994 1159 istkãNULLã®å ´åã«ã¯ï¼æå®ããããµã¤ãºã®éã¿ã¹ã¯ã³ã³ããã¹ãç¨ã®ã¹ã¿ã 1160 ã¯é åã確ä¿ãï¼éã¿ã¹ã¯ã³ã³ããã¹ãç¨ã®ã¹ã¿ãã¯é åã®åæåæ 1161 å ±ãçæ 1162 ããï¼å 1163 ·ä½çã«ã¯ï¼ä¸è¨ã®éçAPIã«å¯¾ãã¦ï¼æ¬¡ã®è¡ãçæããï¼ 995 istkがNULLの場合には,指定されたサイズの非タスクコンテキスト用のスタッ 996 ク領域を確保し,非タスクコンテキスト用のスタック領域の初期化情報を生成 997 する.具体的には,上記の静的APIに対して,次の行を生成する. 1164 998 1165 999 static STK_T _kernel_istack[COUNT_STK_T(istksz)]; … … 1167 1001 #define TOPPERS_ISTK _kernel_istack 1168 1002 1169 istkãNULLã§ãªãå ´åã«ã¯ï¼éã¿ã¹ã¯ã³ã³ããã¹ãç¨ã®ã¹ã¿ãã¯é åã®åæå 1170 æ 1171 å ±ãï¼æ¬¡ã®å½¢å¼ã§çæããï¼ 1003 istkがNULLでない場合には,非タスクコンテキスト用のスタック領域の初期化 1004 情報を,次の形式で生成する. 1172 1005 1173 1006 #define TOPPERS_ISTKSZ (istksz) 1174 1007 #define TOPPERS_ISTK (istk) 1175 1008 1176 (9-3) å¤æ°ã®çæ1177 1178 DEF_ICS ã®æç¡ã«ãããï¼æ¬¡ã®å®ç¾©ãçæããï¼1009 (9-3) 変数の生成 1010 1011 DEF_ICSの有無によらず,次の定義を生成する. 1179 1012 1180 1013 const SIZE _kernel_istksz = TOPPERS_ISTKSZ; … … 1185 1018 #endif /* TOPPERS_ISTKPT */ 1186 1019 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 タイムイベント管理に関連して,次の定義を生成する. 1208 1040 1209 1041 TMEVTN _kernel_tmevt_heap[TNUM_TSKID + TNUM_CYCID + TNUM_ALMID]; 1210 1042 1211 (11) åã¢ã¸ã¥ã¼ã«ã®åæåé¢æ°ã®å®ç¾©1212 1213 åã«ã¼ãã«ãªãã¸ã§ã¯ãã®ç®¡çï¼å²è¾¼ã¿ç®¡çï¼CPUä¾å¤ãã³ãã©ç®¡çã®åæ©è½ã 1214 åæåé¢æ°ãé ã«å¼ã³åºãé¢æ°ï¼_kernel_initialize_objectï¼ãçæããï¼æ¬¡ 1215 ã®3ã¤ã®åæåé¢æ°ãé¤ãã¦ã¯ï¼ä½¿ç¨ããªãæ©è½ã®åæåé¢æ°ã¯å¼ã³åºããªãï¼ 1043 (11) 各モジュールの初期化関数の定義 1044 1045 各カーネルオブジェクトの管理,割込み管理,CPU例外ハンドラ管理の各機能を 1046 初期化関数を順に呼び出す関数(_kernel_initialize_object)を生成する.次 1047 の3つの初期化関数を除いては,使用しない機能の初期化関数は呼び出さない. 1216 1048 1217 1049 _kernel_initialize_task … … 1219 1051 _kernel_initialize_exception 1220 1052 1221 ãã¹ã¦ã®æ©è½ã使ã£ãå ´åã«çæãããé¢æ°ã¯æ¬¡ã®éãã§ããï¼ 1053 すべての機能を使った場合に生成される関数は次の通りである. 1222 1054 1223 1055 void … … 1237 1069 } 1238 1070 1239 (12) åæåã«ã¼ãã³ã®å®è¡é¢æ°ã®å®ç¾© 1240 1241 ã·ã¹ãã ã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³ãã¡ã¤ã«ä¸ã«å«ã¾ããåæåã«ã¼ãã³ã追å 1242 ããéçAPIãATT_INIãã«å¯¾ãã¦ï¼è¿½å ããåæåã«ã¼ãã³ãé ã«å¼ã³åºãé¢ 1243 æ°ãçæããï¼å 1244 ·ä½çã«ã¯ï¼ 1071 (12) 初期化ルーチンの実行関数の定義 1072 1073 システムコンフィギュレーションファイル中に含まれる初期化ルーチンを追加 1074 する静的API「ATT_INI」に対して,追加した初期化ルーチンを順に呼び出す関 1075 数を生成する.具体的には, 1245 1076 1246 1077 ATT_INI({ iniatr, exinf, inirtn }); 1247 1078 1248 ã¨ããéçAPIã«å¯¾ãã¦ï¼ 1079 という静的APIに対して, 1249 1080 1250 1081 (inirtn)((intptr_t)(exinf)); 1251 1082 1252 ãå¼ã³åºãé¢æ°ãï¼_kernel_call_inirtnã¨ããååã§çæããï¼åæåã«ã¼ã 1253 ã³ãå¼ã³åºãé åºã¯ï¼ã·ã¹ãã ã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³ãã¡ã¤ã«ä¸ã§ã®éç 1254 API ã®é åºã«ä¸è´ãããï¼1255 1256 ä¾ãã°ï¼ 1083 を呼び出す関数を,_kernel_call_inirtnという名前で生成する.初期化ルーチ 1084 ンを呼び出す順序は,システムコンフィギュレーションファイル中での静的 1085 APIの順序に一致させる. 1086 1087 例えば, 1257 1088 1258 1089 ATT_INI({ TA_NULL, 0, timer_initialize }); 1259 1090 ATT_INI({ TA_NULL, CONSOLE_PORTID, serial_initialize }); 1260 1091 1261 ã¨ãã2ã¤ã®éçAPIããã®é åºã§è¨è¿°ãããæã«çæããé¢æ°ã¯æ¬¡ã®éãã§ã 1262 ãï¼ 1092 という2つの静的APIがこの順序で記述された時に生成する関数は次の通りであ 1093 る. 1263 1094 1264 1095 void … … 1269 1100 } 1270 1101 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 す関数を生成する.具体的には, 1287 1117 1288 1118 ATT_TER({ teratr, exinf, terrtn }); 1289 1119 1290 ã¨ããéçAPIã«å¯¾ãã¦ï¼ 1120 という静的APIに対して, 1291 1121 1292 1122 (terrtn)((intptr_t)(exinf)); 1293 1123 1294 ãå¼ã³åºãé¢æ°ãï¼_kernel_call_terrtnã¨ããååã§çæããï¼çµäºå¦çã«ã¼ 1295 ãã³ãå¼ã³åºãé åºã¯ï¼ã·ã¹ãã ã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³ãã¡ã¤ã«ä¸ã§ã®éç 1296 API ã®éé ã«ä¸è´ãããï¼1297 1298 ä¾ãã°ï¼ 1124 を呼び出す関数を,_kernel_call_terrtnという名前で生成する.終了処理ルー 1125 チンを呼び出す順序は,システムコンフィギュレーションファイル中での静的 1126 APIの逆順に一致させる. 1127 1128 例えば, 1299 1129 1300 1130 ATT_TER({ TA_NULL, 0, timer_terminate }); 1301 1131 ATT_TER({ TA_NULL, CONSOLE_PORTID, serial_terminate }); 1302 1132 1303 ã¨ãã2ã¤ã®éçAPIããã®é åºã§è¨è¿°ãããæã«çæããé¢æ°ã¯æ¬¡ã®éãã§ã 1304 ãï¼ 1133 という2つの静的APIがこの順序で記述された時に生成する関数は次の通りであ 1134 る. 1305 1135 1306 1136 void … … 1311 1141 } 1312 1142 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 以上 -
Property svn:mime-type
changed from
Note:
See TracChangeset
for help on using the changeset viewer.