Changes between Initial Version and Version 1 of tips/abrex


Ignore:
Timestamp:
Mar 7, 2015, 3:24:57 PM (9 years ago)
Author:
fujisft-shigihara
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • tips/abrex

    v1 v1  
     1{{{
     2#!html
     3<div style="border:3px solid black;text-align:center;font-size:30pt;width:500px;">
     4ABREXの使い方
     5</div>
     6}}}
     7[[BR]]
     8
     9= はじめに =
     10* AUTOSARでは、コンポーネント間のデータのやりとりにXMLを用いる(拡張子はarxml)
     11* BSWのコンフィギュレーション情報もXMLで定義する
     12  * 基本的に人が読み書きすることは想定されておらず、ツールで生成するのが一般的である
     13* BSW単体でコンフィギュレーションを行いたい場合や、BSWを開発する際にはパラメータを直接指定して、arxmlファイルを作成したいニーズがある
     14* arxmlファイルを直接編集するのは効率的ではないので、簡略化したテキストデータからarxmlファイルを生成できるツールがあれば有用である
     15* TOPPERSプロジェクトでは、AUTOSARのRTE、BSWの開発に際し、[http://ja.wikipedia.org/wiki/YAML YAML]フォーマットで記述したデータを、arxmlファイルに変換するツールであるABREX(AUTOSAR BSW and RTE XML Generator)を開発した
     16
     17----
     18
     19= 入手方法 =
     20* ABREXは、[http://www.toppers.jp/atk2-download.html TOPPERS/ATK2]に同梱されている
     21  * どのパッケージにも同梱されているので、ABREXを使用したいだけの場合は、どれか1つのATK2をダウンロードすればよい
     22* ATK2は、tar.gz形式で公開されているので、解凍ソフト等を使用して、解凍する
     23* 解答したフォルダの{{{utils\abrex\abrex.rb}}}がABREXの実行スクリプトである
     24
     25----
     26
     27= 使い方 =
     28== 実行環境 ==
     29* ABREXはRubyスクリプトで開発されているので、Rubyの実行環境が必要となる
     30* [https://www.cygwin.com/ Cygwin]に含まれる以下のバージョンのRubyで動作確認されている
     31  * {{{ruby 1.9.3p327 (2012-11-10 revision 37606) [i386-cygwin]}}}
     32* Windows環境であれば、[http://rubyinstaller.org/ Ruby Installer for Windows]を使うと簡単にRubyの実行環境が構築できる
     33
     34== YAMLファイルの書き方 ==
     35* 最上位のレイヤがパッケージ名、その次がECUモジュール名となる
     36* ECUモジュール名の下に該当モジュールに含まれるパラメータ名をキーとして、パラメータコンテナと値をハッシュ形式で記述する
     37  * 複数の同一パラメータを定義する場合は、キーをショートネームとして、パラメータの1つとして{{{DefinitionRef}}}でパラメータ名を記述する
     38* サブコンテナは、ハッシュをネストすることで表現する
     39* コンテナへの参照は、YAMLファイルに定義したパッケージ名に従ってパスを記述する
     40* YAMLファイルに記載しないarxmlファイル内の情報は固定値でABREXが生成する
     41=== OSの例 ===
     42<変換前(YAMLファイル)>
     43{{{
     44Os:
     45  Os:
     46    OsOS:
     47      OsStackMonitoring: 1
     48      OsStatus: EXTENDED
     49      OsUseGetServiceId: 1
     50      OsUseParameterAccess: 1
     51      OsScalabilityClass: SC1
     52      OsHooks:
     53        OsErrorHook: 0
     54        OsPostTaskHook: 0
     55        OsPreTaskHook: 0
     56        OsProtectionHook: 0
     57        OsShutdownHook: 0
     58        OsStartupHook: 0
     59    TASK1:
     60      DefinitionRef: OsTask
     61      OsTaskActivation: 1
     62      OsTaskPriority: 10
     63      OsTaskSchedule: FULL
     64      OsTaskEventRef: /Os/Os/EVENT1
     65    EVENT1:
     66      DefinitionRef: OsEvent
     67}}}
     68<変換後(arxmlファイル)>
     69{{{
     70<?xml version="1.0" encoding="EUC-JP"?>
     71<AUTOSAR xmlns="http://autosar.org/schema/r4.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://autosar.org/schema/r4.0 AUTOSAR_4-0-3_STRICT.xsd">
     72        <AR-PACKAGES>
     73                <AR-PACKAGE>
     74                        <SHORT-NAME>Os</SHORT-NAME>
     75                        <ELEMENTS>
     76                                <ECUC-MODULE-CONFIGURATION-VALUES>
     77                                        <SHORT-NAME>Os</SHORT-NAME>
     78                                        <DEFINITION-REF DEST="ECUC-MODULE-DEF">/AUTOSAR/EcucDefs/Os</DEFINITION-REF>
     79                                        <ECUC-DEF-EDITION>4.2.0</ECUC-DEF-EDITION>
     80                                        <IMPLEMENTATION-CONFIG-VARIANT>VARIANT-PRE-COMPILE</IMPLEMENTATION-CONFIG-VARIANT>
     81                                        <CONTAINERS>
     82                                                <ECUC-CONTAINER-VALUE>
     83                                                        <SHORT-NAME>OsOS</SHORT-NAME>
     84                                                        <DEFINITION-REF DEST="ECUC-PARAM-CONF-CONTAINER-DEF">/AUTOSAR/EcucDefs/Os/OsOS</DEFINITION-REF>
     85                                                        <PARAMETER-VALUES>
     86                                                                <ECUC-NUMERICAL-PARAM-VALUE>
     87                                                                        <DEFINITION-REF DEST="ECUC-BOOLEAN-PARAM-DEF">/AUTOSAR/EcucDefs/Os/OsOS/OsStackMonitoring</DEFINITION-REF>
     88                                                                        <VALUE>1</VALUE>
     89                                                                </ECUC-NUMERICAL-PARAM-VALUE>
     90                                                                <ECUC-TEXTUAL-PARAM-VALUE>
     91                                                                        <DEFINITION-REF DEST="ECUC-ENUMERATION-PARAM-DEF">/AUTOSAR/EcucDefs/Os/OsOS/OsStatus</DEFINITION-REF>
     92                                                                        <VALUE>EXTENDED</VALUE>
     93                                                                </ECUC-TEXTUAL-PARAM-VALUE>
     94                                                                <ECUC-NUMERICAL-PARAM-VALUE>
     95                                                                        <DEFINITION-REF DEST="ECUC-BOOLEAN-PARAM-DEF">/AUTOSAR/EcucDefs/Os/OsOS/OsUseGetServiceId</DEFINITION-REF>
     96                                                                        <VALUE>1</VALUE>
     97                                                                </ECUC-NUMERICAL-PARAM-VALUE>
     98                                                                <ECUC-NUMERICAL-PARAM-VALUE>
     99                                                                        <DEFINITION-REF DEST="ECUC-BOOLEAN-PARAM-DEF">/AUTOSAR/EcucDefs/Os/OsOS/OsUseParameterAccess</DEFINITION-REF>
     100                                                                        <VALUE>1</VALUE>
     101                                                                </ECUC-NUMERICAL-PARAM-VALUE>
     102                                                                <ECUC-TEXTUAL-PARAM-VALUE>
     103                                                                        <DEFINITION-REF DEST="ECUC-ENUMERATION-PARAM-DEF">/AUTOSAR/EcucDefs/Os/OsOS/OsScalabilityClass</DEFINITION-REF>
     104                                                                        <VALUE>SC1</VALUE>
     105                                                                </ECUC-TEXTUAL-PARAM-VALUE>
     106                                                        </PARAMETER-VALUES>
     107                                                        <SUB-CONTAINERS>
     108                                                                <ECUC-CONTAINER-VALUE>
     109                                                                        <SHORT-NAME>OsHooks</SHORT-NAME>
     110                                                                        <DEFINITION-REF DEST="ECUC-PARAM-CONF-CONTAINER-DEF">/AUTOSAR/EcucDefs/Os/OsOS/OsHooks</DEFINITION-REF>
     111                                                                        <PARAMETER-VALUES>
     112                                                                                <ECUC-NUMERICAL-PARAM-VALUE>
     113                                                                                        <DEFINITION-REF DEST="ECUC-BOOLEAN-PARAM-DEF">/AUTOSAR/EcucDefs/Os/OsOS/OsHooks/OsErrorHook</DEFINITION-REF>
     114                                                                                        <VALUE>0</VALUE>
     115                                                                                </ECUC-NUMERICAL-PARAM-VALUE>
     116                                                                                <ECUC-NUMERICAL-PARAM-VALUE>
     117                                                                                        <DEFINITION-REF DEST="ECUC-BOOLEAN-PARAM-DEF">/AUTOSAR/EcucDefs/Os/OsOS/OsHooks/OsPostTaskHook</DEFINITION-REF>
     118                                                                                        <VALUE>0</VALUE>
     119                                                                                </ECUC-NUMERICAL-PARAM-VALUE>
     120                                                                                <ECUC-NUMERICAL-PARAM-VALUE>
     121                                                                                        <DEFINITION-REF DEST="ECUC-BOOLEAN-PARAM-DEF">/AUTOSAR/EcucDefs/Os/OsOS/OsHooks/OsPreTaskHook</DEFINITION-REF>
     122                                                                                        <VALUE>0</VALUE>
     123                                                                                </ECUC-NUMERICAL-PARAM-VALUE>
     124                                                                                <ECUC-NUMERICAL-PARAM-VALUE>
     125                                                                                        <DEFINITION-REF DEST="ECUC-BOOLEAN-PARAM-DEF">/AUTOSAR/EcucDefs/Os/OsOS/OsHooks/OsProtectionHook</DEFINITION-REF>
     126                                                                                        <VALUE>0</VALUE>
     127                                                                                </ECUC-NUMERICAL-PARAM-VALUE>
     128                                                                                <ECUC-NUMERICAL-PARAM-VALUE>
     129                                                                                        <DEFINITION-REF DEST="ECUC-BOOLEAN-PARAM-DEF">/AUTOSAR/EcucDefs/Os/OsOS/OsHooks/OsShutdownHook</DEFINITION-REF>
     130                                                                                        <VALUE>0</VALUE>
     131                                                                                </ECUC-NUMERICAL-PARAM-VALUE>
     132                                                                                <ECUC-NUMERICAL-PARAM-VALUE>
     133                                                                                        <DEFINITION-REF DEST="ECUC-BOOLEAN-PARAM-DEF">/AUTOSAR/EcucDefs/Os/OsOS/OsHooks/OsStartupHook</DEFINITION-REF>
     134                                                                                        <VALUE>0</VALUE>
     135                                                                                </ECUC-NUMERICAL-PARAM-VALUE>
     136                                                                        </PARAMETER-VALUES>
     137                                                                </ECUC-CONTAINER-VALUE>
     138                                                        </SUB-CONTAINERS>
     139                                                </ECUC-CONTAINER-VALUE>
     140                                                <ECUC-CONTAINER-VALUE>
     141                                                        <SHORT-NAME>TASK1</SHORT-NAME>
     142                                                        <DEFINITION-REF DEST="ECUC-PARAM-CONF-CONTAINER-DEF">/AUTOSAR/EcucDefs/Os/OsTask</DEFINITION-REF>
     143                                                        <PARAMETER-VALUES>
     144                                                                <ECUC-NUMERICAL-PARAM-VALUE>
     145                                                                        <DEFINITION-REF DEST="ECUC-INTEGER-PARAM-DEF">/AUTOSAR/EcucDefs/Os/OsTask/OsTaskActivation</DEFINITION-REF>
     146                                                                        <VALUE>1</VALUE>
     147                                                                </ECUC-NUMERICAL-PARAM-VALUE>
     148                                                                <ECUC-NUMERICAL-PARAM-VALUE>
     149                                                                        <DEFINITION-REF DEST="ECUC-INTEGER-PARAM-DEF">/AUTOSAR/EcucDefs/Os/OsTask/OsTaskPriority</DEFINITION-REF>
     150                                                                        <VALUE>10</VALUE>
     151                                                                </ECUC-NUMERICAL-PARAM-VALUE>
     152                                                                <ECUC-TEXTUAL-PARAM-VALUE>
     153                                                                        <DEFINITION-REF DEST="ECUC-ENUMERATION-PARAM-DEF">/AUTOSAR/EcucDefs/Os/OsTask/OsTaskSchedule</DEFINITION-REF>
     154                                                                        <VALUE>FULL</VALUE>
     155                                                                </ECUC-TEXTUAL-PARAM-VALUE>
     156                                                        </PARAMETER-VALUES>
     157                                                        <REFERENCE-VALUES>
     158                                                                <ECUC-REFERENCE-VALUE>
     159                                                                        <DEFINITION-REF DEST="ECUC-REFERENCE-DEF">/AUTOSAR/EcucDefs/Os/OsTask/OsTaskEventRef</DEFINITION-REF>
     160                                                                        <VALUE-REF DEST="ECUC-CONTAINER-VALUE">/Os/Os/EVENT1</VALUE-REF>
     161                                                                </ECUC-REFERENCE-VALUE>
     162                                                        </REFERENCE-VALUES>
     163                                                </ECUC-CONTAINER-VALUE>
     164                                                <ECUC-CONTAINER-VALUE>
     165                                                        <SHORT-NAME>EVENT1</SHORT-NAME>
     166                                                        <DEFINITION-REF DEST="ECUC-PARAM-CONF-CONTAINER-DEF">/AUTOSAR/EcucDefs/Os/OsEvent</DEFINITION-REF>
     167                                                </ECUC-CONTAINER-VALUE>
     168                                        </CONTAINERS>
     169                                </ECUC-MODULE-CONFIGURATION-VALUES>
     170                        </ELEMENTS>
     171                </AR-PACKAGE>
     172        </AR-PACKAGES>
     173</AUTOSAR>
     174}}}
     175
     176== 実行コマンド ==
     177* 作成したYAMLファイルを引数として、abrex.rbを実行する
     178{{{
     179$ ruby abrex.rb ./sample.yaml
     180}}}
     181* 入力したYAMLファイルの情報に対応するarxmlファイルが、入力ファイル名の拡張子をarxmlに変更したファイルに出力される
     182  * 上記実行例の場合、sample.arxmlが出力される
     183
     184----
     185
     186= コンテナ情報に関して =
     187* YAMLファイルに記載したパラメータが整数型かどうか等は、ABREXに同梱されているparam_info.yamlに定義されている
     188* ABREXに同梱されているparam_info.yamlでは、TOPPERSプロジェクトから公開されているモジュールで使用するパラメータのみ定義されている
     189* param_info.yamlに別のBSWのパラメータを定義したい場合、AUTOSARから公開されているECUコンフィギュレーションパラメータコンテナ情報ファイルを入力として、ABREXで作成することができる
     190== param_info.yaml作成方法 ==
     191* ECUコンフィギュレーションパラメータコンテナ情報ファイル(AUTOSAR_MOD_ECUConfigurationParameters.arxml)を入手する
     192  * AUTOSAR公式サイトへアクセス:http://www.autosar.org
     193  * {{{Specifications}}} -> {{{Release X.X}}} -> {{{Methodology and Templates}}} -> {{{Templates}}} -> {{{Standard Specifications}}} -> {{{AUTOSAR_MOD_ECUConfigurationParameters.zip}}}をダウンロード
     194    * ABREX開発時に使用したのは、{{{Release 4.0}}}であり、これ以外のバージョンでは動作未確認である
     195  * 解凍すると"AUTOSAR_MOD_ECUConfigurationParameters.arxml"となる
     196* パラメータ情報を作成したいBSWモジュール名をABREXソースコードに設定する
     197  * {{{MakeParamInfo}}}メソッド内の配列{{{aTargetModule}}}に定義する
     198{{{
     199# 読み込み対象モジュール
     200aTargetModule = ["Rte", "Os", "Com", "PduR", "CanIf", "Can", "EcuC", "EcuM", "WdgM", "WdgIf", "Wdg", "Dem"]
     201}}}
     202* ABREXに-pオプションを付けて実行する
     203{{{
     204$ ruby abrex.rb -p AUTOSAR_MOD_ECUConfigurationParameters.arxml
     205}}}
     206  * 各パラメータコンテナのデータ型、外部参照型の参照先情報などが、param_info.yamlに出力される
     207== 注意事項 ==
     208* ABREXによるYAML→arxml変換実行時、param_info.yamlに含まれないキー名が登場した場合、エラー終了する
     209* サブコンテナ名はparam_info.yamlに含まれず、YAMLファイルに記述した名称が正しいものとして、サブコンテナを生成する
     210* 設定値の妥当性等のチェックは一切行わない
     211
     212----
     213
     214= 応用編 =
     215== 複数YAMLファイルの入力 ==
     216* 引数のYAMLファイルは複数指定することができ、すべてのYAMLファイルの情報をマージしたXMLファイルを生成する
     217* 同じパスのコンテナが異なるファイルに存在する場合、1つのコンテナにマージする
     218* 例えば、以下のa.yamlとb.yamlを入力した場合、MAIN_HW_COUNTERには両方のファイルに指定されたすべてのパラメータが設定されたarxmlファイルとなる
     219  * 同じパスのパラメータが複数のファイルに含まれる場合は、多重度が*と判断して、複数のコンテナを生成する(パラメータ毎の多重度情報は保持しない)
     220<a.yaml>
     221{{{
     222Os:
     223  Os:
     224    MAIN_HW_COUNTER:
     225      DefinitionRef: OsCounter
     226      OsCounterMaxAllowedValue: 0x7FFFFFFF
     227      OsCounterTicksPerBase: 10
     228      OsCounterMinCycle: 4000
     229      OsCounterType: HARDWARE
     230      OsSecondsPerTick: 1.666666e-08
     231      OsCounterIsrRef: /Os/Os/ISR1
     232}}}
     233<b.yaml>
     234{{{
     235Os:
     236  Os:
     237    MAIN_HW_COUNTER:
     238      OsCounterAccessingApplication: OSAP1
     239}}}
     240
     241== arxmlファイルからYAMLファイルを作成する(逆変換) ==
     242* ABREXでは、作成済みのarxmlファイルから、YAMLファイルを作成することが出来る
     243* -iオプションに、arxmlファイルを引数として与え、実行する
     244{{{
     245$ ruby abrex.rb -i sample.arxml
     246}}}
     247* 入力したXMLファイルの情報に対応するYAMLファイルが、入力ファイル名の拡張子をyamlに変更したファイルに出力される
     248  * 上記例の場合、sample.yaml
     249* 逆変換において、複数のarxmlファイルを指定した場合は、入力されたarxmlファイル毎に、YAMLファイルを個別に出力する
     250