Changeset 318 for asp3_gr_sakura/trunk/kernel/kernel.trb
- Timestamp:
- Aug 3, 2017, 10:46:41 PM (7 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
asp3_gr_sakura/trunk/kernel/kernel.trb
-
Property svn:mime-type
changed from
text/x-ruby
totext/x-ruby; charset=UTF-8
r317 r318 9 9 # Graduate School of Information Science, Nagoya Univ., JAPAN 10 10 # 11 # ä¸è¨èä½æ¨©è 12 ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ 13 # ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ã使ç¨ã»è¤è£½ã»æ¹ 14 # å¤ã»åé 15 å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼ 16 # (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½ 17 # 権表示ï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼ 18 # ã¹ã³ã¼ãä¸ã«å«ã¾ãã¦ãããã¨ï¼ 19 # (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 20 # ç¨ã§ããå½¢ã§åé 21 å¸ããå ´åã«ã¯ï¼åé 22 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨ 23 # è 24 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ 25 # ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 26 # (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 27 # ç¨ã§ããªãå½¢ã§åé 28 å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã 29 # ã¨ï¼ 30 # (a) åé 31 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨è 32 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è 33 # ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 34 # (b) åé 35 å¸ã®å½¢æ 36 ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSããã¸ã§ã¯ãã« 37 # å ±åãããã¨ï¼ 38 # (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ 39 # 害ãããï¼ä¸è¨èä½æ¨©è 40 ããã³TOPPERSããã¸ã§ã¯ããå 41 責ãããã¨ï¼ 42 # ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç 43 # ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è 44 ããã³TOPPERSããã¸ã§ã¯ãã 45 # å 46 責ãããã¨ï¼ 11 # 上記著作権者は,以下の(1)~(4)の条件を満たす場合に限り,本ソフトウェ 12 # ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改 13 # 変・再配布(以下,利用と呼ぶ)することを無償で許諾する. 14 # (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作 15 # 権表示,この利用条件および下記の無保証規定が,そのままの形でソー 16 # スコード中に含まれていること. 17 # (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使 18 # 用できる形で再配布する場合には,再配布に伴うドキュメント(利用 19 # 者マニュアルなど)に,上記の著作権表示,この利用条件および下記 20 # の無保証規定を掲載すること. 21 # (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使 22 # 用できない形で再配布する場合には,次のいずれかの条件を満たすこ 23 # と. 24 # (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著 25 # 作権表示,この利用条件および下記の無保証規定を掲載すること. 26 # (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに 27 # 報告すること. 28 # (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損 29 # 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること. 30 # また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理 31 # 由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを 32 # 免責すること. 47 33 # 48 # æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è 49 ã 50 # ãã³TOPPERSããã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç 51 # ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ 52 # ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ害ã«é¢ãã¦ãï¼ã 53 # ã®è²¬ä»»ãè² ããªãï¼ 34 # 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 35 # よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的 36 # に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ 37 # アの利用により直接的または間接的に生じたいかなる損害に関しても,そ 38 # の責任を負わない. 54 39 # 55 # $Id : kernel.trb 716 2016-03-31 06:16:23Z ertl-hiro$40 # $Id$ 56 41 # 57 42 58 43 # 59 # ã³ã³ãã£ã®ã¥ã¬ã¼ã¿ã®ãã¹2ã®çæã¹ã¯ãªãã60 # 61 62 # 63 # ã¿ã¤ã ã¹ã¿ã³ããã¡ã¤ã«ã®æå®44 # コンフィギュレータのパス2の生成スクリプト 45 # 46 47 # 48 # タイムスタンプファイルの指定 64 49 # 65 50 $timeStampFileName = "kernel_cfg.timestamp" 66 51 67 52 # 68 # kernel_cfg.hã®å 69 é é¨åã®çæ 53 # kernel_cfg.hの先頭部分の生成 70 54 # 71 55 $kernelCfgH = GenFile.new("kernel_cfg.h") … … 77 61 78 62 # 79 # kernel_cfg.cã®å 80 é é¨åã®çæ 63 # kernel_cfg.cの先頭部分の生成 81 64 # 82 65 $kernelCfgC = GenFile.new("kernel_cfg.c") … … 92 75 93 76 # 94 # ã¤ã³ã¯ã«ã¼ããã£ã¬ã¯ãã£ãï¼#includeï¼77 # インクルードディレクティブ(#include) 95 78 # 96 79 $kernelCfgC.comment_header("Include Directives") … … 101 84 102 85 # 103 # ã¹ã¿ãã¯é åã®ç¢ºä¿é¢æ° 104 # 105 # ã¹ã¿ãã¯é åã®å®ç¾©åã¨ï¼ã¹ã¿ãã¯é åã®ãµã¤ãºè¨è¿°ãé 106 åã§è¿ãï¼ 86 # スタック領域の確保関数 87 # 88 # スタック領域の定義分と,スタック領域のサイズ記述を配列で返す. 107 89 # 108 90 unless defined? AllocStack() 109 91 def AllocStack(stack, size) 110 # 大ããæ¹ã«ä¸¸ãããµã¤ãºã§ç¢ºä¿ããï¼»NGKI1050][NGKI3220ï¼½92 # 大きい方に丸めたサイズで確保する[NGKI1050][NGKI3220] 111 93 $kernelCfgC.add("static STK_T #{stack}[COUNT_STK_T(#{size})];") 112 94 return("ROUND_STK_T(#{size})") … … 115 97 116 98 # 117 # ã«ã¼ãã«ãªãã¸ã§ã¯ãã«é¢ããæ 118 å ±ã®çæï¼ä»®æ³ã¯ã©ã¹ï¼ 99 # カーネルオブジェクトに関する情報の生成(仮想クラス) 119 100 # 120 101 class KernelObject … … 131 112 132 113 def generate() 133 # AID_@OBJ ã®å¦ç114 # AID_@OBJの処理 134 115 numAutoObjid = 0 135 116 $cfgData["AID_#{@OBJ}".to_sym].each do |key, params| … … 138 119 numObjid = $cfgData[@api].size + numAutoObjid 139 120 140 # kernel_cfg.h ã®çæ121 # kernel_cfg.hの生成 141 122 $kernelCfgH.add("#define TNUM_#{@OBJ}ID\t#{numObjid}") 142 123 143 # ãªãã¸ã§ã¯ãã®IDçªå·ã®ãã¯ãå®ç¾©ã®çæ124 # オブジェクトのID番号のマクロ定義の生成 144 125 $cfgData[@api].sort.each do |key, params| 145 126 $kernelCfgH.add("#define #{params[@objid]}\t#{params[@objid].val}") … … 147 128 $kernelCfgH.add() 148 129 149 # ãªãã¸ã§ã¯ãã®IDçªå·ãä¿æããå¤æ°130 # オブジェクトのID番号を保持する変数 150 131 if $USE_EXTERNAL_ID 151 132 $cfgData[@api].sort.each do |key, params| … … 156 137 end 157 138 158 # éçã«çæããããªãã¸ã§ã¯ãã®æ°139 # 静的に生成されたオブジェクトの数 159 140 $kernelCfgC.add("#define TNUM_S#{@OBJ}ID\t#{$cfgData[@api].size}") 160 141 161 # ãªãã¸ã§ã¯ãIDçªå·ã®æ大å¤142 # オブジェクトID番号の最大値 162 143 $kernelCfgC.add("const ID _kernel_tmax_#{@obj}id" \ 163 144 " = (TMIN_#{@OBJ}ID + TNUM_#{@OBJ}ID - 1);") … … 165 146 " = (TMIN_#{@OBJ}ID + TNUM_S#{@OBJ}ID - 1);") 166 147 167 # ãã¼ã¿æ§é148 # データ構造 168 149 if $cfgData[@api].size > 0 169 # äºåæºåï¼ã¨ã©ã¼ãã§ãã¯ï¼ã¡ã¢ãªé åã®çæï¼150 # 事前準備(エラーチェック,メモリ領域の生成) 170 151 $cfgData[@api].sort.each do |key, params| 171 152 prepare(key, params) 172 153 end 173 154 174 # ãªãã¸ã§ã¯ãå 175 ¨ä½ã«å¯¾ãã¦å¿ 176 è¦ãªã¡ã¢ãªé åã®çæï¼ãªãã·ã§ã³ï¼ 155 # オブジェクト全体に対して必要なメモリ領域の生成(オプション) 177 156 if respond_to?(:generateData) 178 157 generateData() 179 158 end 180 159 181 # ãªãã¸ã§ã¯ãåæåãããã¯ã®çæ160 # オブジェクト初期化ブロックの生成 182 161 $kernelCfgC.add("const #{@OBJ_S}INIB _kernel_#{@obj_s}inib_table" \ 183 162 "[TNUM_S#{@OBJ}ID] = {") … … 193 172 end 194 173 195 # åççæãªãã¸ã§ã¯ãç¨ã®ãªãã¸ã§ã¯ãåæåãããã¯174 # 動的生成オブジェクト用のオブジェクト初期化ブロック 196 175 @inibList.each do |type, array| 197 176 if numAutoObjid > 0 … … 203 182 204 183 if numObjid > 0 205 # ãªãã¸ã§ã¯ã管çãããã¯ã®çæ184 # オブジェクト管理ブロックの生成 206 185 $kernelCfgC.add2("#{@OBJ_S}CB _kernel_#{@obj_s}cb_table" \ 207 186 "[TNUM_#{@OBJ}ID];") 208 187 209 # ãªãã¸ã§ã¯ãåæåé¢æ°ã®è¿½å188 # オブジェクト初期化関数の追加 210 189 $initializeFunctions.push("_kernel_initialize_#{@object}();") 211 190 else … … 217 196 218 197 # 219 # éç¥ãã³ãã©ã®çæé¢æ°198 # 通知ハンドラの生成関数 220 199 # 221 200 def generateNotifyHandler(key, params, objid) 222 # ãã©ã¡ã¼ã¿ãå¤æ°ã«æ ¼ç´201 # パラメータを変数に格納 223 202 nfymode = params[:nfymode] 224 203 nfymode1 = nfymode & 0x0f … … 227 206 par2 = params[:par2] 228 207 229 # éç¥å¦çã®ãã©ã¡ã¼ã¿æ°ã«ããè£æ£å¦ç208 # 通知処理のパラメータ数による補正処理 230 209 if nfymode == $TNFY_HANDLER || nfymode1 == $TNFY_SETVAR \ 231 210 || nfymode1 == $TNFY_SETFLG \ 232 211 || nfymode1 == $TNFY_SNDDTQ 233 # éç¥å¦çã®ãã©ã¡ã¼ã¿ã2ã¤ã®å ´å212 # 通知処理のパラメータが2つの場合 234 213 numpar = 2 235 214 epar1 = params[:par3] 236 215 epar2 = params[:par4] 237 216 else 238 # éç¥å¦çã®ãã©ã¡ã¼ã¿ã1ã¤ã®å ´å217 # 通知処理のパラメータが1つの場合 239 218 numpar = 1 240 219 epar1 = params[:par2] … … 242 221 end 243 222 244 # ãã©ã¡ã¼ã¿æ°ã®ãã§ãã¯223 # パラメータ数のチェック 245 224 if (numpar == 2 && par2.nil?) || (nfymode2 != 0 && epar1.nil?) \ 246 225 || (nfymode2 == $TENFY_SETFLG && epar2.nil?) 247 # ãã©ã¡ã¼ã¿ã足ããªãå ´å226 # パラメータが足りない場合 248 227 error_api(params, "too few parameters for nfymode `#{nfymode}' " \ 249 228 "in %apiname of %#{objid}") 250 229 elsif (nfymode2 == 0 && !epar1.nil?) \ 251 230 || (nfymode2 != $TENFY_SETFLG && !epar2.nil?) 252 # ãã©ã¡ã¼ã¿ãå¤ãããå ´å231 # パラメータが多すぎる場合 253 232 error_api(params, "too many parameters for nfymode `#{nfymode}' " \ 254 233 "in %apiname of %#{objid}") 255 234 elsif nfymode == $TNFY_HANDLER 256 # ã¿ã¤ã ã¤ãã³ããã³ãã©ã®å¼åºã235 # タイムイベントハンドラの呼出し 257 236 funcname = "(NFYHDR)(#{par2})" 258 237 else 259 # éç¥ãã³ãã©ã®é¢æ°å238 # 通知ハンドラの関数名 260 239 funcname = "_kernel_nfyhdr_#{params[objid]}" 261 240 262 # ã¨ã©ã¼éç¥ã®ããã®å¤æ°ã®ã¢ãã¬ã¹ã¨ãªãã¸ã§ã¯ãIDãæ ¼ç´ãã 263 # å¤æ°ã®çæï¼ã¨ã©ã¼ãã§ãã¯ã®ããã«å¿ 264 è¦ï¼ 241 # エラー通知のための変数のアドレスとオブジェクトIDを格納する 242 # 変数の生成(エラーチェックのために必要) 265 243 if nfymode2 == $TENFY_SETVAR || nfymode2 == $TENFY_INCVAR 266 244 $kernelCfgC.add2("intptr_t *const #{funcname}_p_evar =" \ … … 276 254 end 277 255 278 # é¢æ°ã®å 279 é é¨åã®çæ 256 # 関数の先頭部分の生成 280 257 $kernelCfgC.add("static void") 281 258 $kernelCfgC.add("#{funcname}(intptr_t exinf)") … … 283 260 284 261 if nfymode2 == 0 285 # ã¨ã©ã¼éç¥ããªãå ´å262 # エラー通知がない場合 286 263 errorCode = "(void) " 287 264 else 288 # ã¨ã©ã¼éç¥ãããå ´å265 # エラー通知がある場合 289 266 $kernelCfgC.add2("\tER\tercd;") 290 267 errorCode = "ercd = " 291 268 end 292 269 293 # ã¤ãã³ãéç¥å¦çã®å¦ç270 # イベント通知処理の処理 294 271 if nfymode1 == $TNFY_SETVAR && nfymode2 == 0 295 # å¤æ°ã®è¨å®272 # 変数の設定 296 273 $kernelCfgC.add("\t*((intptr_t *) exinf) = (#{par2});") 297 274 elsif nfymode1 == $TNFY_INCVAR && nfymode2 == 0 298 # å¤æ°ã®ã¤ã³ã¯ãªã¡ã³ã275 # 変数のインクリメント 299 276 $kernelCfgC.add("\t(void) loc_cpu();") 300 277 $kernelCfgC.add("\t*((intptr_t *) exinf) += 1;") 301 278 $kernelCfgC.add("\t(void) unl_cpu();") 302 279 elsif nfymode1 == $TNFY_ACTTSK 303 # ã¿ã¹ã¯ã®èµ·å280 # タスクの起動 304 281 $kernelCfgC.add("\t#{errorCode}act_tsk((ID) exinf);") 305 282 elsif nfymode1 == $TNFY_WUPTSK 306 # ã¿ã¹ã¯ã®èµ·åº283 # タスクの起床 307 284 $kernelCfgC.add("\t#{errorCode}wup_tsk((ID) exinf);") 308 285 elsif nfymode1 == $TNFY_SIGSEM 309 # ã»ããã©ã®è¿å´286 # セマフォの返却 310 287 $kernelCfgC.add("\t#{errorCode}sig_sem((ID) exinf);") 311 288 elsif nfymode1 == $TNFY_SETFLG 312 # ã¤ãã³ããã©ã°ã®ã»ãã289 # イベントフラグのセット 313 290 $kernelCfgC.add("\t#{errorCode}set_flg(((ID) exinf), #{par2});") 314 291 elsif nfymode1 == $TNFY_SNDDTQ 315 # ãã¼ã¿ãã¥ã¼ã¸ã®éä¿¡292 # データキューへの送信 316 293 $kernelCfgC.add("\t#{errorCode}psnd_dtq(((ID) exinf), #{par2});") 317 294 else … … 320 297 321 298 if nfymode2 != 0 322 # ã¨ã©ã¼éç¥å¦çã®å¦ç299 # エラー通知処理の処理 323 300 $kernelCfgC.add("\tif (ercd != E_OK) {") 324 301 325 302 326 303 if nfymode2 == $TENFY_SETVAR 327 # å¤æ°ã®è¨å®304 # 変数の設定 328 305 $kernelCfgC.add("\t\t*#{funcname}_p_evar = (intptr_t) ercd;") 329 306 elsif nfymode2 == $TENFY_INCVAR 330 # å¤æ°ã®ã¤ã³ã¯ãªã¡ã³ã307 # 変数のインクリメント 331 308 $kernelCfgC.add("\t\t(void) loc_cpu();") 332 309 $kernelCfgC.add("\t\t*#{funcname}_p_evar += 1;") 333 310 $kernelCfgC.add("\t\t(void) unl_cpu();") 334 311 elsif nfymode2 == $TENFY_ACTTSK 335 # ã¿ã¹ã¯ã®èµ·å312 # タスクの起動 336 313 $kernelCfgC.add("\t\t(void) act_tsk(#{funcname}_etskid);") 337 314 elsif nfymode2 == $TENFY_WUPTSK 338 # ã¿ã¹ã¯ã®èµ·åº315 # タスクの起床 339 316 $kernelCfgC.add("\t\t(void) wup_tsk(#{funcname}_etskid);") 340 317 elsif nfymode2 == $TENFY_SIGSEM 341 # ã»ããã©ã®è¿å´318 # セマフォの返却 342 319 $kernelCfgC.add("\t\t(void) sig_sem(#{funcname}_esemid);") 343 320 elsif nfymode2 == $TENFY_SETFLG 344 # ã¤ãã³ããã©ã°ã®ã»ãã321 # イベントフラグのセット 345 322 $kernelCfgC.add("\t\t(void) set_flg(#{funcname}_eflgid, #{epar2});") 346 323 elsif nfymode2 == $TENFY_SNDDTQ 347 # ãã¼ã¿ãã¥ã¼ã¸ã®éä¿¡324 # データキューへの送信 348 325 $kernelCfgC.add("\t\t(void) psnd_dtq(#{funcname}_edtqid," \ 349 326 " (intptr_t) ercd);") … … 354 331 end 355 332 356 # é¢æ°ã®æ«å°¾é¨åã®çæ333 # 関数の末尾部分の生成 357 334 $kernelCfgC.add2("}") 358 335 end … … 361 338 362 339 # 363 # åæ©è½ã¢ã¸ã¥ã¼ã«ã®ã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³340 # 各機能モジュールのコンフィギュレーション 364 341 # 365 342 $initializeFunctions = [] … … 378 355 379 356 # 380 # éã¿ã¹ã¯ã³ã³ããã¹ãç¨ã®ã¹ã¿ãã¯é å357 # 非タスクコンテキスト用のスタック領域 381 358 # 382 359 $kernelCfgC.comment_header("Stack Area for Non-task Context") 383 360 384 361 if $cfgData[:DEF_ICS].size == 0 385 # DEF_ICS ããªãå ´åã®ããã©ã«ãå¤ã®è¨å®362 # DEF_ICSがない場合のデフォルト値の設定 386 363 if $DEFAULT_ISTK.nil? 387 # ã¹ã¿ãã¯é åã®èªåå²ä»ã364 # スタック領域の自動割付け 388 365 istksz = AllocStack("_kernel_istack", "DEFAULT_ISTKSZ") 389 366 istk = "_kernel_istack" … … 393 370 end 394 371 else 395 # éçAPIãDEF_ICSããè¤æ°ããï¼E_OBJï¼ï¼»NGKI3216ï¼½372 # 静的API「DEF_ICS」が複数ある(E_OBJ)[NGKI3216] 396 373 if $cfgData[:DEF_ICS].size > 1 397 374 error("E_OBJ: too many DEF_ICS") 398 375 end 399 376 400 # DEF_ICS ãããå ´åã®å¦ç377 # DEF_ICSがある場合の処理 401 378 params = $cfgData[:DEF_ICS][1] 402 379 403 # ãã©ã¡ã¼ã¿ãçç¥ãããæã®ããã©ã«ãå¤ã®è¨å®380 # パラメータが省略された時のデフォルト値の設定 404 381 params[:istk] ||= "NULL" 405 382 406 # istksz ãã¿ã¼ã²ããå®ç¾©ã®æå°å¤ï¼TARGET_MIN_ISTKSZï¼æªå®ç¾©ã®å ´åã¯1ï¼407 # ãããå°ããå ´åï¼E_PARï¼ï¼»NGKI3254ï¼½383 # istkszがターゲット定義の最小値(TARGET_MIN_ISTKSZ,未定義の場合は1) 384 # よりも小さい場合(E_PAR)[NGKI3254] 408 385 if params[:istksz] < $TARGET_MIN_ISTKSZ 409 386 error_wrong("E_PAR", params, :istksz, "too small") … … 411 388 412 389 if params[:istk] == "NULL" 413 # ã¹ã¿ãã¯é åã®èªåå²ä»ã390 # スタック領域の自動割付け 414 391 istksz = AllocStack("_kernel_istack", params[:istksz]) 415 392 istk = "_kernel_istack" 416 393 else 417 # istksz ãã¹ã¿ãã¯é åã®ãµã¤ãºã¨ãã¦æ£ãããªãå ´åï¼E_PARï¼ï¼»NGKI3222ï¼½394 # istkszがスタック領域のサイズとして正しくない場合(E_PAR)[NGKI3222] 418 395 if (params[:istksz] & ($CHECK_STKSZ_ALIGN - 1)) != 0 419 396 error_wrong("E_PAR", params, :istksz, "not aligned") … … 435 412 436 413 # 437 # ã«ã¼ãã«ãå²ãä»ããã¡ã¢ãªé å414 # カーネルが割り付けるメモリ領域 438 415 # 439 416 $kernelCfgC.comment_header("Memory Area Allocated by Kernel") 440 417 441 418 if $cfgData[:DEF_KMM].size == 0 442 # DEF_KMM ããªãå ´åã®ããã©ã«ãå¤ã®è¨å®419 # DEF_KMMがない場合のデフォルト値の設定 443 420 kmmsz = "0" 444 421 kmm = "NULL" 445 422 else 446 # éçAPIãDEF_KMMããè¤æ°ããï¼E_OBJï¼423 # 静的API「DEF_KMM」が複数ある(E_OBJ) 447 424 if ($cfgData[:DEF_KMM].size > 1) 448 425 error("E_OBJ: too many DEF_KMM") 449 426 end 450 427 451 # DEF_KMM ãããå ´åã®å¦ç428 # DEF_KMMがある場合の処理 452 429 params = $cfgData[:DEF_KMM][1] 453 430 454 # ãã©ã¡ã¼ã¿ãçç¥ãããæã®ããã©ã«ãå¤ã®è¨å®431 # パラメータが省略された時のデフォルト値の設定 455 432 params[:kmm] ||= "NULL" 456 433 457 # kmmsz ã0ã®å ´åï¼E_PARï¼434 # kmmszが0の場合(E_PAR) 458 435 if params[:kmmsz] == 0 459 436 error_wrong("E_PAR", params, :kmmsz, "zero") … … 461 438 462 439 if params[:kmm] == "NULL" 463 # ã«ã¼ãã«ãå²ãä»ããã¡ã¢ãªé åã®èªåå²ä»ã440 # カーネルが割り付けるメモリ領域の自動割付け 464 441 $kernelCfgC.add("static MB_T _kernel_memory" \ 465 442 "[TOPPERS_COUNT_SZ(#{params[:kmmsz]}, sizeof(MB_T))];") … … 467 444 kmm = "_kernel_memory" 468 445 else 469 # kmmsz ãã«ã¼ãã«ãå²ãä»ããã¡ã¢ãªé åã®ãµã¤ãºã¨ãã¦æ£ãããªãå ´å470 # ï¼E_PARï¼446 # kmmszがカーネルが割り付けるメモリ領域のサイズとして正しくない場合 447 # (E_PAR) 471 448 if (params[:kmmsz] & ($CHECK_MB_ALIGN - 1)) != 0 472 449 error_wrong("E_PAR", params, :kmmsz, "not aligned") … … 484 461 485 462 # 486 # ã¿ã¤ã ã¤ãã³ã管ç463 # タイムイベント管理 487 464 # 488 465 $kernelCfgC.comment_header("Time Event Management") … … 492 469 493 470 # 494 # åã¢ã¸ã¥ã¼ã«ã®åæåé¢æ°471 # 各モジュールの初期化関数 495 472 # 496 473 $kernelCfgC.comment_header("Module Initialization Function") … … 506 483 507 484 # 508 # åæåã«ã¼ãã³æ©è½485 # 初期化ルーチン機能 509 486 # 510 487 $kernelCfgC.comment_header("Initialization Routine") 511 488 512 # ã¨ã©ã¼ãã§ãã¯489 # エラーチェック 513 490 $cfgData[:ATT_INI].each do |key, params| 514 # iniatr ãç¡å¹ã®å ´åï¼E_RSATRï¼ï¼»NGKI3241ï¼½515 # ï¼TA_NULLã§ãªãå ´åï¼491 # iniatrが無効の場合(E_RSATR)[NGKI3241] 492 #(TA_NULLでない場合) 516 493 if (params[:iniatr] != $TA_NULL) 517 494 error_illegal_sym("E_RSATR", params, :iniatr, :inirtn) … … 519 496 end 520 497 521 # åæåã«ã¼ãã³ã®å®è¡é¢æ°ã®çæ498 # 初期化ルーチンの実行関数の生成 522 499 $kernelCfgC.append(<<EOS) 523 500 void … … 532 509 533 510 # 534 # çµäºå¦çã«ã¼ãã³æ©è½511 # 終了処理ルーチン機能 535 512 # 536 513 $kernelCfgC.comment_header("Termination Routine") 537 514 538 # ã¨ã©ã¼ãã§ãã¯515 # エラーチェック 539 516 $cfgData[:ATT_TER].each do |key, params| 540 # teratr ãç¡å¹ã®å ´åï¼E_RSATRï¼ï¼»NGKI3248ï¼½541 # ï¼TA_NULLã§ãªãå ´åï¼517 # teratrが無効の場合(E_RSATR)[NGKI3248] 518 #(TA_NULLでない場合) 542 519 if (params[:teratr] != $TA_NULL) 543 520 error_illegal_sym("E_RSATR", params, :teratr, :terrtn) … … 545 522 end 546 523 547 # çµäºå¦çã«ã¼ãã³ã®å®è¡é¢æ°ã®çæ524 # 終了処理ルーチンの実行関数の生成 548 525 $kernelCfgC.append(<<EOS) 549 526 void … … 558 535 559 536 # 560 # kernel_cfg.h ã®æ«å°¾é¨åã®çæ537 # kernel_cfg.hの末尾部分の生成 561 538 # 562 539 $kernelCfgH.append(<<EOS) -
Property svn:mime-type
changed from
Note:
See TracChangeset
for help on using the changeset viewer.