Changeset 389 for azure_iot_hub/trunk/asp3_dcre/cfg/pass2.rb
- Timestamp:
- May 22, 2019, 10:03:37 PM (5 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
azure_iot_hub/trunk/asp3_dcre/cfg/pass2.rb
-
Property svn:mime-type
changed from
text/x-ruby
totext/x-ruby;charset=UTF-8
r388 r389 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 # ã®è²¬ä»»ãè² ããªãï¼ 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 # の責任を負わない. 52 37 # 53 38 # $Id$ … … 55 40 56 41 # 57 # ãã¹2ã®å¦ç58 # 59 60 # 61 # ãã¹1ã®çæç©ã®èªã¿è¾¼ã¿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] … … 176 160 value = nil 177 161 end 178 elsif apiParam.has_key?(:EXPTYPE) # æ´æ°å®æ°å¼ãã©ã¡ã¼ã¿162 elsif apiParam.has_key?(:EXPTYPE) # 整数定数式パラメータ 179 163 if apiIndex.nil? 180 164 if param.is_a?(NumStr) … … 188 172 apiParam.has_key?(:SIGNED)) 189 173 end 190 else # ä¸è¬å®æ°å¼ï¼æååãã©ã¡ã¼ã¿174 else # 一般定数式/文字列パラメータ 191 175 return(param) 192 176 end … … 195 179 196 180 # 197 # æå®ãããã§ã¼ãºã®ããã®ãã¹1ã®çæç©ã®èªã¿è¾¼ã¿181 # 指定したフェーズのためのパス1の生成物の読み込み 198 182 # 199 183 def self.ReadPhase(phase) 200 184 # 201 # ãªãã¸ã§ã¯ãIDã®å²å½ã¦ 202 # 203 # å²ãå½ã¦ããªãã¸ã§ã¯ãIDã¯ï¼@objidValuesã«ä¿æããï¼@objidValuesã¯ï¼ 204 # 2éã®ããã·ã¥ï¼ããã·ã¥ã®ããã·ã¥ï¼ã§ããï¼ 205 # 206 # å 207 ·ä½çã«ã¯ï¼@objidValuesã¯ï¼ãªãã¸ã§ã¯ãIDã®ãã©ã¡ã¼ã¿åï¼ä¾ãã°ï¼ã» 208 # ããã©IDã§ããã°"semid"ï¼ãããä¿æããå¤æ°åã¯ï¼objidParamNameã¨ã 209 # ãï¼ããã¼ã¨ãï¼ãã®ãªãã¸ã§ã¯ãIDã®å²å½ã¦è¡¨ï¼ãããä¿æããå¤æ°å 210 # ã¯ï¼objidListã¨ããï¼ãå¤ã¨ããããã·ã¥ã§ããï¼ãªãã¸ã§ã¯ãIDã®å²å½ 211 # ã¦è¡¨ã¯ï¼ãªãã¸ã§ã¯ãåï¼ãããä¿æããå¤æ°åã¯ï¼objNameã¨ããï¼ããã¼ 212 # ã¨ãï¼ãã®IDçªå·ï¼ãããä¿æããå¤æ°åã¯ï¼objidNumberã¨ããï¼ãå¤ã¨ 213 # ããããã·ã¥ã§ããï¼ 214 # 215 # ä¾ãã°ï¼ã»ããã©SEM1ã®IDçªå·ã1ã®å ´åã«ã¯ï¼æ¬¡ã®ããã«è¨å®ãããï¼ 185 # オブジェクトIDの割当て 186 # 187 # 割り当てたオブジェクトIDは,@objidValuesに保持する.@objidValuesは, 188 # 2重のハッシュ(ハッシュのハッシュ)である. 189 # 190 # 具体的には,@objidValuesは,オブジェクトIDのパラメータ名(例えば,セ 191 # マフォIDであれば"semid".これを保持する変数名は,objidParamNameとす 192 # る)をキーとし,そのオブジェクトIDの割当て表(これを保持する変数名 193 # は,objidListとする)を値とするハッシュである.オブジェクトIDの割当 194 # て表は,オブジェクト名(これを保持する変数名は,objNameとする)をキー 195 # とし,そのID番号(これを保持する変数名は,objidNumberとする)を値と 196 # するハッシュである. 197 # 198 # 例えば,セマフォSEM1のID番号が1の場合には,次のように設定される. 216 199 # @objidValues["semid"]["SEM1"] == 1 217 200 # 218 201 219 # ID çªå·å²ãå½ã¦ã®åå¦ç202 # ID番号割り当ての前処理 220 203 objidParamNameList = [] 221 204 $cfgFileInfo.each do |cfgInfo| 222 # ããªããã»ããµãã£ã¬ã¯ãã£ãã¯èªã¿é£ã°ã205 # プリプロセッサディレクティブは読み飛ばす 223 206 next if cfgInfo.has_key?(:DIRECTIVE) 224 207 225 208 apiDef = $apiDefinition[cfgInfo[:APINAME]] 226 # ç°ãªããã§ã¼ãºã®éçAPIã¯èªã¿é£ã°ã209 # 異なるフェーズの静的APIは読み飛ばす 227 210 next if apiDef[:PHASE] != phase 228 211 229 212 apiIndex = cfgInfo[:INDEX] 230 213 if !apiIndex.nil? 231 # ã·ã³ãã«ãã¡ã¤ã«ã«éçAPIã®ã¤ã³ããã¯ã¹ãåå¨ããªããã°èªã¿é£232 # ã°ãï¼ifdefçã§æ¶ããéçAPIï¼214 # シンボルファイルに静的APIのインデックスが存在しなければ読み飛 215 # ばす(ifdef等で消えた静的API) 233 216 symbol = "#{$cfg1_prefix}static_api_#{apiIndex}" 234 217 next unless @symbolAddress.has_key?(symbol) … … 240 223 objName = cfgInfo[objidParamName] 241 224 if $inputObjid.has_key?(objName) 242 # IDçªå·å 243 ¥åãã¡ã¤ã«ã«å®ç¾©ããã¦ããå ´å 225 # ID番号入力ファイルに定義されていた場合 244 226 @objidValues[objidParamName][objName] = $inputObjid[objName] 245 227 else … … 251 233 end 252 234 253 # ID çªå·ã®å²å½ã¦å¦ç235 # ID番号の割当て処理 254 236 objidParamNameList.each do |objidParamName| 255 237 objidList = @objidValues[objidParamName] 256 238 257 # æªä½¿ç¨ã®IDçªå·ã®ãªã¹ãï¼ä½¿ç¨ãããã®ããæ¶ãã¦ããï¼239 # 未使用のID番号のリスト(使用したものから消していく) 258 240 unusedObjidList = (1.upto(objidList.keys.size)).to_a 259 241 260 # å²ãå½ã¦æ¸ã¿ã®IDçªå·ã®å¦ç242 # 割り当て済みのID番号の処理 261 243 objidList.each do |objName, objidNumber| 262 244 if $inputObjid.has_key?(objName) 263 245 objidIndex = unusedObjidList.index($inputObjid[objName]) 264 246 if objidIndex.nil? 265 # IDçªå·å 266 ¥åãã¡ã¤ã«ã§æå®ãããå¤ãä¸æ£ 247 # ID番号入力ファイルで指定された値が不正 267 248 error_exit("value of `#{objName}' in ID input file is illegal") 268 249 else 269 # æªä½¿ç¨ã®IDçªå·ã®ãªã¹ãããåé¤250 # 未使用のID番号のリストから削除 270 251 unusedObjidList.delete_at(objidIndex) 271 252 end … … 273 254 end 274 255 275 # ID çªå·ã®å²å½ã¦256 # ID番号の割当て 276 257 objidList.each do |objName, objidNumber| 277 258 if objidList[objName].nil? 278 # 以ä¸ã§ï¼@objidValuesãæ¸ãæãã¦ãã259 # 以下で,@objidValuesを書き換えている 279 260 objidList[objName] = unusedObjidList.shift 280 261 end … … 283 264 284 265 # 285 # éçAPIãã¼ã¿ãã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³ãã¼ã¿ï¼$cfgDataï¼ã«æ ¼ç´266 # 静的APIデータをコンフィギュレーションデータ($cfgData)に格納 286 267 # 287 268 $cfgFileInfo.each do |cfgInfo| 288 # ããªããã»ããµãã£ã¬ã¯ãã£ãã¯èªã¿é£ã°ã269 # プリプロセッサディレクティブは読み飛ばす 289 270 next if cfgInfo.has_key?(:DIRECTIVE) 290 271 291 272 apiDef = $apiDefinition[cfgInfo[:APINAME]] 292 # ç°ãªããã§ã¼ãºã®éçAPIã¯èªã¿é£ã°ã273 # 異なるフェーズの静的APIは読み飛ばす 293 274 next if apiDef[:PHASE] != phase 294 275 … … 296 277 apiIndex = cfgInfo[:INDEX] 297 278 if !apiIndex.nil? 298 # ã·ã³ãã«ãã¡ã¤ã«ã«éçAPIã®ã¤ã³ããã¯ã¹ãåå¨ããªããã°èªã¿é£299 # ã°ãï¼ifdefçã§æ¶ããéçAPIï¼279 # シンボルファイルに静的APIのインデックスが存在しなければ読み飛 280 # ばす(ifdef等で消えた静的API) 300 281 symbol = "#{$cfg1_prefix}static_api_#{apiIndex}" 301 282 next unless @symbolAddress.has_key?(symbol) 302 283 end 303 284 304 # ãã©ã¡ã¼ã¿ã®å¤ãããã·ã¥å½¢å¼ã«æ ¼ç´285 # パラメータの値をハッシュ形式に格納 305 286 params = {} 306 287 apiDef[:PARAM].each do |apiParam| 307 288 next unless apiParam.has_key?(:NAME) 308 289 paramName = apiParam[:NAME] 309 next unless cfgInfo.has_key?(paramName) # ãã©ã¡ã¼ã¿ããªãå ´å290 next unless cfgInfo.has_key?(paramName) # パラメータがない場合 310 291 paramData = cfgInfo[paramName] 311 292 … … 322 303 end 323 304 324 # ãã¡ã¤ã³IDã追å305 # ドメインIDを追加 325 306 if cfgInfo.has_key?(:DOMAIN) 326 307 domainName = cfgInfo[:DOMAIN] … … 328 309 end 329 310 330 # ã¯ã©ã¹IDã追å311 # クラスIDを追加 331 312 if cfgInfo.has_key?(:CLASS) 332 313 if apiIndex.nil? … … 339 320 end 340 321 341 # API åï¼ãã¡ã¤ã«åï¼è¡çªå·ã追å322 # API名,ファイル名,行番号を追加 342 323 params[:apiname] = cfgInfo[:APINAME] 343 324 params[:_file_] = cfgInfo[:_FILE_] 344 325 params[:_line_] = cfgInfo[:_LINE_] 345 326 346 # ç»é²ãã¼ã決å®ãã327 # 登録キーを決定する 347 328 if apiDef.has_key?(:KEYPAR) 348 329 keyParam = params[apiDef[:KEYPAR].to_sym] 349 330 key = keyParam.val 350 331 if $cfgData[apiSym].has_key?(key) 351 # ç»é²ãã¼ã®éè¤332 # 登録キーの重複 352 333 error("E_OBJ: #{apiDef[:KEYPAR]} `#{keyParam}' " \ 353 334 "is duplicated in #{cfgInfo[:APINAME]}", … … 362 343 363 344 # 364 # ID çªå·åºåãã¡ã¤ã«ã®çæ345 # ID番号出力ファイルの生成 365 346 # 366 347 def self.OutputId(fileName) … … 375 356 376 357 # 377 # ãã¹2ã®å¦ç358 # パス2の処理 378 359 # 379 360 def Pass2 380 361 # 381 # ãã¹1ããå¼ã渡ãããæ 382 å ±ããã¡ã¤ã«ããèªã¿è¾¼ã 362 # パス1から引き渡される情報をファイルから読み込む 383 363 # 384 364 db = PStore.new(CFG1_OUT_DB) … … 393 373 394 374 # 395 # ãã¹1ã®çæç©ãèªã¿è¾¼ã375 # パス1の生成物を読み込む 396 376 # 397 377 Cfg1Out.Read() 398 abort if $errorFlag # ã¨ã©ã¼çºçæã¯abortãã399 400 # 401 # å¤åå¾ã·ã³ãã«ãã°ãã¼ãã«å¤æ°ã¨ãã¦å®ç¾©ãã378 abort if $errorFlag # エラー発生時はabortする 379 380 # 381 # 値取得シンボルをグローバル変数として定義する 402 382 # 403 383 DefineSymbolValue() 404 384 405 385 # 406 # çæã¹ã¯ãªããï¼trbãã¡ã¤ã«ï¼ãå®è¡ãã386 # 生成スクリプト(trbファイル)を実行する 407 387 # 408 388 $trbFileNames.each do |trbFileName| … … 415 395 416 396 # 417 # ID çªå·åºåãã¡ã¤ã«ã®çæ397 # ID番号出力ファイルの生成 418 398 # 419 399 if !$idOutputFileName.nil? … … 422 402 423 403 # 424 # ãã¹3ã«å¼ã渡ãæ 425 å ±ããã¡ã¤ã«ã«çæ 404 # パス3に引き渡す情報をファイルに生成 426 405 # 427 406 if $omitOutputDb.nil? -
Property svn:mime-type
changed from
Note:
See TracChangeset
for help on using the changeset viewer.