Changeset 429 for EcnlProtoTool/trunk/asp3_dcre/cfg/pass2.rb
- Timestamp:
- Jul 3, 2020, 7:19:17 PM (4 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
EcnlProtoTool/trunk/asp3_dcre/cfg/pass2.rb
r331 r429 4 4 # 5 5 # Copyright (C) 2015 by FUJI SOFT INCORPORATED, JAPAN 6 # Copyright (C) 2015-201 7by Embedded and Real-Time Systems Laboratory6 # Copyright (C) 2015-2018 by Embedded and Real-Time Systems Laboratory 7 7 # Graduate School of Information Science, Nagoya Univ., JAPAN 8 8 # … … 36 36 # の責任を負わない. 37 37 # 38 # $Id $38 # $Id: pass2.rb 175 2019-06-19 01:51:58Z ertl-hiro $ 39 39 # 40 40 … … 59 59 60 60 # 61 # Sレコードファイルからシンボルの文字列を取り出す 62 # 63 def self.GetSymbolString(symbol) 64 if @symbolAddress.has_key?(symbol) \ 65 && !(address = @cfg1SRec.get_value(@symbolAddress[symbol], \ 66 $sizeOfCharPtr, false)).nil? 67 return(@cfg1SRec.get_string(address)) 68 else 69 return(nil) 70 end 71 end 72 73 # 61 74 # パス1の生成物の読み込み(メインの処理) 62 75 # … … 72 85 end 73 86 74 # マジックナンバーの取得 87 # マジックナンバーの取得とエンディアンの設定 75 88 if @symbolAddress.has_key?(CFG1_MAGIC_NUM) 76 89 $asmLabel = "" … … 95 108 # 固定出力した変数の取得 96 109 $sizeOfSigned = GetSymbolValue($asmLabel + CFG1_SIZEOF_SIGNED, 4, false) 110 $sizeOfIntptr = GetSymbolValue($asmLabel + CFG1_SIZEOF_INTPTR, 4, false) 111 $sizeOfCharPtr = GetSymbolValue($asmLabel + CFG1_SIZEOF_CHARPTR, 4, false) 97 112 98 113 # 値取得シンボルの取得 … … 106 121 end 107 122 else 108 value = GetSymbolValue(symbol, $sizeOfSigned, \ 123 if symbolData.has_key?(:INTPTR) 124 value = GetSymbolValue(symbol, $sizeOfIntptr, \ 109 125 symbolData.has_key?(:SIGNED)) 126 else 127 value = GetSymbolValue(symbol, $sizeOfSigned, \ 128 symbolData.has_key?(:SIGNED)) 129 end 110 130 if !value.nil? 111 131 symbolData[:VALUE] = value 112 132 end 133 end 134 end 135 136 # SILによるエンディアン定義のチェック 137 if $symbolValueTable["SIL_ENDIAN_BIG"].has_key?(:VALUE) 138 if $symbolValueTable["SIL_ENDIAN_LITTLE"].has_key?(:VALUE) 139 error_exit("Both SIL_ENDIAN_BIG and SIL_ENDIAN_LITTLE are defined.") 140 else 141 if $endianLittle 142 error_exit("Definition of SIL_ENDIAN_BIG seems to be wrong.") 143 end 144 end 145 else 146 if $symbolValueTable["SIL_ENDIAN_LITTLE"].has_key?(:VALUE) 147 if !$endianLittle 148 error_exit("Definition of SIL_ENDIAN_LITTLE seems to be wrong.") 149 end 150 else 151 # 両方が未定義の場合のエラーチェックは,sil.hで実施する 113 152 end 114 153 end … … 133 172 134 173 # 135 # ドメイン生成データをコンフィギュレーションデータ($cfgData)に格納 136 # 137 $cfgData[:CRE_DOM] = {} 138 $domainId.each do |domainName, domainVal| 139 domid = NumStr.new(domainVal, domainName) 140 $cfgData[:CRE_DOM][domainVal] = { :domid => domid } 174 # ドメインデータ($domData)を生成 175 # 176 if $supportDomain 177 $domData = {} 178 $domainId.each do |domainName, domainVal| 179 domid = NumStr.new(domainVal, domainName) 180 $domData[domainVal] = { :domid => domid } 181 end 182 $globalVars.push("domData") 141 183 end 142 184 … … 146 188 # 147 189 # パラメータの値を取り出す 190 # 191 # 生成スクリプト内で追加された静的APIの場合には,apiIndexがnilになる. 148 192 # 149 193 def self.GetParamValue(paramName, param, apiIndex, index, apiParam, cfgInfo) … … 160 204 value = nil 161 205 end 206 elsif apiParam.has_key?(:STRING) # 文字列パラメータ 207 if !apiIndex.nil? 208 symbol = "#{$cfg1_prefix}valueof_#{paramName}_#{apiIndex}#{index}" 209 return(GetSymbolString(symbol)) 210 else 211 return(param) 212 end 162 213 elsif apiParam.has_key?(:EXPTYPE) # 整数定数式パラメータ 163 if apiIndex.nil? 214 if !apiIndex.nil? 215 symbol = "#{$cfg1_prefix}valueof_#{paramName}_#{apiIndex}#{index}" 216 if apiParam.has_key?(:INTPTR) 217 value = GetSymbolValue(symbol, $sizeOfIntptr, \ 218 apiParam.has_key?(:SIGNED)) 219 else 220 value = GetSymbolValue(symbol, $sizeOfSigned, \ 221 apiParam.has_key?(:SIGNED)) 222 end 223 else 164 224 if param.is_a?(NumStr) 165 225 return(param) … … 167 227 return(NumStr.new(param)) 168 228 end 169 else 170 symbol = "#{$cfg1_prefix}valueof_#{paramName}_#{apiIndex}#{index}" 171 value = GetSymbolValue(symbol, $sizeOfSigned, \ 172 apiParam.has_key?(:SIGNED)) 173 end 174 else # 一般定数式/文字列パラメータ 229 end 230 else # 一般定数式パラメータ 175 231 return(param) 176 232 end … … 201 257 202 258 # ID番号割り当ての前処理 203 objidParamNameList = []204 259 $cfgFileInfo.each do |cfgInfo| 205 260 # プリプロセッサディレクティブは読み飛ばす … … 228 283 @objidValues[objidParamName][objName] = nil 229 284 end 230 objidParamNameList.push(objidParamName)231 285 end 232 286 end … … 234 288 235 289 # ID番号の割当て処理 236 objidParamNameList.each do |objidParamName| 237 objidList = @objidValues[objidParamName] 238 290 @objidValues.each do |objidParamName, objidList| 239 291 # 未使用のID番号のリスト(使用したものから消していく) 240 292 unusedObjidList = (1.upto(objidList.keys.size)).to_a … … 311 363 # クラスIDを追加 312 364 if cfgInfo.has_key?(:CLASS) 313 if apiIndex.nil? 314 params[:class] = cfgInfo[:CLASS] 315 else 365 if !apiIndex.nil? 316 366 symbol = "#{$cfg1_prefix}valueof_CLASS_#{apiIndex}" 317 367 value = GetSymbolValue(symbol, $sizeOfSigned, true) 318 368 params[:class] = NumStr.new(value, cfgInfo[:CLASS]) 369 else 370 params[:class] = cfgInfo[:CLASS] 319 371 end 320 372 end … … 343 395 344 396 # 397 # ID番号の割当て結果の上書き 398 # 399 def self.SetObjidList(objidParamName, objidList) 400 @objidValues[objidParamName] = objidList 401 end 402 403 # 345 404 # ID番号出力ファイルの生成 346 405 # … … 364 423 db = PStore.new(CFG1_OUT_DB) 365 424 db.transaction(true) do 366 $apiDefinition = db[:apiDefinition] 367 $symbolValueTable = db[:symbolValueTable] 368 $cfgFileInfo = db[:cfgFileInfo] 369 $includeFiles = db[:includeFiles] 370 $domainId = db[:domainId] 371 end 372 $cfg2Data = {} 425 db.roots.each do |var| 426 eval("$#{var} = db[:#{var}]") 427 end 428 end 429 430 # 431 # パス3以降に引き渡す情報の定義 432 # 433 $globalVars = [ "globalVars", 434 "apiDefinition", 435 "symbolValueTable", 436 "cfgFileInfo", 437 "cfgData", 438 "asmLabel", 439 "endianLittle" ] 373 440 374 441 # … … 404 471 # パス3に引き渡す情報をファイルに生成 405 472 # 406 if $omitOutputDb.nil?473 if !$omitOutputDb 407 474 db = PStore.new(CFG2_OUT_DB) 408 475 db.transaction do 409 db[:apiDefinition] = $apiDefinition 410 db[:symbolValueTable] = $symbolValueTable 411 db[:cfgFileInfo] = $cfgFileInfo 412 db[:includeFiles] = $includeFiles 413 db[:cfgData] = $cfgData 414 db[:asmLabel] = $asmLabel 415 db[:endianLittle] = $endianLittle 416 db[:cfg2Data] = $cfg2Data 476 $globalVars.each do |var| 477 eval("db[:#{var}] = $#{var}") 478 end 417 479 end 418 480 end
Note:
See TracChangeset
for help on using the changeset viewer.