...

日本語 - IAR Systems

by user

on
Category: Documents
11

views

Report

Comments

Transcript

日本語 - IAR Systems
イントロダクション
IAR visualSTATE®
版権事項
© Copyright 2009 IAR Systems AB.
IAR Systems AB が事前に書面で同意した場合を除き、このドキュメント
を複製することはできません。このドキュメントに記載するソフトウェ
アは、正当な権限の範囲内でインストール、使用、およびコピーするこ
とができます。
免責事項
このドキュメントの内容は、予告なく変更されることがあります。また、
IAR Systems 社では、このドキュメントの内容に関して一切責任を負い
ません。記載内容には万全を期していますが、万一、誤りや不備がある
場合でも IAR Systems 社はその責任を負いません。
IAR Systems 社、その従業員、その下請企業、またはこのドキュメント
の作成者は、特殊な状況で、直接的、間接的、または結果的に発生した
損害、損失、費用、課金、権利、請求、逸失利益、料金、またはその他
の経費に対して一切責任を負いません。
商標
visualSTATE、IAR Systems、IAR Embedded Workbench および IAR Systems
のロゴタイプは、IAR Systems AB が所有権を有する商標または登録商標
です。
Unified Modeling Language と UML は、Object Management Group, Inc. の登
録商標または商標です。
Microsoft および Windows は、Microsoft Corporation の登録商標です。
その他の製品名はすべて、各製品名の所有者の商標または登録商標です。
改版情報
初版 : 2009 年 10 月
部品番号 : GSVS-1-J
本ガイドは IAR visualSTATE® のバージョン 6.3 またはそれ以降を対象と
します。
内部参照 : IJOA
目次
はじめに
....................................................................................................... 7
本ガイドの対象者 ..............................................................................7
その他のドキュメント .....................................................................7
オンラインヘルプ .....................................................................8
推奨 Web サイト .......................................................................8
表記規則 ................................................................................................8
表記規則 .....................................................................................8
命名規約 .....................................................................................9
概要
................................................................................................................ 11
ツールセット .....................................................................................11
重要な機能および利点 ...................................................................12
高水準の設計 ...........................................................................12
設計モデルからの自動コード生成 .......................................12
設計モデル上のシミュレーション / 検証 ............................12
設計モデルの正式モデルチェック .......................................13
ターゲットハードウェアのモデルデバッグ .......................13
UML ( 統一モデリング言語表記法 ) ....................................14
自然な割込み処理 ...................................................................14
RTOS との容易な統合 ............................................................14
ハードウェア入手前の設計のプロトタイプ化 ...................15
非同期イベントの処理 ...........................................................15
基本と概念
................................................................................................ 17
制御ロジックとデータ操作、そしてデバイスドライバ .....17
アプリケーションに必要なコード .............................................18
有限オートマトンモデル ...............................................................19
ステート ...................................................................................19
イベント ...................................................................................20
トランジション .......................................................................20
アクション ...............................................................................21
目次
GSVS-1
3
サポートされている式の構文 ...............................................21
トランジション上のガード条件を表現するプリミ
ティブ .......................................................................................22
有限オートマトンの階層 .......................................................22
用語 .......................................................................................................23
イントロダクション
........................................................................... 25
開発サイクル .....................................................................................25
階層 .......................................................................................................26
サンプルプロジェクト ...................................................................27
ワークスペースの作成 ...................................................................28
オプションの設定 ............................................................................29
生成されたコードの出力先ディレクトリの指定 ...............30
ナビゲータでのファイルの再ロード ........................................30
モデルの設計
........................................................................................... 33
ステートチャート設計ツールの使用を開始する ..................33
まずステートチャートを作成する .............................................34
ステートの作成 .......................................................................34
トランジションの作成 ...........................................................34
初期ステートの作成 ...............................................................36
トランジションとともに使用するアクション関数の
作成 ...........................................................................................36
複合ステート .....................................................................................38
並列処理領域からなる複合ステートの作成 .......................38
相互に排他的なサブステートからなる複合ステートの
作成 ...........................................................................................38
ステートチャート図の例 ...............................................................39
外部イベントによってトリガされるトランジション .......39
ブール条件によって保護されるトランジション ...............39
エントリ / イグジットリアクション ....................................40
モデルのテスト
..................................................................................... 41
モデルの検証 .....................................................................................41
グラフィックシミュレーション ...........................................41
4
イントロダクション
IAR visualSTATE の使用
GSVS-1
ターゲットアクションでのモデルのテスト ...........................41
検証 .......................................................................................................42
モデルの検証 .....................................................................................43
プロジェクトのトレース ...............................................................43
モデルに必要な C コード
............................................................... 45
ステートチャートからのコード生成 ........................................45
アプリケーションの完成 ...............................................................45
コード生成ツールにより生成されたコード .......................45
ユーザの作成したコード .......................................................46
C ファイルの統合 ............................................................................46
イベント処理のコードサンプル ...........................................47
visualSTATE API コードのサンプル .....................................48
実行 ...........................................................................................49
visualSTATE の制御ロジックコードについて .....................50
中間コードの生成 ...................................................................50
可読コードの生成 ...................................................................53
追加機能
..................................................................................................... 55
プロジェクトの文書化 ...................................................................55
プロトタイプの作成 ........................................................................56
目次
GSVS-1
5
6
イントロダクション
IAR visualSTATE の使用
GSVS-1
はじめに
本ガイドの対象者
本ガイドは、PDF 形式で付属のリファレンス情報を英語で読むことなく、
visualSTATE® の使用を開始したいというユーザ向けです。また、以下に
ついて十分な知識があるユーザを対象としています。
●
C プログラミング言語
●
ステート / イベントのモデリングの基本事項
●
組込みシステム用アプリケーションの開発
●
ホストコンピュータのオペレーティングシステム
visualSTATE に組み込まれている開発ツールの詳細については、
『visualSTATE reference guide』、『IAR visualSTATE』、『visualSTATE
concept guide』を参照してください。
その他のドキュメント
visualSTATE 開発ツールについては、一連の英文ガイドで説明しています。
知りたい情報に対応するドキュメントを以下に示します。
●
visualSTATE スイートのインストールについては、
『visualSTATE
Installation Guide』
●
visualSTATE の基本概念および設計思想については、
『visualSTATE
concept guide』
●
visualSTATE の実践的なチュートリアルは、『visualSTATE Quick Start
Tutorial』
●
visualSTATE のグラフィカルユーザインタフェースで使用可能なメ
ニューやダイアログボックス、ウィンドウについては、『visualSTATE
User Guide』
●
コントラクト、エレメント、有限オートマトンモデリングの基本事項
のリファレンス情報は、『visualSTATE reference guide』
●
visualSTATE API の使用については、『visualSTATE API Guide』
これらのガイドはすべて、PDF フォーマットでインストール用メディア
に収録されています。お使いの製品にインストールされている内容に
よっては、[ ヘルプ ] メニューから他のドキュメントも表示できる場合が
あります。
はじめに
GSVS-1
7
オンラインヘルプ
visualSTATE Navigator ナビゲータ、ステートチャート設計ツール、機能
テストツールアプリケーションでは、ヘルプが英語で提供されています。
オンラインヘルプにアクセスするには、[ ヘルプ ] メニューを開くか、
F1 キーを押してください。
[ ナビゲータ設定 ] ダイアログボックスおよびナビゲータの [ プロジェク
ト ]> オプションダイアログボックスのオプションについて日本語のオン
ラインヘルプを表示するには、オプションを選択して右クリックし、
Shift+F1 キーを押します。
推奨 Web サイト
●
IAR システムズの Web サイト (www.iarsys.co.jp) では、アプリケーショ
ンノートおよびその他の製品情報を公開しています。
●
オブジェクト・マネージメント・グループの Web サイト(www.uml.org)
には、UML の仕様や UML についての記事、その他の資料があります。
表記規則
製品のインストール内容のディレクトリについて言及している場合
(visualSTATE 6.n\Doc など)、c:\Program Files\IAR Systems\
visualSTATE 6.n\Doc というようにディレクトリへのフルパスを前提と
します。
表記規則
このガイドでは、次の表記規則を使用します。
スタイル
用途
コンピュータ
• ソースコードの例、ファイルパス。
• 2 進数、16 進数、8 進数。
太字
画面に表示されるメニュー名、メニューコマンド、
ボタン、およびダイアログボックス。
斜体
• 本ガイドや他のガイドへのクロスリファレンスを示
します。
• 強調。
<filename>.<ext>
visualSTATE コード生成ツールによって生成されたファ
イル。
開発やプログラミングについてのヒント。
ワーニング
8
イントロダクション
IAR visualSTATE の使用
GSVS-1
命名規約
以下の命名規約は、このガイドに記述されている IAR システムズの製品
およびツールで使用されています。
ブランド名
一般名称
IAR visualSTATE
visualSTATE
IAR visualSTATE ナビゲータ
ナビゲータ
IAR visualSTATE ステートチャート設計ツール
ステートチャート設計ツール
IAR visualSTATE 形式検証ツール
形式検証ツール
IAR visualSTATE 機能テストツール
機能テストツール
IAR visualSTATE コード生成ツール
コード生成ツール
IAR visualSTATE レポート生成ツール
レポート生成ツール
IAR visualSTATE ベーシック API
ベーシック API
IAR visualSTATE エキスパート API
エキスパート API
IAR visualSTATE エキスパート DLL
エキスパート DLL
IAR visualSTATE プロジェクト
プロジェクト
IAR visualSTATE システム
システム
はじめに
GSVS-1
9
10
イントロダクション
IAR visualSTATE の使用
GSVS-1
概要
ツールセット
visualSTATE® は、一般的なステート / イベントシステム、中でも有限
オートマトンの設計、テスト、形式検証(モデルチェック)
、コード生
成、ハードウェアの高度なデバッグのためのツールセットです。
visualSTATE は、UML (Unified Modeling Language =統一モデリング言語表
記法 ) の有限オートマンサブセットに基づいており、ミーリー型とムー
ア型の表記を階層および並列処理の概念と組み合わせています。
visualSTATE は、完全統合型の次のツールで構成されています。
ナビゲータ:テストおよびシミュレーションを通じたモデル設計からプ
ロジェクトの文書化まで、全体的な visualSTATE プロジェクトの処理を
行うプロジェクト管理ツールです。ナビゲータを使用して、visualSTATE
ソフトウェアの他のモジュールにアクセスしてそれらを有効化し、形式
検証ツールやコード生成ツール、レポート生成ツールのオプションを設
定します。
ステートチャート設計ツール:UML 表記を使用してステートチャートを
設計するアプリケーション。
形式検証ツール:ステートチャート設計ツールで作成されたモデルの動
的形式検証のためのテストツール。
機能テストツール:ステートチャート設計ツールで作成されたモデルを、
シミュレーション、解析、デバッグするためのアプリケーション。機能
テストツールを使用して、設計の機能をテストできます。RealLink 機能
を使用して、ターゲットアプリケーションで visualSTATE モデルをテス
トでき、C-SPYLink プラグインを用いて、IAR Embedded Workbench®
C-SPY デバッガで、visualSTATE アプリケーションの高度な有限オート
マトンデバッグを実行することができます。
コード生成ツール:コード生成ツールは、ステートチャート設計ツール
で作成されたモデルに基づいて、コードを自動生成できます。自動生成
されたコードは、visualSTATE アプリケーションプログラミングインタ
フェース (API) および手動で作成されたコードと組み合わせる必要があ
ります。
レポート生成ツール:設計やテスト、コード生成などプロジェクトにつ
いて最新のレポートを作成するためのツール。
概要
GSVS-1
11
重要な機能および利点
高水準の設計
グラフィカル設計ツールは非常に単純なことでも指定しなければならな
いため、操作が面倒になりがちですが、UML 有限オートマトンサブ
セットでは有限オートマトンを適切な抽象レベルで設計できます。UML
有限オートマトンサブセットは階層と並列処理を統合しているため、オ
ペレーティングシステムを使用する場合に、複数のタスクや処理を含め
ずに並列処理の動作をモデル化できます。場合によっては、オペレー
ティングシステムの必要性を排除することも可能です。
また、高水準の設計によって、プロダクトマネージャなどプログラマ以外
の関係者と設計モデルのレベルで制御ロジックを協議しやすくなります。
設計モデルからの自動コード生成
有限オートマトンのロジックにコードを自動生成することで、複雑な
switch 文や if 文を手動で作成したり、
関数ポインタテーブルによる手法
で制約が課されるのを回避します。
生成されたコードでは、ISO/ANSI への準拠を除いて、コンパイラ固有
の機能について想定することはなく、ISO/ANSI に完全に準拠していな
いコンストラクトは使用しません。
visualSTATE コード生成ツールを設定すれば、コンパイラ固有のキーワー
ドを使用して、希望するメモリ領域に有限オートマトンコードやデータ
を配置することができます。データサイズエンティティ、モデルでは 8
ビットの表現のみが必要であっても、速度のためにターゲットのアーキ
テクチャに合わせて強制的に 16 ビットまたは 32 ビットにすることがで
きます。MCU ターゲットやコンパイラ、コード標準の要件のバランスを
とるために、コード生成ツールはさまざまな方法で設定できます。
visualSTATE によって生成されたコードは、有限オートマトンシステムの
制御ロジックに重点を置きます。コードのこの部分は手動で変更すべきで
はありません。この理由はいくつかありますが、最も重要なものは設計
が常に制御ロジックの唯一の明示的な表現であるという点です。変更し
なければ、モデルおよび実行するコードが常に同期したままになります。
有限オートマトンコードを手動で変更すると、見つけにくいエラーがス
テートおよび条件に入り込む危険性を常にはらんでしまいます。
設計モデル上のシミュレーション / 検証
設計モデルのシミュレーションでは、最初のバージョンを保存したらす
ぐにソリューションのテストを開始できます。こうすることで、開発プ
ロジェクトのエラーや脱落をハードウェアが利用可能になる前に発見で
きます。
12
イントロダクション
IAR visualSTATE の使用
GSVS-1
設計モデルの正式モデルチェック
正式な検証によって、テストが難しいコードの潜在的な問題を識別し
やすくなります。たとえば、特定の回数の入口と出口の後に、ブロック
するトランジションのためにステートが終了できないことがあります。
こう意図したのでなければ、従来のテスト方法ではこの問題は非常に
発見が難しいことがあります。
ターゲットハードウェアのモデルデバッグ
C レベルでの有限オートマトンコードのデバッグは通常、数多くの実装の
詳細によって設計が見えにくくなりやすいため困難です。IAR visualSTATE
を使用すれば、設計図に直接フィードバックを受けながらターゲットハー
ドウェアでデバッグができ、どのステート構成がアクティブで、どのトラ
ンジションを使用してステート構成を入力したのかが正確に分かります。
IAR Embedded Workbench も使用した場合は、C-SPYLink 機能を使用し
て、高水準の設計モデルフィードバックを直接 IAR C-SPY デバッガで受
けることもできます。C-SPYLink には、実行時のステート図にグラ
フィックアニメーションが含まれており、C レベルではなく有限オート
マトンレベルでブレークポイントを設定する機能や、トレースおよびロ
グ機能が備わっています。
異なるビルドチェーンを使用したり、C-SPY でハードウェアデバッグソ
リューションを使用できない場合、RealLink 機能を使用すれば、RS232
ポートなど別の通信チャンネル介して有限オートマトンデータをやりと
りできます。
整合性の高いシステムのサポート
visualSTATE は、機能の安全性を含む多くの設計タスクに適しています。
たとえば、機能の安全性の IEC-61508 標準では、より高度な安全整合性
レベルを満たすための設計方法として有限オートマトンを強く推奨して
います。
visualSTATE を使用して有限オートマトンのシステムを設計することで、
正式な検証を活用して、テストスイートでは実質的にカバーしきれない
設計上の問題を発見できます。たとえば、デッドエンド、設計の一部に
到達できない場合や、まったく消費されない入力などを見つけられま
す。「検証、ページ 42」を参照してください。
概要
GSVS-1
13
UML ( 統一モデリング言語表記法 )
visualSTATE では有限オートマトンの UML 表記法が使用されます。表記
法は階層型の有限オートマトンに基づき、並列処理はステート階層のど
のレベルでも使用できます。変数は入力されて条件として使用するか、
設計内で変更できます。アクションはトランジション上で、およびエン
トリとイグジットのリアクションとして使用できます。一部のメモリは
有限オートマトンに適用できます。
UML の概念について詳しくは、2009 年 2 月発行の『OMG Unified Modeling
Language Specification 』バージョン 2.3(www.omg.org で入手可能)を参照
してください。
自然な割込み処理
visualSTATE ランタイム実行エンジンがイベントを処理します。つまり、
環境におけるオカレンスの抽象化です。これによって、割込みが有限
オートマトンに影響する場合に、割込みを visualSTATE イベントに自然
にマップできるようになります。
一般的な visualSTATE アプリケーションは、処理するイベントがあれば、
メインのループの一部として有限オートマトンエンジンを実行します。
割込みルーチンがどのように有限オートマトンエンジンとやりとりする
かは、ユーザ次第です。ただし、割込みルーチンによってメインループ
が検出可能なフラグを設定したり、完全装備の RTOS キューやセマフォ
の使用まで、実装方法はさまざまです。
アプリケーションの構造はいつもと同じです。割込みサービスルーチン
によって、有限オートマトンのシステムへの入力が生成され、ルーチン
は適切なイベントを有限オートマトンのイベントキューに入れてから返
します。
RTOS との容易な統合
visualSTATE を使用して、タスクやタスクの一部の制御ロジックを設計
します。手動でアプリケーションのコードを作成するのと同じように、
優先順位とともにそれぞれのタスクを RTOS を用いて持つシステムに統
合します。
異なるタスクで実行できるように visualSTATE コードを分割するには、
有限オートマトンを異なるシステムに分割してください。visualSTATE シ
ステムは、1 つのユニットとして互いに密接に実行するよう設計された
有限オートマトンのコレクションです。RTOS アプリケーションには必要
な数のシステムを含むことができ、システムは使用可能な RTOS プリミ
ティブを使用して、タスクレベルでやりとりできます。
14
イントロダクション
IAR visualSTATE の使用
GSVS-1
1 つのタスクが複数のシステムを同時に保持できるよう、システムを任
意で RTOS タスクに割当てることができます。
ハードウェア入手前の設計のプロトタイプ化
visualSTATE で生成されたコードは、Altia Design や Microsoft® Visual
Basic®、Microsoft® Visual C++®、Borland® Delphi™ のような RAD ツー
ルを使用して開発されたアプリケーション、または他の好きな GUI ツー
ルキットと容易に統合できます。
非同期イベントの処理
非同期イベントは、visualSTATE エンジンに転送された場合に処理され
ます。これは通常、非同期イベントをイベントキューに入れることで行
われます。イベントがイベントキューにある限り、やがて visualSTATE
の制御ロジックに処理されます。
概要
GSVS-1
15
16
イントロダクション
IAR visualSTATE の使用
GSVS-1
基本と概念
制御ロジックとデータ操作、そしてデバイスドライバ
組込みアプリケーションは通常、制御ロジックとデータ操作、デバイス
ドライバコードの組合せです。
一般的には、ある特定のターゲットプロセッサのデバイスドライバは一
度だけ書かれます。そして、プロジェクト間でライブラリの一部として
共通で使われることがよくあります。ただし、ある製品の機能や仕様を
実装する制御ロジックの部分は、プロジェクトごとに大きく変わる可能
性があります。
visualSTATE® を使用すると、外部デバイスからのイベント入力が制御ロ
ジックで処理されるように、有限オートマトンに基づいてイベント駆動
型のシステム向けに制御ロジックを開発できます。イベントの処理は、
最終的に環境上でアクションへとつながります。これらのアクションは、
ハードウェアのデバイスドライバとやりとりすることがほとんどです。
1 外部で生成された入力は、命令やポーリングを通じてデバイスドライバ
によって処理されます。
2 ドライバは、visualSTATE ランタイム実行エンジンに連絡します。このエ
ンジンは、有限オートマトンモデル(ステートの変更、アクションの実
行など)に応じて動作します。
3 有限オートマトン処理の結果、出力にデバイスドライバを使用するアク
ションを呼び出すことができます。
基本と概念
GSVS-1
17
次の図は、組込みアプリケーションで visualSTATE が処理する部分の概
略です。
アプリケーションに必要なコード
アプリケーションをメインの制御ロジックとして visualSTATE® とまと
めることは容易です。基本的には、そのままアプリケーションコードの
構造を完全に制御することができます。visualSTATE によって作成された
コードを、適切な visualSTATE API 関数を呼び出すことによりアプリ
ケーションに統合します。
visualSTATE 組込みアプリケーションでは、以下のカテゴリのコードが
必要です。
●
visualSTATE コード生成ツールにより生成されたコード
●
visualSTATE API コード
●
イベント前処理やイベントキュー、デバイスドライバ、アクション関
数のために作成されたコード、および visualSTATE API で関数を呼び
出すためのコード。
コード生成ツールによって生成されたコードは、visualSTATE ステート
チャート設計ツールで作成されたステートチャート設計に基づいて、
visualSTATE コード生成ツールによって自動生成されるコードです。コー
ド生成ツールで生成されたコードはターゲットで使用される前に、
visualSTATE API を使用してユーザが作成したコードと統合する必要があ
ります。
コード生成ツールで生成されたコードには、次の 2 種類があります。
18
●
非常に小さい中間コード
●
可読 C コード
イントロダクション
IAR visualSTATE の使用
GSVS-1
どの表現を選択するかは、速度やサイズに関する特定のアプリケーショ
ン要件、および生成されたコードを手動で調べることがどれほど重要か
によって変わってきます。
アクションシーケンスは、すべて visualSTATE によって処理されます。
ただし、各アクション関数にコードを記述する必要があります。
つまり、visualSTATE で生成されたコードを使用して最終的な組込みア
プリケーションを作成するには、以下のことを行う必要があります。
●
イベント処理(デバイスドライバ)、イベントキュー(必要な場合)、
およびアクション関数のコードを手動で記述
●
自分で作成したコードを、visualSTATE API を用いてコード生成ツール
で生成されたコードと統合します。この API は、2 種類のコード間の
インタフェースとなるファイルのセットです。
API の詳しい説明は、
『visualSTATE API Guide』を参照してください。
有限オートマトンモデル
有限オートマトンはステートチャート図を描くことで作成される、抽象
化されたアプリケーションです。有限オートマトンには、作成や理解、
やりとりや変更が簡単な視覚的表現であることなど、重要な設計上の利
点がいくつかあります。
ステートチャートを使用することで、自然な繰返しの多い方法で、歩調
を合わせて仕様やアプリケーションを開発できます。
有限オートマトンモデルは、現在の動作がその前に発生したイベントの
結果である離散型システムの記述に幅広く使用されています。どの時点
でも、システムは可能なステートのいずれかにあります。環境からの入
力に応じて、システムはステートを変えることができます。ステートの
変更が発生すると同時に、環境についてアクションを実行できます。
有限オートマトンは一般的に、次の限られたセットで定義されます。
●
ステート
●
イベント
●
トランジション
●
アクション
●
トランジション上のガード条件を表現するプリミティブ
ステート
ステートは、システムの現在の状況を表します。有限オートマトンのス
テートは、1 つまたは複数のステートの抽象マッピングです。たとえば、
基本と概念
GSVS-1
19
電子機器のサブシステムにおいて On または Off で、ドアは Open または
ClosedAndUnlocked などというようにです。有限オートマトンは、基底に
あるハードウェアの可能な物理ステートをすべてマップする必要はな
く、モデルにとって重要なステートのみをマップすればすみます。有限
オートマトン図では通常、ステートは長方形や円として描かれます。
visualSTATE では、通常のステートは長方形または正方形として描かれ
ます。円として描かれる特殊な意味を持つステート群もあります。
イベント
イベントは、有限オートマトンへの入力メッセージです。イベントは通
常、環境の外で発生するもので、有限オートマトンのロジックが認識し
ていなければなりません。イベントによって、有限オートマトンがス
テートを変えて何らかのアクションを実行しますが、これはイベントが
意味を持つステートに有限オートマトンがある場合のみです。たとえば、
TurnOn というイベントは、デバイスがすでに On のステートにある場合
は意味をなしませんが、有限オートマトンが Standby ステートにあれば
意味があります。このため、有限オートマトンイベントは、抽象化され
た 1 つまたは複数の実際のイベントまたはメッセージです。
トランジション
トランジションは、あるステートから別のステートへの変化で、通常は
イベントによりトリガされます。トランジションは、イベントのラベル
が付いた方向を持つ円弧として描かれます。有限オートマトンがトラン
ジションの開始ステートにあって、トランジションでラベルが付いたイ
ベントが発生すると、有限オートマトンのステートが目的のステートに
変わります。
20
イントロダクション
IAR visualSTATE の使用
GSVS-1
visualSTATE では、トランジションには暗黙的または明示的のトリガが
常に必要です。
visualSTATE トランジションの記述は、条件側とアクション側に分類さ
れます。トランジションの条件側では、アクション側が実行されるため
にどの条件を満たす必要があるのかを記述します。トランジションのア
クション側では、条件側の条件が満たされたときに実行されるすべての
アクションを記述します。
条件側とアクション側は、スラッシュ (/) で次のように区切られます。
E1() [(x==0)] A !B / [x=A1()] A2() D^S1
条件側はスラッシュの左で、トランジションのアクション側はスラッ
シュの右側です。
アクション
アクションとは、ある時点で有限オートマトンにより実行されるアク
ティビティです。アクションとは、有限オートマトンが環境で実行しな
ければならないものを指します。単純な式であったり、完全な関数であ
る場合もあります。アクションはハードウェアの操作によく使用されま
す。アクションは、トランジションや特定のステートへの入口または出
口と関連付けられます。
サポートされている式の構文
visualSTATE の式は、C 演算子や識別子、浮動小数点および整数定数の
すべての有効な C 式で、以下の制限があります。
以下の演算子はサポートされていません。
. ( メンバ )
-> ( ポインタによるメンバ )
* ( 間接 ( 修飾参照 ))
(type) ( キャスト )
sizeof
?: (3 項 )
, ( コンマ )
C 構文の以下の要素もサポートされていません。
●
long、double、float 定数
●
整数定数のサフィックス
●
8 進数の整数定数
●
同じ式にある複数の代入またはインクリメント / ディクリメント
基本と概念
GSVS-1
21
さらに、以下の制限も適用されます。
●
代入およびインクリメント / ディクリメントの演算子は、式の中ほど
ではなく最初に配置する必要があります。
●
void* 型のイベント引数は、アクション関数引数にのみ引き渡すこと
ができます。
トランジション上のガード条件を表現するプリミティブ
ガード条件とは、トランジションが取得されるために真とならなければ
ならないブール式です。トランジションでブール式を使用できることは、
有限オートマトンでもデータを操作でき、visualSTATE 設計で整数型お
よび浮動小数点型の変数を作成および操作して、有限オートマトンの表
限度を拡張できることを意味します。
有限オートマトンの階層
visualSTATE は、UML 標準に記載されているとおりの階層型の有限オー
トマトンのモデリングに使用されます。このため、有限オートマトンは
他の有限オートマトンを含みます。1 つまたは複数の有限オートマトンを
中に含む有限オートマトンを、スーパーステートといいます。
あるスーパーステートが相互排除的なサブステートで構成される場合、
一方の有限オートマトンに対応します。このスーパーステートが並列処
理の領域で構成される場合、各領域は有限オートマトンに対応します。
これらの有限オートマトンのそれぞれが、他の有限オートマトンを含む
ことができます。
22
イントロダクション
IAR visualSTATE の使用
GSVS-1
用語
visualSTATE で頻繁に使用され知っておく必要のある用語について以下
に示します。個々の概念については、『visualSTATE reference guide』を参
照してください。
ナビゲータワークスペースは、プロジェクトやシステム、ステート
チャートファイルのコレクションを処理するグラフィック環境です。
ワークスペースには、セッションに固有の情報が含まれます。
プロジェクトとは、システムのコレクションです。各プロジェクトは、
いくつかのステートチャートを含むことができます。プロジェクトには、
グローバルエレメントも含まれます。プロジェクトデータは、ファイル
拡張子が vsp のプロジェクトファイルに格納されます。
システムとは、1 つまたは複数のステートチャートファイルのコレク
ションです。ステート / イベントモデルは同じシステム内でグループ化
され、ステート状態を介して互いに同期できます。このため、動作は同
じシステム内の他のステート / イベントモデルの動作に影響される可能
性があります。
ステートチャートファイルには、ステートやトランジションなど、設計
モデルについてのロジック情報が含まれます。ステートチャートファイ
ルは、visualSTATE システムをモジュラー化する方法を現します。あるシ
ステムが複数のステートチャートファイルに分割されるとき、同じシス
テムでチームによる開発の利点を活かすことができます。ファイル名の
拡張子は vsr です。
スーパステートは、自身に 1 つまたは複数の有限オートマトンを含むス
テートです。
トップステートとは、ステート階層の最も上にあるステートです。
複合ステートは、並列処理領域または相互に排他的なサブステートから
構成されます。
領域は並列処理サブシステムを定義し、階層型の有限オートマトンを表
します。
トップステート領域とは、最も上にある並列処理ステート内の領域です。
デバイスドライバはデバイスを制御し、デバイスとそのデバイスを使用
するプログラム間のトランスレータのように動作します。各デバイスに
は、そのドライバでしか認識されない特化した独自のコマンドセットが
あります。対照的に、ほとんどのプログラムは一般的なコマンドを使用
してデバイスにアクセスします。このため、ドライバはプログラムから
の汎用コマンドを受け入れ、それらを特定のデバイス用に特化したコマ
ンドへと変換します(またはその逆の処理を行います)。デバイスドライ
基本と概念
GSVS-1
23
バは、LED やハードウェアのタイマ、マスストレージデバイスから無線
通信デバイスまで、あらゆるものを制御できます。
API 呼び出しは、visualSTATE 付属の API(アプリケーションプログラミ
ングインタフェース)に含まれるルーチンの関数呼出しです。
ローカルエレメントは、トップステートレベルで定義されるイベントア
クション、変数、シグナルなどです。通常はトップステート自身のス
コープを持っています。
グローバルエレメントは、プロジェクトレベルで定義されるイベントア
クション、変数、シグナルなどです。このため、visualSTATE プロジェク
トのスコープを持ちます(中に含まれる全システムを含みます)。
24
イントロダクション
IAR visualSTATE の使用
GSVS-1
イントロダクション
visualSTATE® をインストール済みなら、使用を開始する準備はで
きています。インストールについては、『visualSTATE Installation
Guide』を参照してください。
開発サイクル
一般的な開発サイクルは以下のようになります。
1 アクションの全体的な構造を描く
2 ステートチャート設計ツールで有限オートマトンのモデルを設計
3 モデルをテストする
●
機能テストツールを使用してシミュレーション、解析、デバッグを
行う
●
形式検証ツールを使用してモデルをロジックを検証
4 プロジェクトを文書化する。つまり、レポート作成ツールを使用してレ
ポートを作成します。
5 使用する C コンパイラの IDE(IAR Embedded Workbench IDE など)を用
いて、必要なすべての C ファイルを含むプロジェクトを作成。
6 モデルの C コードを生成する。ターゲットでは、設計したモデルとそっく
り同じようにコードが機能します。
7 C コンパイラの IDE を使用して C ファイルをコンパイルおよびリンクし、
アクションをデバッグ。
機能テストツールの RealLink ユーティリティまたは C-SPYLink(IAR
Embedded Workbench の場合)を使用して、ターゲットアクションで
visualSTATE モデルのランタイムの動作をモニタおよび制御することも
できます。
イントロダクション
GSVS-1
25
階層
visualSTATE のアプリケーション開発では、全体の設計をより良く構造
化して管理できるように、複数レベルの階層型表示を使用します。
●
ナビゲータワークスペース (.vnw): 必要な数のプロジェクトを含むこ
とができます。
●
プロジェクト (.vsp):
必要な数のシステムを含むことが
できます。
●
システム ( ファイルなし ):
必要な数のトップステートを含む
ことができます。
●
ステートチャートファイル (.vsr): 必要な数のステートを含むことが
できます。
ワークスペース
プロジェクト
システム
26
イントロダクション
IAR visualSTATE の使用
GSVS-1
visualSTATE の階層は次の図に示すように視覚化できます。
●
各プロジェクトには Global Elements セクションが 1 つあります。
●
各トップステートには Local Elements セクションが 1 つあります。
Element セクションには、イベントやアクション、変数などの名前が含
まれます。
サンプルプロジェクト
visualSTATE ソフトウェアパッケージには、visualSTATE で作成されたア
プリケーション設計のサンプルが含まれています。
サンプルを開くには、[ スタート ]>[IAR] [ システム ]>[visualSTATE 6.n]>
[ サンプル ] を選択するか、ナビゲータから開きます(\IAR Systems\
visualSTATE 6.n\Examples ディレクトリ内)
。
イントロダクション
GSVS-1
27
ワークスペースの作成
1 Windowsの[スタート]メニューからvisualSTATEナビゲータを起動します。
2 [ 新規ワークスペースの作成 ] に続いて [OK] をクリックし、[ 新規 ] ダイア
ログボックスを開きます。
3 [ ワークスペースウィザード ] を選択して、ナビゲータワークスペースの
ファイル名を入力します。保存先のディレクトリを指定して、[OK] をク
リックします。
4 表示された [ システム ] ダイアログボックスで、システムを選択してシス
テム名を入力し、[ 完了 ] をクリックします。
ステータスウィンドウに、どのファイルが作成されたかが表示されま
す。[OK] をクリックします。ステートチャート設計ツールが起動します。
28
イントロダクション
IAR visualSTATE の使用
GSVS-1
ナビゲータワークスペースと、トップステートの Topstate1 を持つ 1 つの
システムを含むプロジェクトが作成されました。
オプションの設定
1 [ プロジェクト ]>[ オプション ] に続いて、オプションを設定するツールを
選択します。
オプションダイアログボックスが表示されます。
プロジェ
クトブラ
ウザ
ここでは [ コード生成ツールオプション ] ダイアログボックスの使用に
ついて説明します。形式検証ツールおよびレポート生成ツールオプショ
ンのダイアログボックスは、同じように使用します。
2 プロジェクトブラウザで、オプションを設定するプロジェクトやシステ
ムを選択します。
3 設定するオプションのカテゴリを含むタブをクリックします。使用可能な
すべてのオプションを表示するには、[ すべて ] タブをクリックします。
●
一部のオプションにはドロップダウンリストボックスがあります。
リストボックスをクリックして、適切な値を選択してください。
●
一部のオプションにはチェックボックスがあります。オプションの
チェックボックスをクリックして、希望するオプションを選択します。
●
オプションによっては、オプションの値を入力できるテキストボック
スがあります。
イントロダクション
GSVS-1
29
●
一部のオプションには、オプションを選択すると表示されるボタンが
あります。
このボタンをクリックして使用するファイルを検索します。
このボタンをクリックしてポップアップメニューを表示します。
選択された値は、コマンドラインオプションとしてオプションリストの
下にある表示領域に表示されます。
オプション名を右クリックすると、オプションの説明が表示されます。
オプションのすべての組合せが使用可能ではないため、変更できないオ
プションもあります。オプションをデフォルト値に戻すには、[ デフォル
ト ] ボタンをクリックします。
生成されたコードの出力先ディレクトリの指定
1 ナビゲータワークスペースウィンドウでプロジェクトを右クリックして、
[ オプション ]>[ コード生成 ] を選択し、[ コード生成ツールのオプショ
ン ] ダイアログボックスを開きます。
2 [ファイル出力]ページで、
生成されるCコードの出力先ディレクトリ (出力
先パス ) を指定します。デフォルトのディレクトリは、プロジェクトファ
イル (.vsp) を含むディレクトリの coder ディレクトリです。
3 [ コード ] ページでは、[ デジタル署名の生成] オプションを選択してモデル
の整合性を確保し、異なるバージョンのユーザコードとモデルコードが
うっかり混ざらないように防ぐことができます。
[OK] をクリックします。
ナビゲータでのファイルの再ロード
デフォルトでは、現在のワークスペースにあるプロジェクトファイルま
たはステートチャートファイル (*.vsp ファイルおよび *.vsr ファイル )
がナビゲータの外で変更されると、ナビゲータで再ロードメッセージが
表示されます。
30
イントロダクション
IAR visualSTATE の使用
GSVS-1
[ 再ロード ] をクリックすると、
ワークスペースブラウザにある
変更されたすべてのプロジェク
トやシステムの情報が更新され
ます。グラフィック情報のみが再
ロードされ、ワークスペース
ファイル内の変更されたプロ
ジェクトやシステムへのリンク
情報は再ロードされません。
再ロードメッセージの表示方法を
変更するには、[ ツール ]>[ 設定 ]
を選択して、オプション [ ファイ
ルの自動再ロード ] の設定を変更
してください。
イントロダクション
GSVS-1
31
32
イントロダクション
IAR visualSTATE の使用
GSVS-1
モデルの設計
この章では、ステートチャートを使用したプログラムロジックの
設計方法の例について説明します。
ステートチャート設計ツールの使用を開始する
1 ナビゲータワークスペースウィンドウで、プロジェクトを選択して [ プロ
ジェクト ]>[ ステートチャート設計ツール ] を選び、ステートチャート
設計ツールアプリケーションを起動します。
2 ステートチャート設計ツールプロジェクトブラウザで、トップステート
をダブルクリックしてシステムビューウィンドウを開きます。
3 プロジェクトにはいくつかの階層レベルがあります。ステートチャート
図ウィンドウを開くには、システムビューでトップステートの長方形を
ダブルクリックします。
モデルの設計
GSVS-1
33
トップステートとは、ステートチャート図の「ルートステート」です。
ステートチャート図には、必要な数の階層ステートおよび平行ステート
を含むことができます。
図面ツールバーのほぼすべてのツールが使用可能になります。マウスポ
インタをツールアイコンの上で動かさずにいると、説明がウィンドウ下
のステータスバーに表示されます。
ツールを有効にするには、それをクリックします。ツールを無効にする
には、ウィンドウで右クリックします。
まずステートチャートを作成する
ここでは、ステートチャートを作成するときの基本的な手順について説
明します。
ステートの作成
1 図面ツールバーの [ シンプルステート ] ボタンをクリックし、ステート
チャート図ウィンドウをクリックしてステートを作成します。ツールを
無効にするには、ウィンドウで右クリックします。必要に応じて、作成
したステートのサイズ変更や移動ができます。
2 ステートに名前を付けるには、デフォルトのステート名をクリックして
新しいステート名を入力します。シンプルステートを作成してそれらを
呼び出します(Select_LED、Red_LED、Blue_LED など)。
トランジションの作成
図面ツールバーのトランジションボタンをクリックします。ステート
チャート図ウィンドウで希望するソースステートをクリックし、ポイン
タを目的のステートに移動してからクリックしてトランジションを完了
します。ツールを無効にするには、ウィンドウで右クリックします。
3 つの異なるトランジション追加ツールによって、直線や曲線、直交線
を描くことができます。
34
イントロダクション
IAR visualSTATE の使用
GSVS-1
トランジションを移動する:
1 トランジションを選択して、カーソルを終点のどれかに移動します。
2 点を右の位置にドラッグしてマウスボタンを放し、再びクリックします。
ルートポイントをトランジションに追加する:
1 トランジションを選択し、ポインタを既存のルートポイントまたは終点
に移動して、Ctrl を押したままクリックします。
2 ポインタを希望の位置にドラッグし、マウスボタンと Ctrl キーを放します。
ルートポイントは、トランジションの外観を変更するときにドラッグす
るアンカです。
イベントをトランジションに追加する:
1 [ 表示 ]>[ エレメントブラウザ ] を選択して、エレメントブラウザでトップ
ステートを選びます。
2 [ イベント ] タブをクリックし、エレメントブラウザで [ 新規 ] ボタンをク
リックします。
右側のペインでイベント名を指定し、オプションで [ 説明 ] フィールド
に説明を追加します。イベントに eButton1 という名前を付けます。
ステートチャート図ウィンドウに戻ります。作成しようとしているトラン
ジションのテキストボックスをダブルクリックします。こうすると、[ ト
ランジションの作成 ] ダイアログボックスが表示されます。[ 規則 ] リス
モデルの設計
GSVS-1
35
トの [ トリが ] をクリックします。続いて [ エレメント ] リストでトリガ
に追加するイベントをダブルクリックして、[OK] をクリックします。
サンプルの目的のために、トランジションをあと 3 つとイベントを 2 つ
(eButton2 と eButton3) 作成します。ステートチャート図が次のように
なるように、トランジションの 2 つにルートポイントを追加します。
初期ステートの作成
図面ツールバーの初期ステートボタンをクリックします。
初期ステートをステートチャートに追加します。また、初期
ステートから空のトランジションをシンプルステート ( ス
テート Select_LED など ) のいずれかに追加します。
トランジションとともに使用するアクション関数の作成
[ 表示 ]>[ エレメントブラウザ ] を選択して、[ アクション関数 ] タブをク
リックします。続いて、[ 新規 ] ボタンをクリックします。
右側のペインでアクション関数名を指定し、オプションで [ 説明 ]
フィールドに説明を追加します。たとえば、Red_LED_ON のような名前を
付けます。
36
イントロダクション
IAR visualSTATE の使用
GSVS-1
ステートチャート図ウィンドウに戻ります。Select_LED ステートと
Red_LED ステートの間にあるトランジションに属するテキストボックス
をダブルクリックします。[ トランジションの作成 ] ダイアログボックス
で、[ 規則 ] リストの [ アクション式 ] をクリックします。続いて [ エレ
メント ] リストでトランジションに追加するアクション関数をダブルク
リックして、[OK] をクリックします。
ステートチャート図が以下のようになるように、他のトランジションに
Blue_LED_ON および LEDs_OFF というアクション関数を作成します。
ステートチャートを設計し終
わったら、プロジェクトを保
存してステートチャート設計
ツールを終了します。
ナビゲータにファイルを再
ロードするかどうか聞かれ
たら、[ はい ] をクリックし
ます。
モデルの設計
GSVS-1
37
複合ステート
複合ステートは、並列処理領域または相互に排他的なサブステートから
構成されます。領域とはステートを保持するエリアです。領域は、並列処
理サブシステムを定義して階層型有限オートマトンを表現するためにス
テートやトップステートで使用されます。
並列処理領域からなる複合ステートの作成
1 図面ツールバーの複合ステートボタンをクリックします。
2 ステートチャート図ウィンドウをクリックして 1 つの領域を持つステー
トを作成し、ウィンドウを右クリックしてツールを無効にします。
3 領域を追加するには、領域を右クリックしてコンテキストメニューから
[ 領域を挿入 ] を選択します。
複合ステートは、必要に応じてサイズの変更や移動を行えます。領域の
間にある点線の区切り線をドラッグすると、個々の領域のサイズを変更
できます。
並列処理領域に既存のステートを挿入するには、選択ツール ( 矢印ツー
ル ) を使用して移動するステートを選択します。続いてステートを領域
にドラッグします。
相互に排他的なサブステートからなる複合ステートの作成
1 サブステートにするステートを選択します。
2 ステートを、複合ステートにするステート上にドラッグします。領域が
自動的に挿入されて、ステート名の下に横線が入ります。
38
イントロダクション
IAR visualSTATE の使用
GSVS-1
相互に排他的なサブステートからなる複合ステートは、領域を追加する
だけで並列処理領域を持つ複合ステートに変更できます。こうすること
で、2 つの領域が自動的に作成され、元のサブステートは領域のいずれ
かに移動します。
ステートチャート図の例
外部イベントによってトリガされるトランジション
LEFT ボタンが押される
と、LED3TurnedOff から
LED3TurnedOn へのトラン
ジションがトリガされて、
アクション LED3_On がこ
れに伴います。続いて、
LEFT ボタンが再び押され
ると、LED3TurnedOn から
LED3TurnedOff へのトラ
ンジションがトリガされ、
LED3 がオフになります。
ブール条件によって保護されるトランジション
RED ボタンが押される
と、T1 から T2 へのトラ
ンジションがトリガさ
れて、2 つのアクション
がこれに伴います。
LED0 がオンになり、変
数 a がインクリメント
されます。このトランジ
ションは、条件 a<3 に
よっても保護されます。
このトランジションが
発生するためには、そ
の式が TRUE に評価さ
れる必要があります。この場合、LED0 は 3 回だけオンになります。その
後は、条件 a<3 は FALSE に評価され、RED ボタンが押されてもトラン
ジションはファイアされません。
モデルの設計
GSVS-1
39
エントリ / イグジットリアクション
内部のリアクション
エントリリア
クション
イグジットリアクション
中央のボタン (BTN_MID_DOWN) を押すと、R1 から R2 へのトランジション
が発生します。このトランジションによって、2 つのエントリリアクショ
ンが実行されます。スーパーステート R2 に入るとき、タイマアクション
関数 TMR1_set が初期化されて、システムティックが 50 回数えられま
す。こうなると、デフォルトのサブステート b1 がアクティブとなり、そ
のエントリリアクション LED1_ON が実行されます。
50 回のティックの後、TMR1_set がタイムアウトになり、イベント
T_BLINK が送信されます。これによって、2 つのトランジションがファイ
アされます。まず内部リアクション R2 がトリガされ、TMR1_set が次の
50 回のティックを数え始めます。次に T_BLINK が b1 から b2 へのトラン
ジションおよびイグジットリアクションをトリガし、LED1_OFF が実行
されます。次の 50 回のティックの後、T_BLINK によって再び b2 から b1
へのトランジションが発生し、エントリリアクション LED1_ON が実行さ
れます。こうして、LED1 は 50 ユニットのシステムティックの間隔をあ
けて点滅します。
40
イントロダクション
IAR visualSTATE の使用
GSVS-1
モデルのテスト
この章では、ステートチャート設計ツールで作成した
visualSTATE¨ モデルのテストおよびデバッグの方法について説明
します。
モデルの検証
1 ナビゲータで [ プロジェクト ]>[ 機能テストツール ] を選択します。
2 デバッグ処理を開始するには、イベントウィンドウで SE_RESET をダブル
クリックして、システムを初期ステートにします。( 機能テストツールが
起動したとき、システムが正しく初期化されるよう徹底するため、選択
できるイベントは SE_RESET イベントのみです )。SE_RESET イベントを
発行して、いつでもシステムを初期ステートに戻すことができます。
イベントウィンドウでイベントをダブルクリックして、システムをス
テップごとに見ていきます。システムウィンドウで結果のステートの組
み合わせを見ることができます。アクションウィンドウでは、どのアク
ションがイベントによって生成されたかを見ることができます。
3 シミュレーションセッションをリセットするには、[ デバッグ ]>[ システ
ムの初期化 ] を選択してください。
グラフィックシミュレーション
1 モデル内でシミュレーションの動作を直接見るには、[ デバッグ ]>[ グラ
フィックアニメーション ] を選択してステートチャート設計ツールをシ
ミュレーションモードで開きます。
2 イベントウィンドウでイベントをダブルクリックして、結果のステート
の組み合わせを表示します。ステートチャートには赤の境界線が表示さ
れます。青の境界線は、前回アクティブだったステートに使用されます。
3 有限オートマトンの設計をデバッグしたら、機能テストツールを終了し
てナビゲータに戻ります。
ターゲットアクションでのモデルのテスト
RealLink または C-SPYLink デバッグの IAR Embedded Workbench 機能と
の統合を使用して、ターゲットアプリケーションでの visualSTATE モデ
ルのランタイムでの動作をモニタおよび制御することができます。
詳しい RealLink の使用方法については、『visualSTATE User Guide』を参
照してください。
モデルのテスト
GSVS-1
41
詳しい C-SPYLink の使用方法については、『visualSTATE C-SPYLink User
Guide』を参照してください。
機能テストツールは、トリガするイベントおよび有限オートマトンから
のレスポンスを、いわゆるテストシーケンスファイルに記録することも
できます。こうしたファイルは、リグレッションテストのために再生し
たり、静的および動的モデルカバレッジ用に解析することができます。
検証
形式検証ツールでは、やりとりする有限オートマトンの以下のシステム
プロパティを検証できます。
●
デッドエンド条件 : ブロックしているガード条件のために、ステート
に入ることはできても出ることができない場合。この状況は、複雑な
有限オートマトンでは非常にテストが困難になりかねません。
●
衝突するトランジション : ステートからの複数のトランジションが、
同じイベントで一斉にトリガし、相互排他的なガード条件をもたない
場合。これは許可されておらず、生成されたコードでランタイムエ
ラーになります。
●
達成不可能なステート : 環境からのどのシーケンスのイベントによっ
ても入ることができないステート。到達不可能な 1 つまたは複数のス
テートは、おそらくモデルにおける想定事項が間違っていることを示
します。
●
未使用のイベントまたはシグナル : まったくアクションがとられない
システムへの事象。
●
未使用のトランジション : システムに入力されるイベントのシーケン
スに関係なく、まったく取得されないトランジション。
●
未使用のアクションまたは代入
●
未使用の変数、パラメータ、定数
これらのプロパティの一部は、未使用のイベントなど元の有限オートマ
トンモデルの単純な構文チェックによって、部分的にチェックすること
ができます。ある特定のイベントがモデルで言及されているかは、簡単
にチェックできます。ただし、このチェックだけでは不十分です。モデル
について言及されていても、イベントに対して働きかける一連のステー
トが到達されていなければ、未使用ということがありえます。この質問
に完全に答えるには、何らかの正式の検証を使用する必要があります。
42
イントロダクション
IAR visualSTATE の使用
GSVS-1
モデルの検証
1 形式検証ツールを有効にするには、ナビゲータで [ プロジェクト ]>[ シス
テムの検証 ] を選択します。
2 [ ワーニングの検証 ] ダイアログボックスが表示されている場合、オプ
ション [ コードを生成して検証 ] を選択します。
3 形式検証ツールウィンドウで検証の結果を参照します。
太字のチェックマークはチェックが終わっており、エラーがなかったこ
とを示します。
4 検証メッセージにエラーやワーニングが含まれる場合、ナビゲータで [ プ
ロジェクト ]>[ ステートチャート生成ツール ] を選択してステートチャー
ト生成ツールに戻り、必要な変更を加えます。
プロジェクトのトレース
トレースは、システムを希望するステートの構成にする一連のイベント
です。トレースはテストシーケンスファイルに保存されます。トレース
は、検証を実行した直後にのみナビゲータで実行できます。
モデルのテスト
GSVS-1
43
1 トレースするデッドエンドや衝突を選択します。
2 [ トレースを検索 ] ボタンをクリックします。
3 トレース出力ファイルのファイル名を選択または指定して、[ 保存 ] をク
リックします。
4 ナビゲータがエラーまたはワーニングへのトレースを検出して、結果の
トレースを保存します。ファイルが保存された後、機能テストツールが
開いてテストシーケンスファイルがロードされます。
形式検証ツールについて詳しくは、
『visualSTATE Concept Guide』および
『visualSTATE User Guide』を参照してください。
44
イントロダクション
IAR visualSTATE の使用
GSVS-1
モデルに必要な C コード
この章では、アプリケーションのビルドに必要なさまざまな C
コードの断片を作成する方法について説明します。
ステートチャートからのコード生成
1 ナビゲータでプロジェクトを開きます。ワークスペースウィンドウでプ
ロジェクトを選択し、[ プロジェクト ]>[ コード ] [ 生成 ] を選択して
コード生成ツールを有効にします。
2 ナビゲータにコード生成ツールのレポートファイルが表示され、生成さ
れたファイルの名前や場所が分かります。このファイルには、生成され
たコードに含まれるさまざまな要素についての統計も含まれます。
アプリケーションの完成
アプリケーションを完成するには、以下が必要です。
●
ANSI C コンパイラ ( ターゲットプロセッサ用 )
●
visualSTATE で生成されたコード
●
ユーザの作成したコード
1 必要なすべてのソースファイルを収集するために、ディレクトリ構造を
作成します。たとえば、Coder-generated および User-written という
2 つのサブディレクトリを持つ Source を作成します。
2 IAR Embedded Workbench IDE など、C コンパイラの IDE を使用して、必要
なすべての C ファイルを含むプロジェクトを作成します。
3 最後に、IDE でファイルをコンパイルおよびリンクします。
コード生成ツールにより生成されたコード
visualSTATE コード生成ツールにより作成されたファイルを、
Coder-generated ディレクトリに入れます。
生成されたファイルをこのディレクトリに入れるようコード生成ツール
に指示するには、次の手順に従います。
1 ナビゲータで [ プロジェクト ]>[ オプション ]>[ コード生成 ] を選択し、
プロジェクトを選びます。
2 [ ファイル出力 ] ページで、[ 出力先パス ] フィールドを選択して
Source\Coder-generated ディレクトリを指定します。
モデルに必要な C コード
GSVS-1
45
注 : コード生成ツールにより生成されたファイルは絶対に変更しない
でください。変更する場合は、ステートチャート設計ツールでステート
チャート図を変更し、プロジェクトのコードを生成し直します。
この場合、コード生成ツールで生成された以下のファイルがディレクト
リに置かれます。
●
MY_System.c
●
MY_System.h
●
MY_SystemAction.h
●
MY_SystemData.c
●
MY_SystemData.h
●
SEMLibB.c/h または MY_SystemSEMLibB.c/h(コード生成ツールオプ
●
SEMBDef.h
●
SEMTypes.h
ションの [API にプレフィックスを使用 ] に応じて変わります)。
ユーザの作成したコード
作成したターゲット固有のコードは User-written ディレクトリに入れ
ます。
ハードウェアの入力を visualSTATE イベントに変換する処理、visualSTATE
アクションをハードウェア出力に変換する処理を行うターゲット固有の
コード(デバイスドライバとも呼びます)を指定する必要があります。シ
ステムで発生するイベントを処理するメインのループルーチンも指定する
必要があります。
ユーザが作成したコードは、たとえば以下のファイルに整理できます。
●
Actions_to_Output.c
●
Input_to_Events.c
●
main.c
●
simpleEventHandler.c
●
eventHandler.h
●
LEDsys_Drivers.h
●
simpleEventHandler.h
C ファイルの統合
完成したアプリケーションをまとめるには、たとえば以下を作成します。
46
●
main.c ファイル
●
プロセッサを初期化するコード
●
入力を処理するコード
イントロダクション
IAR visualSTATE の使用
GSVS-1
●
I/O デバイスを処理するコード
●
ある特定のイベント処理のロジックに関連しない、通常記述するコード
それでもやはり「write-once」(一度だけ書込み)コードを作成する必要
があります。こうすることで、アプリケーションの構造を完全に制御し、
新しい堅牢なコード構造を採用する必要がありません。
入力 / イベントを処理するために、visualSTATE API 関数を呼び出して、
イベントを visualSTATE システムに引き渡す必要があります。
イベントを連続して処理するために、FIFO キュ-ハンドラも作成するべ
きです。キューハンドラはイベントを格納できる1つの配列であったり、
優先順位の高いイベントがすぐに処理されるための複雑な優先順位
キューということもあります。
既成の FIFO キューハンドル C コードルーチンは、
visualSTATE ソフトウェ
アに付属で Examples\SampleCode\ ディレクトリにあります。
イベントの以下のようにして処理できます。
●
メインのアプリケーションが、新しく届いたイベントがないかイベン
トキューをチェックします。処理するイベントがある場合、適切な
visualSTATE API 関数が呼び出されます。従来の方法は、イベントを
チェックして API を呼び出す無限ループをメインの関数内に作成する
ことです。この方法では、たとえば処理する新しいイベントがない場
合に、MCU を簡単に低電力モードにできます。
●
アプリケーションが入力を受けると(割込みや手動ポーリング /
チェックの結果という可能性があります)、イベントとしてイベント
キューに追加されます。メインのループが電源管理を行う場合、ハー
ドウェア割込みまたは割込みルーチンが CPU を適切なレベルに立ち
上げることができます。
次の 2 つのコードサンプルは、イベントを処理するためにアプリケー
ションに挿入する必要があるすべてのものです。
イベント処理のコードサンプル
void scanInputs (void)
{
switch (PIND)
{
case BTN1: SEQ_AddEvent( eButton1 ); /* EVENT: */
/* eButton1 をキューに追加 */
break;
モデルに必要な C コード
GSVS-1
47
case BTN2:
default:
SEQ_AddEvent( eButton2 ); /* EVENT: */
/* eButton2 をキューに追加 */
break;
break;
}
}
visualSTATE API コードのサンプル
/* アクション式変数を定義 */
SEM_ACTION_EXPRESSION_TYPE actionExpressNo;
/* 定義および初期化。 この場合はリセット */
/* イベントは SE_RESET */
SEM_EVENT_TYPE eventNo = SE_RESET;
/* VS システムを初期化。 */
SEM_Init();
/* 使用された場合には外部変数を初期化 */
/*SEM_InitExternalVariables();*/
/* 使用された場合には内部変数を初期化 */
/*SEM_InitInternalVariables();*/
/* シグナルが使用された場合にはシグナルキューを初期化 */
SEM_InitSignalQueue();
if ((cc = DEQ_Initialize()) != UCC_OK)
HandleError(cc);
/* 永久に実行 */
for(;;)
{
/* イベントを減算 */
if ((cc = SEM_Deduct(eventNo)) != SES_OKAY)
HandleError(cc);
/* 結果のアクション式を取得して実行 */
while ((cc = SEM_GetOutput(&actionExpressNo)) ==
SES_FOUND)
SEM_Action(actionExpressNo);
if (cc != SES_OKAY)
HandleError(cc);
48
イントロダクション
IAR visualSTATE の使用
GSVS-1
/* 次のステートベクタを変更 */
if ((cc = SEM_NextState()) != SES_OKAY)
HandleError(cc);
/* キューから次のイベントを取得 */
while (DEQ_RetrieveEvent(&eventNo) == UCC_QUEUE_EMPTY)
OS_Wait (OS_VS_EVENT_PENDING, INFINITE);
}
実行
1 次に while ループがキューをチェックするときに、イベントがあればそ
れが検出されます。
2 キューにイベントが見つかり次第、visualSTATE システムが有効になって
いることを確認し (SEM_Deduct API 関数を使用 )、visualSTATE が行うア
クションのリストを返すように徹底します (SEM_GetOuput を使用 )。た
とえば、ポインタテーブルを使用します。
3 これらのアクション関数は一度に呼び出されます。
4 続いて、ステートを変更するために API 関数 SEM_NextState が呼び出さ
れます。
5 ステートの組み合わせが更新されると、実行は while ループに戻って、
他に処理するイベントがないかキューをチェックしたり、必要な他のス
テップがあればそれを実行します。
注 : ループを初期化する際は、リセットイベントを最初のイベントと
してキューに指定してください。リセットイベントによって、システム
がリセットのステートに変更されます。visualSTATE リセットイベントの
デフォルト名は、SE_RESET です。
前述の例で使用される API 関数は、コンパクトなバイナリテーブルを
使用してモデルおよび API 上記の API 関数を表す中間 API からのもの
です。また、従来の switch/if 構造に基づいてコードを生成することも
できます。[ 可読コードの生成 ] はプロジェクトレベルのオプションで、
[ プロジェクト ]>[ オプション ]>[ コード生成 ] 設定ページにあります。
このフォーマットはわずかに異なる API で、ほとんどの場合はイベン
ト処理ループで関数 VSDeduct を呼び出すのに十分です。
API コードのサンプルは、Examples\SampleCode ディレクトリにありま
す。ベーシック API の API 関数名には、先頭にシステム名を付けて処理
中に異なるシステム間で区別できるようにすることも可能です。[API に
プレフィックスを使用 ] はシステムレベルのオプションで、[ プロジェク
ト ]>[ オプション ]>[ コード生成 ][API 関数 ] ページにあります。
モデルに必要な C コード
GSVS-1
49
イベントをキューに入れて処理のためにキューからひとつずつ読み込む
と、ユーザに多くの利点があり、構造の正しい整理されたアプリケー
ションの作成に役立ちます。
C++ コードを生成することもできます。これは、あるシステムのいくつ
かのインスタンスが必要で、RealLink デバッグを使用しない場合に便
利です。Examples\SampleCode\CplusplusModel\ ディレクトリのアプ
リケーションノート、Using_visualSTATE_generated_code_with
_Cplusplus.pdf を参照してください。
VISUALSTATE の制御ロジックコードについて
visualSTATE は、有限オートマトンロジック用に中間 C コードか、
if..else および switch/case 文に基づいて、従来の構造化された有限
オートマトン実装のどちらかを生成できます。
中間コードの生成
中間モードでは、visualSTATE は有限オートマトンモデルを中間 C コー
ドに変換します。続いて、このテーブルが visualSTATE API によって、す
べてのイベントやガード式、変数、シグナル、アクションを処理するた
めに使用されます。
50
イントロダクション
IAR visualSTATE の使用
GSVS-1
この変換は、次の例にあるように、有限オートマトンが確立された数学
の表記法を使用してブール等式で表現できることに基づいています。
E1
E2
E3
E4
E5
AND
AND
AND
AND
AND
S1
S2
S3
S4
S5
-> S2 AND A1
AND NOT S4 -> S3 AND A2 AND A3
-> S1 AND A4 AND A5
-> S5
-> S4
ステート S1 にあってイベント E1 が発生すると、アクション A1 が実行
されてシステムはステート S2 に移行します。つまり、IF (E1 & S1)
THEN (S2 & A1) ということです。
より複雑なトランジションを表現することも可能です。たとえば、ス
テート S2 にあってイベント E2 が発生すると、ステート S4 はアクティ
ブではなく、アクション A2 と A3 が実行されて、システムは S3 に移行
します。つまり、IF (E2 & S2 & !S4) THEN (S3 & A2 & A3) というこ
とです。有限オートマトンを視覚的な記述から論理的な規則へと変換す
る能力によって、visualSTATE トランジションの構文が確立できます。
次の図はトランジションの構文を示します。
モデルに必要な C コード
GSVS-1
51
この構文は visualSTATE によって、16 進数を用いて中間コードを生成
し、有限オートマトンを表すために使用されます。各 16 進数に組み込ま
れるのは、モデルロジックの 4 つのコンポーネントであるイベント、現
在のステートベクタ、次のステートベクタ、アクションベクタです。
トランジション構文を適用した最終的な結果は、16 進配列の ANSI C 構
造体です。
visualSTATE
モデルのロ
ジックを表す
定数データ
テーブル
定数データテーブルの内容は、visualSTATE API によって解釈され、実行
可能な C コードに変換されます。
テーブルは制御ロジック全体を表し、非常にタイトなコード生成を可能
にします。有限オートマトンテーブル上で動作する API 関数は、有限
オートマトンのインタプリタと見なすことができます。つまり、有限
オートマトンの合計コードサイズは、テーブルサイズの合計に、使用さ
れる API 関数のサイズを合わせたものです。
52
イントロダクション
IAR visualSTATE の使用
GSVS-1
可読コードの生成
可読コードフォーマットの主な目的は、コードを設計モデルにマップし直
して、人間が理解しやすいコードにすることです。コードの生成は、テー
ブル生成と同じ原則に基づきます。つまり、トランジションがベーシック
コードの生成ユニットです。前述の中間コードの生成の例を考えてくださ
い。トランジション E1 AND S1 -> S2 AND A1 は、C の if 文に直接変換でき
ます。しかし、コードを読みやすくするため、同じイベントによってトリ
ガされるすべてのトランジションが、switch 文の内部にある別の case 文に
まとめられています。
以前に紹介した LED 有限オートマトンモデルを見てみます。
図では、2 つのトランジションがイベント eButton1 によってトリガさ
れます。これらのトランジションのコードは次のようになります。
case eButton1:
{
if ((CSV[0] == MY_Topstate_Select_LED))
{
Red_LED_ON();
WSV[0] = MY_Topstate_Red_LED;
}
if ((CSV[0] == MY_Topstate_Blue_LED))
{
モデルに必要な C コード
GSVS-1
53
Red_LED_ON();
WSV[0] = MY_Topstate_Red_LED;
}
}
break;
それぞれのトランジションが、1 つの if 文に対応しています。WSV と
CSV が、現在のステートと次のステートを追跡しています。アクション関
数呼出し、代入、ガード条件は、if 文の一部である生成済みのインライ
ンです。
54
イントロダクション
IAR visualSTATE の使用
GSVS-1
追加機能
プロジェクトの文書化
レポート生成ツールを使用して、visualSTATE® プロジェクト全体の最新
文書レポートを作成できます。
1 ナビゲータで、[ プロジェクト ]>[ オプション ]>[ ドキュメント ] を選択して
[ レポート生成ツールのオプション ] ダイアログボックスを表示します。
2 [ 設定 ] ページで、文書レポートに含めるセクションおよび詳細のレベル
を選択します。レポート生成ツールの他のオプションは、その他のペー
ジにあります。
終わったら、[OK] をクリックします。
3 [プロジェクト]>[ドキュメント]を選択して、文書レポートを生成します。
終わると、完了メッセージが出力ウィンドウに書き込まれます。
4 生成された文書レポート (RTF または HTML) は、デフォルトでプロジェ
クトディレクトリの Doc サブディレクトリに配置されます。デフォルト
では、ナビゲータは生成されたファイルに関連付けられたアクションを
起動しようとします。たとえば、RTF 出力の場合は Microsoft Word です。
追加機能
GSVS-1
55
プロトタイプの作成
visualSTATE によって生成されたコードはターゲットおよび CPU に対し
て中立であるため、PC ベースのアプリケーションの GUI プロトタイプ
を簡単に作成できます。プロトタイプの言語として C または C++ を使用
する場合、GUI フレームワークのイベント管理から visualSTATE イベン
トへのマッピングを作成する以外は何も行う必要がありません。また、
GUI 関連機能のアクション関数ポートも作成する必要があります。
エアコンのプロトタイプの例を以下に示します。エアコンシステムの実際の
ハードウェアのバージョンでは、全面パネルのボタンによって割込みが生
成されるか、ポーリングが行われます。続いて、割込みルーチンまたはポー
リングルーチンは、適切なイベントを visualSTATE イベントキューに送信で
きます。しかし、プロトタイプでは、ウィンドウフレームワークのイベント
ハンドラがイベントを visualSTATE モデルに送信することができます。
Visual Basic や Delphi などの GUI の作成について知っている場合は、次に
示す 2 つの異なる方法を使用できます。
●
visualSTATE によって生成されたコードから DLL を作成し、他の DLLの
場合と同じようにそれとやりとりする。
●
事前にビルドされた visualSTATE Expert DLL を使用。これは、再コン
パイルせずに異なる visualSTATE モデルと使用できるライブラリで
す。visualSTATE によって生成されたファイルをコンパイルする必要
はありません。ただし、DLL をモデルとともに動作させるには、使用
可能なモデル機能に対する制約があります。
また、visualSTATE は仮想 GUI プロトタイプの作成用に Altia Design との統
合も提供しています。この統合では、コードを記述せずに有限オートマ
トンモデルと GUI のプロトタイプを作成できます。Altia Design には、組
込みデバイス用の GUI コードを自動生成する機能が追加されました。詳
しくは www.altia.com を参照してください。
56
イントロダクション
IAR visualSTATE の使用
GSVS-1
Fly UP