Ignore:
Timestamp:
Jul 3, 2020, 7:19:17 PM (4 years ago)
Author:
coas-nagasima
Message:

ASP3, TINET, mbed を更新

File:
1 edited

Legend:

Unmodified
Added
Removed
  • EcnlProtoTool/trunk/asp3_dcre/cfg/pass2.rb

    r331 r429  
    44#
    55#  Copyright (C) 2015 by FUJI SOFT INCORPORATED, JAPAN
    6 #  Copyright (C) 2015-2017 by Embedded and Real-Time Systems Laboratory
     6#  Copyright (C) 2015-2018 by Embedded and Real-Time Systems Laboratory
    77#              Graduate School of Information Science, Nagoya Univ., JAPAN
    88#
     
    3636#  の責任を負わない.
    3737#
    38 #  $Id$
     38#  $Id: pass2.rb 175 2019-06-19 01:51:58Z ertl-hiro $
    3939#
    4040
     
    5959
    6060  #
     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  #
    6174  #  パス1の生成物の読み込み(メインの処理)
    6275  #
     
    7285    end
    7386
    74     # マジックナンバーの取得
     87    # マジックナンバーの取得とエンディアンの設定
    7588    if @symbolAddress.has_key?(CFG1_MAGIC_NUM)
    7689      $asmLabel = ""
     
    95108    # 固定出力した変数の取得
    96109    $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)
    97112
    98113    # 値取得シンボルの取得
     
    106121        end
    107122      else
    108         value = GetSymbolValue(symbol, $sizeOfSigned, \
     123        if symbolData.has_key?(:INTPTR)
     124          value = GetSymbolValue(symbol, $sizeOfIntptr, \
    109125                                                                                symbolData.has_key?(:SIGNED))
     126        else
     127          value = GetSymbolValue(symbol, $sizeOfSigned, \
     128                                                                                symbolData.has_key?(:SIGNED))
     129        end
    110130        if !value.nil?
    111131          symbolData[:VALUE] = value
    112132        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で実施する
    113152      end
    114153    end
     
    133172
    134173    #
    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")
    141183    end
    142184
     
    146188  #
    147189  #  パラメータの値を取り出す
     190  #
     191  #  生成スクリプト内で追加された静的APIの場合には,apiIndexがnilになる.
    148192  #
    149193  def self.GetParamValue(paramName, param, apiIndex, index, apiParam, cfgInfo)
     
    160204        value = nil
    161205      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
    162213    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
    164224        if param.is_a?(NumStr)
    165225          return(param)
     
    167227          return(NumStr.new(param))
    168228        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                                                                                # 一般定数式パラメータ
    175231      return(param)
    176232    end
     
    201257
    202258    # ID番号割り当ての前処理
    203     objidParamNameList = []
    204259    $cfgFileInfo.each do |cfgInfo|
    205260      # プリプロセッサディレクティブは読み飛ばす
     
    228283            @objidValues[objidParamName][objName] = nil
    229284          end
    230           objidParamNameList.push(objidParamName)
    231285        end
    232286      end
     
    234288
    235289    # ID番号の割当て処理
    236     objidParamNameList.each do |objidParamName|
    237       objidList = @objidValues[objidParamName]
    238 
     290    @objidValues.each do |objidParamName, objidList|
    239291      # 未使用のID番号のリスト(使用したものから消していく)
    240292      unusedObjidList = (1.upto(objidList.keys.size)).to_a
     
    311363      # クラスIDを追加
    312364      if cfgInfo.has_key?(:CLASS)
    313         if apiIndex.nil?
    314           params[:class] = cfgInfo[:CLASS]
    315         else
     365        if !apiIndex.nil?
    316366          symbol = "#{$cfg1_prefix}valueof_CLASS_#{apiIndex}"
    317367          value = GetSymbolValue(symbol, $sizeOfSigned, true)
    318368          params[:class] = NumStr.new(value, cfgInfo[:CLASS])
     369        else
     370          params[:class] = cfgInfo[:CLASS]
    319371        end
    320372      end
     
    343395
    344396  #
     397  #  ID番号の割当て結果の上書き
     398  #
     399  def self.SetObjidList(objidParamName, objidList)
     400    @objidValues[objidParamName] = objidList
     401  end
     402
     403  #
    345404  #  ID番号出力ファイルの生成
    346405  #
     
    364423  db = PStore.new(CFG1_OUT_DB)
    365424  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" ]
    373440
    374441  #
     
    404471  #  パス3に引き渡す情報をファイルに生成
    405472  #
    406   if $omitOutputDb.nil?
     473  if !$omitOutputDb
    407474    db = PStore.new(CFG2_OUT_DB)
    408475    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
    417479    end
    418480  end
Note: See TracChangeset for help on using the changeset viewer.