Changeset 389 for azure_iot_hub/trunk/asp3_dcre/kernel/kernel.trb
- Timestamp:
- May 22, 2019, 10:03:37 PM (5 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
azure_iot_hub/trunk/asp3_dcre/kernel/kernel.trb
-
Property svn:mime-type
changed from
text/x-ruby
totext/x-ruby;charset=UTF-8
r388 r389 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 40 # $Id$ … … 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, section) 110 # 大ããæ¹ã«ä¸¸ãããµã¤ãºã§ç¢ºä¿ããï¼»NGKI1050][NGKI3220ï¼½92 # 大きい方に丸めたサイズで確保する[NGKI1050][NGKI3220] 111 93 $kernelCfgC.add("/*static*/ STK_T __attribute__((section(\"#{section}\"),aligned(16))) #{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 = [] … … 377 354 378 355 # 379 # éã¿ã¹ã¯ã³ã³ããã¹ãç¨ã®ã¹ã¿ãã¯é å356 # 非タスクコンテキスト用のスタック領域 380 357 # 381 358 $kernelCfgC.comment_header("Stack Area for Non-task Context") 382 359 383 360 if $cfgData[:DEF_ICS].size == 0 384 # DEF_ICS ããªãå ´åã®ããã©ã«ãå¤ã®è¨å®361 # DEF_ICSがない場合のデフォルト値の設定 385 362 if $DEFAULT_ISTK.nil? 386 # ã¹ã¿ãã¯é åã®èªåå²ä»ã363 # スタック領域の自動割付け 387 364 istksz = AllocStack("_kernel_istack", "DEFAULT_ISTKSZ", "SI") 388 365 istk = "_kernel_istack" … … 392 369 end 393 370 else 394 # éçAPIãDEF_ICSããè¤æ°ããï¼E_OBJï¼ï¼»NGKI3216ï¼½371 # 静的API「DEF_ICS」が複数ある(E_OBJ)[NGKI3216] 395 372 if $cfgData[:DEF_ICS].size > 1 396 373 error("E_OBJ: too many DEF_ICS") 397 374 end 398 375 399 # DEF_ICS ãããå ´åã®å¦ç376 # DEF_ICSがある場合の処理 400 377 params = $cfgData[:DEF_ICS][1] 401 378 402 # ãã©ã¡ã¼ã¿ãçç¥ãããæã®ããã©ã«ãå¤ã®è¨å®379 # パラメータが省略された時のデフォルト値の設定 403 380 params[:istk] ||= "NULL" 404 381 405 # istksz ãã¿ã¼ã²ããå®ç¾©ã®æå°å¤ï¼TARGET_MIN_ISTKSZï¼æªå®ç¾©ã®å ´åã¯1ï¼406 # ãããå°ããå ´åï¼E_PARï¼ï¼»NGKI3254ï¼½382 # istkszがターゲット定義の最小値(TARGET_MIN_ISTKSZ,未定義の場合は1) 383 # よりも小さい場合(E_PAR)[NGKI3254] 407 384 if params[:istksz] < $TARGET_MIN_ISTKSZ 408 385 error_wrong("E_PAR", params, :istksz, "too small") … … 410 387 411 388 if params[:istk] == "NULL" 412 # ã¹ã¿ãã¯é åã®èªåå²ä»ã389 # スタック領域の自動割付け 413 390 istksz = AllocStack("_kernel_istack", params[:istksz], "SI") 414 391 istk = "_kernel_istack" 415 392 else 416 # istksz ãã¹ã¿ãã¯é åã®ãµã¤ãºã¨ãã¦æ£ãããªãå ´åï¼E_PARï¼ï¼»NGKI3222ï¼½393 # istkszがスタック領域のサイズとして正しくない場合(E_PAR)[NGKI3222] 417 394 if (params[:istksz] & ($CHECK_STKSZ_ALIGN - 1)) != 0 418 395 error_wrong("E_PAR", params, :istksz, "not aligned") … … 434 411 435 412 # 436 # ã«ã¼ãã«ãå²ãä»ããã¡ã¢ãªé å413 # カーネルが割り付けるメモリ領域 437 414 # 438 415 $kernelCfgC.comment_header("Memory Area Allocated by Kernel") 439 416 440 417 if $cfgData[:DEF_KMM].size == 0 441 # DEF_KMM ããªãå ´åã®ããã©ã«ãå¤ã®è¨å®418 # DEF_KMMがない場合のデフォルト値の設定 442 419 kmmsz = "0" 443 420 kmm = "NULL" 444 421 else 445 # éçAPIãDEF_KMMããè¤æ°ããï¼E_OBJï¼422 # 静的API「DEF_KMM」が複数ある(E_OBJ) 446 423 if ($cfgData[:DEF_KMM].size > 1) 447 424 error("E_OBJ: too many DEF_KMM") 448 425 end 449 426 450 # DEF_KMM ãããå ´åã®å¦ç427 # DEF_KMMがある場合の処理 451 428 params = $cfgData[:DEF_KMM][1] 452 429 453 # ãã©ã¡ã¼ã¿ãçç¥ãããæã®ããã©ã«ãå¤ã®è¨å®430 # パラメータが省略された時のデフォルト値の設定 454 431 params[:kmm] ||= "NULL" 455 432 456 # kmmsz ã0ã®å ´åï¼E_PARï¼433 # kmmszが0の場合(E_PAR) 457 434 if params[:kmmsz] == 0 458 435 error_wrong("E_PAR", params, :kmmsz, "zero") … … 460 437 461 438 if params[:kmm] == "NULL" 462 # ã«ã¼ãã«ãå²ãä»ããã¡ã¢ãªé åã®èªåå²ä»ã439 # カーネルが割り付けるメモリ領域の自動割付け 463 440 $kernelCfgC.add("static MB_T _kernel_memory" \ 464 441 "[TOPPERS_COUNT_SZ(#{params[:kmmsz]}, sizeof(MB_T))];") … … 466 443 kmm = "_kernel_memory" 467 444 else 468 # kmmsz ãã«ã¼ãã«ãå²ãä»ããã¡ã¢ãªé åã®ãµã¤ãºã¨ãã¦æ£ãããªãå ´å469 # ï¼E_PARï¼445 # kmmszがカーネルが割り付けるメモリ領域のサイズとして正しくない場合 446 # (E_PAR) 470 447 if (params[:kmmsz] & ($CHECK_MB_ALIGN - 1)) != 0 471 448 error_wrong("E_PAR", params, :kmmsz, "not aligned") … … 483 460 484 461 # 485 # ã¿ã¤ã ã¤ãã³ã管ç462 # タイムイベント管理 486 463 # 487 464 $kernelCfgC.comment_header("Time Event Management") … … 491 468 492 469 # 493 # åã¢ã¸ã¥ã¼ã«ã®åæåé¢æ°470 # 各モジュールの初期化関数 494 471 # 495 472 $kernelCfgC.comment_header("Module Initialization Function") … … 505 482 506 483 # 507 # åæåã«ã¼ãã³æ©è½484 # 初期化ルーチン機能 508 485 # 509 486 $kernelCfgC.comment_header("Initialization Routine") 510 487 511 # ã¨ã©ã¼ãã§ãã¯488 # エラーチェック 512 489 $cfgData[:ATT_INI].each do |key, params| 513 # iniatr ãç¡å¹ã®å ´åï¼E_RSATRï¼ï¼»NGKI3241ï¼½514 # ï¼TA_NULLã§ãªãå ´åï¼490 # iniatrが無効の場合(E_RSATR)[NGKI3241] 491 #(TA_NULLでない場合) 515 492 if (params[:iniatr] != $TA_NULL) 516 493 error_illegal_sym("E_RSATR", params, :iniatr, :inirtn) … … 518 495 end 519 496 520 # åæåã«ã¼ãã³ã®å®è¡é¢æ°ã®çæ497 # 初期化ルーチンの実行関数の生成 521 498 $kernelCfgC.append(<<EOS) 522 499 void … … 531 508 532 509 # 533 # çµäºå¦çã«ã¼ãã³æ©è½510 # 終了処理ルーチン機能 534 511 # 535 512 $kernelCfgC.comment_header("Termination Routine") 536 513 537 # ã¨ã©ã¼ãã§ãã¯514 # エラーチェック 538 515 $cfgData[:ATT_TER].each do |key, params| 539 # teratr ãç¡å¹ã®å ´åï¼E_RSATRï¼ï¼»NGKI3248ï¼½540 # ï¼TA_NULLã§ãªãå ´åï¼516 # teratrが無効の場合(E_RSATR)[NGKI3248] 517 #(TA_NULLでない場合) 541 518 if (params[:teratr] != $TA_NULL) 542 519 error_illegal_sym("E_RSATR", params, :teratr, :terrtn) … … 544 521 end 545 522 546 # çµäºå¦çã«ã¼ãã³ã®å®è¡é¢æ°ã®çæ523 # 終了処理ルーチンの実行関数の生成 547 524 $kernelCfgC.append(<<EOS) 548 525 void … … 557 534 558 535 # 559 # kernel_cfg.h ã®æ«å°¾é¨åã®çæ536 # kernel_cfg.hの末尾部分の生成 560 537 # 561 538 $kernelCfgH.append(<<EOS) -
Property svn:mime-type
changed from
Note:
See TracChangeset
for help on using the changeset viewer.