Changeset 315 for rubycfg_asp/trunk/asp_dcre/kernel/kernel.trb
- Timestamp:
- Jul 23, 2017, 2:29:40 PM (7 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
rubycfg_asp/trunk/asp_dcre/kernel/kernel.trb
-
Property svn:mime-type
changed from
text/x-ruby
totext/x-ruby; charset=UTF-8
r313 r315 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: kernel.trb 716 2016-03-31 06:16:23Z ertl-hiro $ … … 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 (#include)") … … 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 if params[@objid] … … 149 130 $kernelCfgH.add() 150 131 151 # ãªãã¸ã§ã¯ãã®IDçªå·ãä¿æããå¤æ°132 # オブジェクトのID番号を保持する変数 152 133 if $USE_EXTERNAL_ID 153 134 $cfgData[@api].sort.each do |key, params| … … 160 141 end 161 142 162 # éçã«çæããããªãã¸ã§ã¯ãã®æ°143 # 静的に生成されたオブジェクトの数 163 144 $kernelCfgC.add("#define TNUM_S#{@OBJ}ID\t#{$cfgData[@api].size}") 164 145 165 # ãªãã¸ã§ã¯ãIDçªå·ã®æ大å¤146 # オブジェクトID番号の最大値 166 147 $kernelCfgC.add("const ID _kernel_tmax_#{@obj}id" \ 167 148 " = (TMIN_#{@OBJ}ID + TNUM_#{@OBJ}ID - 1);") … … 169 150 " = (TMIN_#{@OBJ}ID + TNUM_S#{@OBJ}ID - 1);") 170 151 171 # ãã¼ã¿æ§é152 # データ構造 172 153 if $cfgData[@api].size > 0 173 # äºåæºåï¼ã¨ã©ã¼ãã§ãã¯ï¼ã¡ã¢ãªé åã®çæï¼154 # 事前準備(エラーチェック,メモリ領域の生成) 174 155 $cfgData[@api].sort.each do |key, params| 175 156 prepare(key, params) 176 157 end 177 158 178 # ãªãã¸ã§ã¯ãå 179 ¨ä½ã«å¯¾ãã¦å¿ 180 è¦ãªã¡ã¢ãªé åã®çæï¼ãªãã·ã§ã³ï¼ 159 # オブジェクト全体に対して必要なメモリ領域の生成(オプション) 181 160 if respond_to?(:generateData) 182 161 generateData() 183 162 end 184 163 185 # ãªãã¸ã§ã¯ãåæåãããã¯ã®çæ164 # オブジェクト初期化ブロックの生成 186 165 $kernelCfgC.add("const #{@OBJ_S}INIB _kernel_#{@obj_s}inib_table" \ 187 166 "[TNUM_S#{@OBJ}ID] = {") … … 197 176 end 198 177 199 # åççæãªãã¸ã§ã¯ãç¨ã®ãªãã¸ã§ã¯ãåæåãããã¯178 # 動的生成オブジェクト用のオブジェクト初期化ブロック 200 179 @inibList.each do |type, array| 201 180 if numAutoObjid > 0 … … 207 186 208 187 if numObjid > 0 209 # ãªãã¸ã§ã¯ã管çãããã¯ã®çæ188 # オブジェクト管理ブロックの生成 210 189 $kernelCfgC.add2("#{@OBJ_S}CB _kernel_#{@obj_s}cb_table" \ 211 190 "[TNUM_#{@OBJ}ID];") 212 191 213 # ãªãã¸ã§ã¯ãåæåé¢æ°ã®è¿½å192 # オブジェクト初期化関数の追加 214 193 $initializeFunctions.push("_kernel_initialize_#{@object}();") 215 194 else … … 221 200 222 201 # 223 # åæ©è½ã¢ã¸ã¥ã¼ã«ã®ã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³202 # 各機能モジュールのコンフィギュレーション 224 203 # 225 204 $initializeFunctions = [] … … 237 216 238 217 # 239 # éã¿ã¹ã¯ã³ã³ããã¹ãç¨ã®ã¹ã¿ãã¯é å218 # 非タスクコンテキスト用のスタック領域 240 219 # 241 220 $kernelCfgC.comment_header("Stack Area for Non-task Context") 242 221 243 222 if $cfgData[:DEF_ICS].size == 0 244 # DEF_ICS ããªãå ´åã®ããã©ã«ãå¤ã®è¨å®223 # DEF_ICSがない場合のデフォルト値の設定 245 224 if $DEFAULT_ISTK.nil? 246 # ã¹ã¿ãã¯é åã®èªåå²ä»ã225 # スタック領域の自動割付け 247 226 istksz = AllocStack("_kernel_istack", "DEFAULT_ISTKSZ") 248 227 istk = "_kernel_istack" … … 252 231 end 253 232 else 254 # éçAPIãDEF_ICSããè¤æ°ããï¼E_OBJï¼ï¼»NGKI3216ï¼½233 # 静的API「DEF_ICS」が複数ある(E_OBJ)[NGKI3216] 255 234 if $cfgData[:DEF_ICS].size > 1 256 235 error("E_OBJ: too many DEF_ICS") 257 236 end 258 237 259 # DEF_ICS ãããå ´åã®å¦ç238 # DEF_ICSがある場合の処理 260 239 params = $cfgData[:DEF_ICS][1] 261 240 262 # ãã©ã¡ã¼ã¿ãçç¥ãããæã®ããã©ã«ãå¤ã®è¨å®241 # パラメータが省略された時のデフォルト値の設定 263 242 params[:istk] ||= "NULL" 264 243 265 # istksz ãã¿ã¼ã²ããå®ç¾©ã®æå°å¤ï¼TARGET_MIN_ISTKSZï¼æªå®ç¾©ã®å ´åã¯1ï¼266 # ãããå°ããå ´åï¼E_PARï¼ï¼»NGKI3254ï¼½244 # istkszがターゲット定義の最小値(TARGET_MIN_ISTKSZ,未定義の場合は1) 245 # よりも小さい場合(E_PAR)[NGKI3254] 267 246 if params[:istksz] < $TARGET_MIN_ISTKSZ 268 247 error_wrong("E_PAR", params, :istksz, "too small") … … 270 249 271 250 if params[:istk] == "NULL" 272 # ã¹ã¿ãã¯é åã®èªåå²ä»ã251 # スタック領域の自動割付け 273 252 istksz = AllocStack("_kernel_istack", params[:istksz]) 274 253 istk = "_kernel_istack" 275 254 else 276 # istksz ãã¹ã¿ãã¯é åã®ãµã¤ãºã¨ãã¦æ£ãããªãå ´åï¼E_PARï¼ï¼»NGKI3222ï¼½255 # istkszがスタック領域のサイズとして正しくない場合(E_PAR)[NGKI3222] 277 256 if (params[:istksz] & ($CHECK_STKSZ_ALIGN - 1)) != 0 278 257 error_wrong("E_PAR", params, :istksz, "not aligned") … … 294 273 295 274 # 296 # ã«ã¼ãã«ãå²ãä»ããã¡ã¢ãªé å275 # カーネルが割り付けるメモリ領域 297 276 # 298 277 $kernelCfgC.comment_header("Memory Area Allocated by Kernel") 299 278 300 279 if $cfgData[:DEF_KMM].size == 0 301 # DEF_KMM ããªãå ´åã®ããã©ã«ãå¤ã®è¨å®280 # DEF_KMMがない場合のデフォルト値の設定 302 281 kmmsz = "0" 303 282 kmm = "NULL" 304 283 else 305 # éçAPIãDEF_KMMããè¤æ°ããï¼E_OBJï¼284 # 静的API「DEF_KMM」が複数ある(E_OBJ) 306 285 if ($cfgData[:DEF_KMM].size > 1) 307 286 error("E_OBJ: too many DEF_KMM") 308 287 end 309 288 310 # DEF_KMM ãããå ´åã®å¦ç289 # DEF_KMMがある場合の処理 311 290 params = $cfgData[:DEF_KMM][1] 312 291 313 # ãã©ã¡ã¼ã¿ãçç¥ãããæã®ããã©ã«ãå¤ã®è¨å®292 # パラメータが省略された時のデフォルト値の設定 314 293 params[:kmm] ||= "NULL" 315 294 316 # kmmsz ã0ã®å ´åï¼E_PARï¼295 # kmmszが0の場合(E_PAR) 317 296 if params[:kmmsz] == 0 318 297 error_wrong("E_PAR", params, :kmmsz, "zero") … … 320 299 321 300 if params[:kmm] == "NULL" 322 # ã«ã¼ãã«ãå²ãä»ããã¡ã¢ãªé åã®èªåå²ä»ã301 # カーネルが割り付けるメモリ領域の自動割付け 323 302 $kernelCfgC.add("static MB_T _kernel_memory" \ 324 303 "[TOPPERS_COUNT_SZ(#{params[:kmmsz]}, sizeof(MB_T))];") … … 326 305 kmm = "_kernel_memory" 327 306 else 328 # kmmsz ãã«ã¼ãã«ãå²ãä»ããã¡ã¢ãªé åã®ãµã¤ãºã¨ãã¦æ£ãããªãå ´å329 # ï¼E_PARï¼307 # kmmszがカーネルが割り付けるメモリ領域のサイズとして正しくない場合 308 # (E_PAR) 330 309 if (params[:kmmsz] & ($CHECK_MB_ALIGN - 1)) != 0 331 310 error_wrong("E_PAR", params, :kmmsz, "not aligned") … … 343 322 344 323 # 345 # ã¿ã¤ã ã¤ãã³ã管ç324 # タイムイベント管理 346 325 # 347 326 $kernelCfgC.comment_header("Time Event Management") … … 351 330 352 331 # 353 # åã¢ã¸ã¥ã¼ã«ã®åæåé¢æ°332 # 各モジュールの初期化関数 354 333 # 355 334 $kernelCfgC.comment_header("Module Initialization Function") … … 365 344 366 345 # 367 # åæåã«ã¼ãã³æ©è½346 # 初期化ルーチン機能 368 347 # 369 348 $kernelCfgC.comment_header("Initialization Routine") 370 349 371 # ã¨ã©ã¼ãã§ãã¯350 # エラーチェック 372 351 $cfgData[:ATT_INI].each do |key, params| 373 # iniatr ãç¡å¹ã®å ´åï¼E_RSATRï¼ï¼»NGKI3241ï¼½374 # ï¼TA_NULLã§ãªãå ´åï¼352 # iniatrが無効の場合(E_RSATR)[NGKI3241] 353 #(TA_NULLでない場合) 375 354 if (params[:iniatr] != $TA_NULL) 376 355 error_illegal_sym("E_RSATR", params, :iniatr, :inirtn) … … 378 357 end 379 358 380 # åæåã«ã¼ãã³ã®å®è¡é¢æ°ã®çæ359 # 初期化ルーチンの実行関数の生成 381 360 $kernelCfgC.append(<<EOS) 382 361 void … … 391 370 392 371 # 393 # çµäºå¦çã«ã¼ãã³æ©è½372 # 終了処理ルーチン機能 394 373 # 395 374 $kernelCfgC.comment_header("Termination Routine") 396 375 397 # ã¨ã©ã¼ãã§ãã¯376 # エラーチェック 398 377 $cfgData[:ATT_TER].each do |key, params| 399 # teratr ãç¡å¹ã®å ´åï¼E_RSATRï¼ï¼»NGKI3248ï¼½400 # ï¼TA_NULLã§ãªãå ´åï¼378 # teratrが無効の場合(E_RSATR)[NGKI3248] 379 #(TA_NULLでない場合) 401 380 if (params[:teratr] != $TA_NULL) 402 381 error_illegal_sym("E_RSATR", params, :teratr, :terrtn) … … 404 383 end 405 384 406 # çµäºå¦çã«ã¼ãã³ã®å®è¡é¢æ°ã®çæ385 # 終了処理ルーチンの実行関数の生成 407 386 $kernelCfgC.append(<<EOS) 408 387 void … … 417 396 418 397 # 419 # kernel_cfg.h ã®æ«å°¾é¨åã®çæ398 # kernel_cfg.hの末尾部分の生成 420 399 # 421 400 $kernelCfgH.append(<<EOS) -
Property svn:mime-type
changed from
Note:
See TracChangeset
for help on using the changeset viewer.