Changeset 321 for EcnlProtoTool/trunk/asp3_dcre/cfg/pass2.rb
- Timestamp:
- Aug 23, 2017, 9:27:43 AM (7 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
EcnlProtoTool/trunk/asp3_dcre/cfg/pass2.rb
-
Property svn:mime-type
changed from
text/x-ruby
totext/x-ruby;charset=UTF-8
r270 r321 7 7 # Graduate School of Information Science, Nagoya Univ., JAPAN 8 8 # 9 # ä¸è¨èä½æ¨©è 10 ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ 11 # ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ã使ç¨ã»è¤è£½ã»æ¹ 12 # å¤ã»åé 13 å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼ 14 # (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½ 15 # 権表示ï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼ 16 # ã¹ã³ã¼ãä¸ã«å«ã¾ãã¦ãããã¨ï¼ 17 # (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 18 # ç¨ã§ããå½¢ã§åé 19 å¸ããå ´åã«ã¯ï¼åé 20 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨ 21 # è 22 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ 23 # ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 24 # (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 25 # ç¨ã§ããªãå½¢ã§åé 26 å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã 27 # ã¨ï¼ 28 # (a) åé 29 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨è 30 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è 31 # ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 32 # (b) åé 33 å¸ã®å½¢æ 34 ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSããã¸ã§ã¯ãã« 35 # å ±åãããã¨ï¼ 36 # (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ 37 # 害ãããï¼ä¸è¨èä½æ¨©è 38 ããã³TOPPERSããã¸ã§ã¯ããå 39 責ãããã¨ï¼ 40 # ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç 41 # ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è 42 ããã³TOPPERSããã¸ã§ã¯ãã 43 # å 44 責ãããã¨ï¼ 45 # 46 # æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è 47 ã 48 # ãã³TOPPERSããã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç 49 # ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ 50 # ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ害ã«é¢ãã¦ãï¼ã 51 # ã®è²¬ä»»ãè² ããªãï¼ 52 # 53 # $Id: pass2.rb 1011 2016-07-11 02:20:01Z coas-nagasima $ 54 # 55 56 # 57 # ãã¹2ã®å¦ç 58 # 59 60 # 61 # ãã¹1ã®çæç©ã®èªã¿è¾¼ã¿ 9 # 上記著作権者は,以下の(1)~(4)の条件を満たす場合に限り,本ソフトウェ 10 # ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改 11 # 変・再配布(以下,利用と呼ぶ)することを無償で許諾する. 12 # (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作 13 # 権表示,この利用条件および下記の無保証規定が,そのままの形でソー 14 # スコード中に含まれていること. 15 # (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使 16 # 用できる形で再配布する場合には,再配布に伴うドキュメント(利用 17 # 者マニュアルなど)に,上記の著作権表示,この利用条件および下記 18 # の無保証規定を掲載すること. 19 # (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使 20 # 用できない形で再配布する場合には,次のいずれかの条件を満たすこ 21 # と. 22 # (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著 23 # 作権表示,この利用条件および下記の無保証規定を掲載すること. 24 # (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに 25 # 報告すること. 26 # (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損 27 # 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること. 28 # また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理 29 # 由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを 30 # 免責すること. 31 # 32 # 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 33 # よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的 34 # に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ 35 # アの利用により直接的または間接的に生じたいかなる損害に関しても,そ 36 # の責任を負わない. 37 # 38 # $Id$ 39 # 40 41 # 42 # パス2の処理 43 # 44 45 # 46 # パス1の生成物の読み込み 62 47 # 63 48 module Cfg1Out 64 49 # 65 # S ã¬ã³ã¼ããã¡ã¤ã«ããã·ã³ãã«ã®å¤ãåãåºã50 # Sレコードファイルからシンボルの値を取り出す 66 51 # 67 52 def self.GetSymbolValue(symbol, size, signed) … … 74 59 75 60 # 76 # ãã¹1ã®çæç©ã®èªã¿è¾¼ã¿ï¼ã¡ã¤ã³ã®å¦çï¼61 # パス1の生成物の読み込み(メインの処理) 77 62 # 78 63 def self.Read 79 # cfg1_out.syms ã®èªã¿è¾¼ã¿64 # cfg1_out.symsの読み込み 80 65 @symbolAddress = ReadSymbolFile(CFG1_OUT_SYMS) 81 66 82 # cfg1_out.srec ã®èªã¿è¾¼ã¿67 # cfg1_out.srecの読み込み 83 68 begin 84 69 @cfg1SRec = SRecord.new(CFG1_OUT_SREC) … … 87 72 end 88 73 89 # ãã¸ãã¯ãã³ãã¼ã®åå¾74 # マジックナンバーの取得 90 75 if @symbolAddress.has_key?(CFG1_MAGIC_NUM) 91 76 $asmLabel = "" … … 108 93 end 109 94 110 # åºå®åºåããå¤æ°ã®åå¾95 # 固定出力した変数の取得 111 96 $sizeOfSigned = GetSymbolValue($asmLabel + CFG1_SIZEOF_SIGNED, 4, false) 112 97 113 # å¤åå¾ã·ã³ãã«ã®åå¾98 # 値取得シンボルの取得 114 99 $symbolValueTable.each do |symbolName, symbolData| 115 100 symbol = $cfg1_prefix + symbolName … … 117 102 value = GetSymbolValue(symbol, $sizeOfSigned, true) 118 103 if !value.nil? 119 # C è¨èªã®çå½å¤ãRubyã®çå½å¤ã«å¤æãã¦åãè¾¼ã104 # C言語の真偽値をRubyの真偽値に変換して取り込む 120 105 symbolData[:VALUE] = (value != 0) 121 106 end … … 130 115 131 116 # 132 # ããã·ã¥ã®åæå117 # ハッシュの初期化 133 118 # 134 119 $cfgData = {} … … 148 133 149 134 # 150 # ãã¡ã¤ã³çæãã¼ã¿ãã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³ãã¼ã¿ï¼$cfgDataï¼ã«æ ¼ç´135 # ドメイン生成データをコンフィギュレーションデータ($cfgData)に格納 151 136 # 152 137 $cfgData[:CRE_DOM] = {} … … 160 145 161 146 # 162 # ãã©ã¡ã¼ã¿ã®å¤ãåãåºã147 # パラメータの値を取り出す 163 148 # 164 149 def self.GetParamValue(paramName, param, apiIndex, index, apiParam, cfgInfo) 165 if apiParam.has_key?(:ID_DEF) # ãªãã¸ã§ã¯ãèå¥åï¼å®ç¾©ï¼150 if apiParam.has_key?(:ID_DEF) # オブジェクト識別名(定義) 166 151 value = @objidValues[paramName][param] 167 elsif apiParam.has_key?(:ID_REF) # ãªãã¸ã§ã¯ãèå¥åï¼åç 168 §ï¼ 152 elsif apiParam.has_key?(:ID_REF) # オブジェクト識別名(参照) 169 153 if @objidValues[paramName].has_key?(param) 170 154 value = @objidValues[paramName][param] … … 175 159 value = nil 176 160 end 177 elsif apiParam.has_key?(:EXPTYPE) # æ´æ°å®æ°å¼ãã©ã¡ã¼ã¿161 elsif apiParam.has_key?(:EXPTYPE) # 整数定数式パラメータ 178 162 if apiIndex.nil? 179 163 if param.is_a?(NumStr) … … 187 171 apiParam.has_key?(:SIGNED)) 188 172 end 189 else # ä¸è¬å®æ°å¼ï¼æååãã©ã¡ã¼ã¿173 else # 一般定数式/文字列パラメータ 190 174 return(param) 191 175 end … … 194 178 195 179 # 196 # æå®ãããã§ã¼ãºã®ããã®ãã¹1ã®çæç©ã®èªã¿è¾¼ã¿180 # 指定したフェーズのためのパス1の生成物の読み込み 197 181 # 198 182 def self.ReadPhase(phase) 199 183 # 200 # ãªãã¸ã§ã¯ãIDã®å²å½ã¦ 201 # 202 # å²ãå½ã¦ããªãã¸ã§ã¯ãIDã¯ï¼@objidValuesã«ä¿æããï¼@objidValuesã¯ï¼ 203 # 2éã®ããã·ã¥ï¼ããã·ã¥ã®ããã·ã¥ï¼ã§ããï¼ 204 # 205 # å 206 ·ä½çã«ã¯ï¼@objidValuesã¯ï¼ãªãã¸ã§ã¯ãIDã®ãã©ã¡ã¼ã¿åï¼ä¾ãã°ï¼ã» 207 # ããã©IDã§ããã°"semid"ï¼ãããä¿æããå¤æ°åã¯ï¼objidParamNameã¨ã 208 # ãï¼ããã¼ã¨ãï¼ãã®ãªãã¸ã§ã¯ãIDã®å²å½ã¦è¡¨ï¼ãããä¿æããå¤æ°å 209 # ã¯ï¼objidListã¨ããï¼ãå¤ã¨ããããã·ã¥ã§ããï¼ãªãã¸ã§ã¯ãIDã®å²å½ 210 # ã¦è¡¨ã¯ï¼ãªãã¸ã§ã¯ãåï¼ãããä¿æããå¤æ°åã¯ï¼objNameã¨ããï¼ããã¼ 211 # ã¨ãï¼ãã®IDçªå·ï¼ãããä¿æããå¤æ°åã¯ï¼objidNumberã¨ããï¼ãå¤ã¨ 212 # ããããã·ã¥ã§ããï¼ 213 # 214 # ä¾ãã°ï¼ã»ããã©SEM1ã®IDçªå·ã1ã®å ´åã«ã¯ï¼æ¬¡ã®ããã«è¨å®ãããï¼ 184 # オブジェクトIDの割当て 185 # 186 # 割り当てたオブジェクトIDは,@objidValuesに保持する.@objidValuesは, 187 # 2重のハッシュ(ハッシュのハッシュ)である. 188 # 189 # 具体的には,@objidValuesは,オブジェクトIDのパラメータ名(例えば,セ 190 # マフォIDであれば"semid".これを保持する変数名は,objidParamNameとす 191 # る)をキーとし,そのオブジェクトIDの割当て表(これを保持する変数名 192 # は,objidListとする)を値とするハッシュである.オブジェクトIDの割当 193 # て表は,オブジェクト名(これを保持する変数名は,objNameとする)をキー 194 # とし,そのID番号(これを保持する変数名は,objidNumberとする)を値と 195 # するハッシュである. 196 # 197 # 例えば,セマフォSEM1のID番号が1の場合には,次のように設定される. 215 198 # @objidValues["semid"]["SEM1"] == 1 216 199 # 217 200 218 # ID çªå·å²ãå½ã¦ã®åå¦ç201 # ID番号割り当ての前処理 219 202 objidParamNameList = [] 220 203 $cfgFileInfo.each do |cfgInfo| 221 # ããªããã»ããµãã£ã¬ã¯ãã£ãã¯èªã¿é£ã°ã204 # プリプロセッサディレクティブは読み飛ばす 222 205 next if cfgInfo.has_key?(:DIRECTIVE) 223 206 224 207 apiDef = $apiDefinition[cfgInfo[:APINAME]] 225 # ç°ãªããã§ã¼ãºã®éçAPIã¯èªã¿é£ã°ã208 # 異なるフェーズの静的APIは読み飛ばす 226 209 next if apiDef[:PHASE] != phase 227 210 228 211 apiIndex = cfgInfo[:INDEX] 229 212 if !apiIndex.nil? 230 # ã·ã³ãã«ãã¡ã¤ã«ã«éçAPIã®ã¤ã³ããã¯ã¹ãåå¨ããªããã°èªã¿é£231 # ã°ãï¼ifdefçã§æ¶ããéçAPIï¼213 # シンボルファイルに静的APIのインデックスが存在しなければ読み飛 214 # ばす(ifdef等で消えた静的API) 232 215 symbol = "#{$cfg1_prefix}static_api_#{apiIndex}" 233 216 next unless @symbolAddress.has_key?(symbol) … … 239 222 objName = cfgInfo[objidParamName] 240 223 if $inputObjid.has_key?(objName) 241 # IDçªå·å 242 ¥åãã¡ã¤ã«ã«å®ç¾©ããã¦ããå ´å 224 # ID番号入力ファイルに定義されていた場合 243 225 @objidValues[objidParamName][objName] = $inputObjid[objName] 244 226 else … … 250 232 end 251 233 252 # ID çªå·ã®å²å½ã¦å¦ç234 # ID番号の割当て処理 253 235 objidParamNameList.each do |objidParamName| 254 236 objidList = @objidValues[objidParamName] 255 237 256 # æªä½¿ç¨ã®IDçªå·ã®ãªã¹ãï¼ä½¿ç¨ãããã®ããæ¶ãã¦ããï¼238 # 未使用のID番号のリスト(使用したものから消していく) 257 239 unusedObjidList = (1.upto(objidList.keys.size)).to_a 258 240 259 # å²ãå½ã¦æ¸ã¿ã®IDçªå·ã®å¦ç241 # 割り当て済みのID番号の処理 260 242 objidList.each do |objName, objidNumber| 261 243 if $inputObjid.has_key?(objName) 262 244 objidIndex = unusedObjidList.index($inputObjid[objName]) 263 245 if objidIndex.nil? 264 # IDçªå·å 265 ¥åãã¡ã¤ã«ã§æå®ãããå¤ãä¸æ£ 246 # ID番号入力ファイルで指定された値が不正 266 247 error_exit("value of `#{objName}' in ID input file is illegal") 267 248 else 268 # æªä½¿ç¨ã®IDçªå·ã®ãªã¹ãããåé¤249 # 未使用のID番号のリストから削除 269 250 unusedObjidList.delete_at(objidIndex) 270 251 end … … 272 253 end 273 254 274 # ID çªå·ã®å²å½ã¦255 # ID番号の割当て 275 256 objidList.each do |objName, objidNumber| 276 257 if objidList[objName].nil? 277 # 以ä¸ã§ï¼@objidValuesãæ¸ãæãã¦ãã258 # 以下で,@objidValuesを書き換えている 278 259 objidList[objName] = unusedObjidList.shift 279 260 end … … 282 263 283 264 # 284 # éçAPIãã¼ã¿ãã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³ãã¼ã¿ï¼$cfgDataï¼ã«æ ¼ç´265 # 静的APIデータをコンフィギュレーションデータ($cfgData)に格納 285 266 # 286 267 $cfgFileInfo.each do |cfgInfo| 287 # ããªããã»ããµãã£ã¬ã¯ãã£ãã¯èªã¿é£ã°ã268 # プリプロセッサディレクティブは読み飛ばす 288 269 next if cfgInfo.has_key?(:DIRECTIVE) 289 270 290 271 apiDef = $apiDefinition[cfgInfo[:APINAME]] 291 # ç°ãªããã§ã¼ãºã®éçAPIã¯èªã¿é£ã°ã272 # 異なるフェーズの静的APIは読み飛ばす 292 273 next if apiDef[:PHASE] != phase 293 274 … … 295 276 apiIndex = cfgInfo[:INDEX] 296 277 if !apiIndex.nil? 297 # ã·ã³ãã«ãã¡ã¤ã«ã«éçAPIã®ã¤ã³ããã¯ã¹ãåå¨ããªããã°èªã¿é£298 # ã°ãï¼ifdefçã§æ¶ããéçAPIï¼278 # シンボルファイルに静的APIのインデックスが存在しなければ読み飛 279 # ばす(ifdef等で消えた静的API) 299 280 symbol = "#{$cfg1_prefix}static_api_#{apiIndex}" 300 281 next unless @symbolAddress.has_key?(symbol) 301 282 end 302 283 303 # ãã©ã¡ã¼ã¿ã®å¤ãããã·ã¥å½¢å¼ã«æ ¼ç´284 # パラメータの値をハッシュ形式に格納 304 285 params = {} 305 286 apiDef[:PARAM].each do |apiParam| 306 287 next unless apiParam.has_key?(:NAME) 307 288 paramName = apiParam[:NAME] 308 next unless cfgInfo.has_key?(paramName) # ãã©ã¡ã¼ã¿ããªãå ´å289 next unless cfgInfo.has_key?(paramName) # パラメータがない場合 309 290 paramData = cfgInfo[paramName] 310 291 … … 321 302 end 322 303 323 # ãã¡ã¤ã³IDã追å304 # ドメインIDを追加 324 305 if cfgInfo.has_key?(:DOMAIN) 325 306 domainName = cfgInfo[:DOMAIN] … … 327 308 end 328 309 329 # ã¯ã©ã¹IDã追å310 # クラスIDを追加 330 311 if cfgInfo.has_key?(:CLASS) 331 312 if apiIndex.nil? … … 338 319 end 339 320 340 # API åï¼ãã¡ã¤ã«åï¼è¡çªå·ã追å321 # API名,ファイル名,行番号を追加 341 322 params[:apiname] = cfgInfo[:APINAME] 342 323 params[:_file_] = cfgInfo[:_FILE_] 343 324 params[:_line_] = cfgInfo[:_LINE_] 344 325 345 # ç»é²ãã¼ã決å®ãã326 # 登録キーを決定する 346 327 if apiDef.has_key?(:KEYPAR) 347 328 keyParam = params[apiDef[:KEYPAR].to_sym] 348 329 key = keyParam.val 349 330 if $cfgData[apiSym].has_key?(key) 350 # ç»é²ãã¼ã®éè¤331 # 登録キーの重複 351 332 error("E_OBJ: #{apiDef[:KEYPAR]} `#{keyParam}' " \ 352 333 "is duplicated in #{cfgInfo[:APINAME]}", … … 361 342 362 343 # 363 # ID çªå·åºåãã¡ã¤ã«ã®çæ344 # ID番号出力ファイルの生成 364 345 # 365 346 def self.OutputId(fileName) … … 374 355 375 356 # 376 # ãã¹2ã®å¦ç357 # パス2の処理 377 358 # 378 359 def Pass2 379 360 # 380 # ãã¹1ããå¼ã渡ãããæ 381 å ±ããã¡ã¤ã«ããèªã¿è¾¼ã 361 # パス1から引き渡される情報をファイルから読み込む 382 362 # 383 363 db = PStore.new(CFG1_OUT_DB) … … 392 372 393 373 # 394 # ãã¹1ã®çæç©ãèªã¿è¾¼ã374 # パス1の生成物を読み込む 395 375 # 396 376 Cfg1Out.Read() 397 abort if $errorFlag # ã¨ã©ã¼çºçæã¯abortãã398 399 # 400 # å¤åå¾ã·ã³ãã«ãã°ãã¼ãã«å¤æ°ã¨ãã¦å®ç¾©ãã377 abort if $errorFlag # エラー発生時はabortする 378 379 # 380 # 値取得シンボルをグローバル変数として定義する 401 381 # 402 382 DefineSymbolValue() 403 383 404 384 # 405 # çæã¹ã¯ãªããï¼trbãã¡ã¤ã«ï¼ãå®è¡ãã385 # 生成スクリプト(trbファイル)を実行する 406 386 # 407 387 $trbFileNames.each do |trbFileName| … … 414 394 415 395 # 416 # ID çªå·åºåãã¡ã¤ã«ã®çæ396 # ID番号出力ファイルの生成 417 397 # 418 398 if !$idOutputFileName.nil? … … 421 401 422 402 # 423 # ãã¹3ã«å¼ã渡ãæ 424 å ±ããã¡ã¤ã«ã«çæ 403 # パス3に引き渡す情報をファイルに生成 425 404 # 426 405 if $omitOutputDb.nil? -
Property svn:mime-type
changed from
Note:
See TracChangeset
for help on using the changeset viewer.