Upload
others
View
9
Download
1
Embed Size (px)
Citation preview
組込み開発と状態遷移図
•組込み機器では様々なイベントに対して、その時の状態に応じた処理が必要➡状態遷移図による設計が最も効果的
•状態遷移適用例–オーディオ–スマートフォン–自動運転システム–自動販売機(ドリンク、ATM、etc)
–洗濯機–etc
4
UML (Unified Modeling Language)
• 統一モデリング言語– オブジェクト指向分析や設計のための統一された記法(モデリング言語)
6
ユースケース図
アクテビィティ図
状態遷移図
クラス図
パッケージ図
シーケンス図
コラボレーション図
オブジェクト図
コンポーネント図
配置図
これまでの開発手法:紙ベース設計書の課題
・複雑なシステムの設計を全体的に理解しにくい
・仕様の矛盾点・あいまいな部分がそのままになりやすい
・要求仕様に対するモレヌケを見落としやすい
➡開発終盤で大きな手戻りが発生しやすい
➡コードのみ修正されドキュメントがメンテされない
8
これまでの開発手法:状態遷移コード開発の課題
・複雑なシステムの状態遷移の実装は難易度が高い
・階層の深い入れ子状態のif文・Switch文
・複数品種対応でコードには大量の#ifdef
➡可読性の悪いコードはコードレビューに時間がかかる
➡修正時にミスが生じやすい
9
IAR Visual Stateとは
• 組込みアプリの設計、テスト、実装をグラフィカルに行うツール
• UMLベースの状態遷移図 (Designer)
• 高度な形式検証と機能検証機能(Verificator, Validator)
• C/C++コードの生成 (Coder)
• ドキュメント生成 (Documenter)
• IAR Embedded Workbenchとの連携でターゲット上での状態遷移デバッグが可能
11
IAR Visual Stateの各種機能12
Navigator
プロジェクト全体を扱い、各種ツールを実行するコンテナ
DesignerUMLを用いてステートマシン図を作成するツール
CoderDesignerで作成したモデルからコードを生成するツール生成されたコードはユーザコードと組み合わせて使用
Verificator作成したモデルを検証するツール。デッドエンドの有無、使用されないステート、想定しない
動作がないかを確認可能。Verificatorはモデル上のすべてのパスを検証。
Validatorモデルのシミュレート、解析、デバッグをグラフィカルに行うツール
作成したモデルの機能検証が可能
DocumenterRTFもしくはHTML形式でドキュメント生成を行うツール
Viewerカスタマーやパートナーと設計レビューを行えるよう、
Visual Stateのライセンス無しで使用できる、スタンドアロンのビューアーアプリ
プロジェクトワークフロー13
• IAR Visual Stateで状態遷移図を作成• ターゲットボード用ファイルを追加• デバイスドライバやFWライブラリを作成or入手
ユーザーコード
入力をイベントに変換
(一度作ればOK)
ユーザーコード
アクションを出力に変換
(一度作ればOK)
入力button_pressed
入力sensor_triggered
入力temperature_gauge
入力stop_button
入力key_pressed
出力turn_on_LED
出力step_motor
出力close_valve出力shut_down
出力display_LCD
状態遷移Visual State生成コードVisual
StateのAPIを使用
ユーザコードのAPIを使用
ユーザーコードチップ初期化処理(一度作ればOK)
モデルの再利用可能
1. 高品質• Verificatorによるモデルの形式検証• Validatorによる動作シミュレート• テストシーケンスの記録と繰り返し実行• テストカバレッジの取得• MISRA-C/C++に準拠したバグのないコード生成
バグの混入しやすい状態遷移部分のコードを自動生成
16
2. レビュー・進捗管理が容易• 設計モデルをグラフィカルに共有・レビュー
コードレビューは不要 Viewerを利用してカスタマーやパートナーとも簡単に設計を共有
• モデル検証結果をドキュメント化 確認項目、エラー、ワーニング内容
起動時のスイッチ状態チェックの有無
ライトのOn/Offコントロールの条件判定の位置車内灯
モデルA
車内灯モデルB
17
3. 開発期間の短縮• 状態遷移のコーディング作業は 1 Click
• 状態遷移図から直接コード化(クラス図等は不要)• ユーザコードから必要な関数コールは初期化とイベント送信の二つだけ
• 面倒なドキュメント化作業も 1 Click• モデル図で記載したすべての情報とテスト結果をまとめてドキュメント化
• モデルとコードが一致しているかどうかを確認するためのテストや検証が不要
18
4. 仕様変更・機能追加に強い• 仕様変更や機能追加が必要になったらモデルを書き換えるだけ
• 常にモデル・コード・ドキュメントが100%一致した状態
• Diffツールで修正差分を簡単に把握
1 clickでコード生成
1 clickでドキュメント生成
19
5. シミュレートから実機評価までシームレスにVisual Stateプラグイン:IAR Embedded Workbenchでのデバッグ時に状態を可視化
形式検証
機能検証(シミュレート)
実機評価
20
IAR Visual Stateでの開発21
仕様書
モデル
実装
仕様書
実装
モデルによる検証で一致性を確認
ソース・実機・モデルのデバッグ連携により一致性を確認
モデルを介して「仕様」と「実装」の一致性を確認
C
Req
使用する既存プロジェクト
• STモータ制御キット P-NUCLEO-IHM001– Potentiometerサンプルプロジェクト– STM32 Motor Control SDKが利用可能–機能o ボタンによるモーター回転On/Offo Potentiometerでの回転スピード変更o モータ回転OnでLED点灯o PCアプリからのコントロールも可能
23
既存コード構成
mainループで状態を常にチェックしLED操作
ボタンハンドラで状態に応じてモータ制御命令
UIコマンドパーサーで状態を見ながらモータ制御命令
コード内のあらゆる場所で、状態をチェックし、
命令を発行する処理を行っている↓
Visual Stateで一元化
main.c
ui_task.c
user_interface.c
24
ポイント1:何をVisual Stateに任せるかを決める
- どのイベントをVisualStateに渡すか- どのアクションをVisualStateからさせるか
高速で頻繁に発生するようなイベントではなく、ある種の操作に従ったイベントにする
アクションはできるだけシンプルな関数を使う
• ボタン押下• エラー解除
• SysTick割込み• AD変換割込み
イベント アクション
• bool MC_StartMotor1(void) • bool MC_StopMotor1(void)• ….
25
アクションを追加:モータの状態に応じてLEDを点灯・消灯28
エントリーアクション:GreenLEDをOn
エントリーアクション:GreenLEDをOff
どんな遷移を通ったとしても必ず行う処理は遷移時のActionではなく、状態のEntry Actionに
ポイント4:イベントはキューに入れ、順番に送る
イベントはキューに入れ、ループ内でイベントを順番に取り出してVisual Stateに送る
イベントはキューに入れ、ループ内でイベントを順番に取り出してVisual Stateに送る
30
FAULT発生時にLEDを点滅させたい→タイマー関数を使ってイベントを発生させる
※タイマー関数は汎用的に使用可能
ユーザーコード内にタイマー関数を実装
タイマー完了時に発生させるイベントと時間を設定
32
PotentiometerモードとUIモードを動的に切り替えたい→外部変数を利用してVisual State内部の値を参照 Entry時のアクションとして
外部変数に値を代入する式を設定
状態遷移によって値が変わる変数を外部変数としてユーザアプリで参照Potentiometerモードの時だけPotentiometer位置のサンプリング・変換を行う
33
IAR Embedded Workbenchでビルド
Visual Stateが生成したファイル
VisualState用イベントキュー処理ファイル(サンプル同梱)
Visual State用に新たに作成したインターフェースファイル
36
VisualState生成コードサイズ
生成されるコードは小さく、状態遷移のコードを追加してもコードサイズの増加はわずか
38
3000728075
3085328765
3282630392
0
5000
10000
15000
20000
25000
30000
35000
最適化:高(速度) 最適化:高(バランス)
既存サンプルサイズ VS使用コードサイズ(C-SPY Linkなし)
VS使用コードサイズ(C-SPY Linkあり)
Variant機能
• 一つの設計で複数のモデルを作成– 要素毎にVariant(モデル)もしくはFeature(機能)を割り当て可能– Variant(モデル)毎にどのFeature(機能)を持たせるかを割り当て可能
仕向け地毎に少しずつ異なる仕様も一つのモデル内で表現可能
40
DesignerとValidatorをリモートでコントロール可能
• スタンドアロンアプリとして提供• TCP/IP通信でJSONフォーマットを使用して命令を送信• Designerの起動、要素の作成などがリモートで可能• Validatorの起動、イベント送信などのシミュレートもリモートで可能
コントロールセンター
テスト実行の自動化が可能
41
• トップレベル状態遷移図を標準XMIフォーマットでインポート・エクスポート– 他のモデルツールとのモデル図のやり取りが可能
• 要素や遷移がXMIフォーマットで格納される(レイアウトは保持されない)
XMIインポート/エクスポート42
* XMI import and export has been tested against IBM Rhapsody using UML version 2.1 .
コード生成・ドキュメント生成
•ヒエラルキーCoder–より階層的なアプローチでデータを格納–サイズと処理速度が向上
• クラシックCoder– TableコードとReadableコードが選択可能
– 小さなモデル向け
43
ReqIFファイルのサポート• 標準のReqIF(Requirement Interchange Format)ファイルのインポートが可能• RequirementsをVisualState内の状態・遷移・アクション・要素と紐づけ
要求仕様がすべて満たされているか一目で確認することが可能
44
Summary• 短期間で高品質のアプリ開発の実現には状態遷移設計ツールでの開発が効果的
• IAR Visual Stateを使用することで組込みアプリにマッチした開発が可能
• 評価版ダウンロードで明日からすぐに試そう!
https://www.iar.com/jp/iar-embedded-workbench/add-ons-and-integrations/visualstate/
45