21
CLOOCA チチチチチチチ MEXU ON GR-SAKURA チチチチチチチチ LSI チチチチチチ チチチチ 1

02 cloocaチュートリアル(gr-sakura)

Embed Size (px)

Citation preview

CLOOCA チュートリアルMEXU ON GR-SAKURA九州大学システム LSI 研究センター久住憲嗣

1

目次• Clooca 上の MEXU ツールを使用して GR-SAKURA を制

御する• MEXU ツールはひとつのクラス図とクラスに所属するス

テートマシン図から C++ ソースコードを生成する• 手順

• Clooca 上• アカウントの作成• MEXU ツールのインポート• プロジェクトの作成• クラス図の作成• ステートマシン図の作成

• クラウドコンパイラ上• ビルド

2

3

ユーザ登録とログイン

以下のようなメールを受信

click!

右上のログイン画面からログイン

ユーザ登録http://www.clooca.com/ にアクセス

4

MEXU ツールをインポートmarket タブを選択

「 MEXU 」をクリック

「はじめる」を click

5

プロジェクトを作成7) 「ダッシュボード」タブを選択 & 「プロジェクト作成」を click

8) プロジェクト名を記入

9) プロジェクトが完成

編集を開始作成されたプロジェクトをクリックすると表示される画面

で「編集する」を押して編集を開始します.

クラス図にクラスを追加「 ModelExplorer 」にある「 ClassDiagram 」をくりっう「クラス」を選択した後,ダイアグラムをクリックしてダイアグラムにクラスを追加します.

クラス図にクラスを追加ダイアグラムにクラスが追加されました.適当に名前を付けておきましょう.

ステートマシン図ModelExplorer から StateDiagram をダブ

ルクリックするとステートマシン図が開く

StateDiagram で使用するツール

状態 遷移 開始状態

ステートマシン図

10

開始擬似状態が必要

初期状態状態名は C+

+ の命名規則に沿っていれば自由に設定できる

状態遷移を引きイベントを設定

イベント名は C++ の命名規則に沿っていれば自由に設定

できる

ステートにアクションを記述

11

状態を選択して entry アクションを記述状態遷移が発生した時に一回だけ実行されるアクションは C++ で記述(生成されたコードにそのまま埋め込まれる)main.h に記載されている関数,変数は利用可能

注意! :初期状態の entry アクションは起動時に1回無条件に実行される

インスタンスの生成 / 初期化

Controller controller;

void setup_classes(void) {

   pinMode(PIN_LED0, OUTPUT);

}

12

1) Model Explorer から ClassDiagram を選択

2) Property の bodyhook に記述

bodyhook の中身

インスタンス群を生成

setup_classes 関数が起動時に一回だけ呼び出されるので

初期化を行う

イベントの送信• 送信先 .sendEvent( イベント ID)

• 送信先• 送信先インスタンス

• イベント ID• イベント ID は「クラス名 _EVENT_ イベント名」のマクロで定義され

• bodyhook 中で定義したインスタンスは,ステートマシン図のアクション記述の中で参照可能

13

タイマ• 以下のコードで指定した時間後に,イベント送信先に,

イベントが送信される• timer.add( ミリ秒,イベント送信先,イベント名 )

• 例 :• timer.add(500, this, Controller_EVENT_fire);• 500 ミリ秒後に自分自身に fire イベントを送信

• イベントは一回のみ送信される• timer.addR( ミリ秒,イベント送信先,イベント名 )

• イベント繰り返し発生する• (あまりテストされていないので使用注意)

14

ビルド (1) : ランタイムライブラリの設定• clooca / MEXU ランタイムライブラリをダウンロード

• https://dl.dropboxusercontent.com/u/6138936/mexu/sakura.zip• stm.h / stm.cpp を動作させる他に必要なランタイムライブラリ

• MEXU.cpp, MEXU.h, main.cpp, main.h• +α : grsakura.sh, grsakura-inspection.sh

• クラウドコンパイラに上記 zip ファイルをインポート• Project_Root を右クリック→ zip ファイルインポート

• (モデルによって変化しない)固定部分なので1度のみ実行で OK

15

ビルド (2) : 生成コードのアップロード• clooca でソースコードをダウンロード

• zip ファイルがダウンロード出来る• zip ファイル中の stm.h / stm.cpp が生成されたコード

• クラウドコンパイラに上記 zip ファイルをインポート• Project_Root を右クリック→ zip ファイルインポート

• あとは通常と同様

16

loop 関数のカスタマイズ

void loop(void) {

eventManager.execute();

  /* このあたりに追加 */

}

17

外部デバイスをポーリングしモデルにイベントを送信したい場合にloop 関数にコードを追加するloop 関数は main.cpp で定義

eventManager.execute(); によりステートマシンを実行必ず一定時間に一回はこの行を実行する必要あり

  追加コードでブロックしてしまわないこと

loop 関数のカスタマイズ : SW2 の読み出しsetup 関数に pinMode(PIN_SW, INPUT); を追加.

void sw2_polling(void) {

static int button_pushed = 0;

int sw = digitalRead(PIN_SW);

if (sw != button_pushed) {

button_pushed = sw;

if (sw == HIGH) {

extern Controller controller;

controller.sendEvent(Controller_EVENT_pushed);

}

}

}

void loop(void) {

eventManager.execute();

sw2_polling();

}

18

ボタンが押された時に controller にpushed イベントを送信

モデリング上の注意• Model Explorer と Diagram の一貫性が崩れるとコンパイ

ルがうまくいかない可能性がある• 特にダイアグラムからモデル要素を削除した場合に発生する• Model Explorer を見てすでにないモデル要素を探す

• 発見した場合には右クリックして削除する.

19

参考 : grsakura.sh (1)• clooca で記述したソフトウェアを GR-SAKURA にダウン

ロードするまでを自動化するスクリプト• Mac OS X 上でのみ動作確認済み

• スクリプト中の以下の変数を定義する必要あり• CLOOCAUSERPASS

• clooca のユーザ名とパスワードを「 : 」で区切ったもの• CLOOCAPROJECTID

• clooca のプロジェクト ID URL から取得

• (次ページに続く)

20

参考 : grsakura.sh (2)• スクリプト中の以下の変数を定義する必要あり(続き)

• WEBCOMAPIKEY• ウェブコンパイラのキー ヘルプから取得

• WEBCOMPROJECTID• ウェブコンパイラ上のプロジェクト IDgrsakura-inspect.sh を実行して取得• 例 : sh grsakura-inspect.sh Ab7IatdwWUn8wgJV

• {"projects":[{ "id":"15996" , "name":"2013-07-22-test" }]}

• WEBCOMBINID• ウェブコンパイラ上の sketch.bin のオブジェクト ID• grsakura-inspect.sh を実行して取得• 例 : sh grsakura-inspect.sh Ab7IatdwWUn8wgJV 15996

• {"projects":[{ "id":"15996" , "name":"2013-07-22-test" }]}• {"structure":[{ "id":"985181" , "name":"gr_build" , "type":"1" },{ "id":"985187" ,

"name":"gr_common" , "type":"1" },{ "id":"985247" , "name":"gr_reference_e.html" , "type":"2" },{ "id":"985248" , "name":"gr_reference_j.html" , "type":"2" },{ "id":"1019989" , "name":"main.cpp" , "type":"2" },{ "id":"1019990" , "name":"main.h" , "type":"2" },{ "id":"985250" , "name":"makefile" , "type":"2" },{ "id":"1019991" , "name":"MEXU.cpp" , "type":"2" },{ "id":"1019992" , "name":"MEXU.h" , "type":"2" },{ "id":"985251" , "name":"sketch.bin" , "type":"2" },{ "id":"1019993" , "name":"stm.cpp" , "type":"2" },{ "id":"1041119" , "name":"stm.h" , "type":"2" }]}

21

API キー

API キー

API キー