mruby/cをPsoC5LPで動かす|Chapter03 複数のmrubyプログラムを同時に動かす
※この記事に掲載されている情報は、2018年3月時点のものです。
mruby/cの特徴として、複数のmrubyプログラムを同時実行することができることがあげられます。
これを試してみます。
目標
- 複数のmrubyプログラムを同時に動かし、協調動作をさせる。
- コンソールを有効にする。
複数のmrubyプログラムを同時に動かし、協調動作をさせる
mrubyプログラムの用意とコンパイル
今までsample1.rbの中でプッシュスイッチの状態を見ていましたが、これをsample2.rbの仕事にして、sample2.rbからsample1.rbへグローバル変数で情報を伝えるようにします。
sample1.rbの10行目付近を、以下のように変更します。
|
sample2.rbを新規作成します。
|
main.c プログラムの変更
|
ビルドと実行
- メニューから、 Build > Build Design01 を選びます。
- Output欄へ、「--------------- Build Succeeded: ...」と表示されるのを確認します。
- デバイスをUSBポートへ接続します。
- メニューから Debug > Program を選択します。
- Output欄へ、「Device 'PSoC 5LP CY8C5888LT*-LP097' was successfully programmed at ...」と表示されるのを確認します。
- デバイス上でLED1(青色)が点滅し、プッシュスイッチ SW1を押すと点いたまま消灯しなくなる動作を確認します。
コンソールを有効にする
mruby/cランタイムがエラーを検出したとき、コンソールがあるとそこにメッセージが表示されます。 また、古典的なデバッグ方法であるprintfデバッグをする場合も、利用方法が共通化されたコンソールがあることが望ましいです。
準備
シリアルが扱えるターミナルエミュレータソフトが必要です。 たとえば、TeraTerm (https://ttssh2.osdn.jp)等があげられます。 ダウンロードして、インストールしておきます。
回路の追加
- 画面左 Workspace Explorerペインから、TopDesign.cyschをダブルクリックして、回路図を画面に表示させます。
- 画面右 ComponentCatalog ペインから、Communications > UART をドラッグし、中央のペインへドロップします。
画面左 Workspace Explorerペインの Pins をダブルクリックしてピンアサイン画面を表示します。 (表示されていない場合は、Project > Design Wide Resource 下にあるので、順に展開する)
右ペインの Port欄を以下のように設定します。
Rx_1 P12[6]
Tx_1 P12[7]
main.c プログラムの変更
追加した回路を、mruby/cのコンソールに割り当てるコードを追加します。 hal_write関数がそれにあたりますが、今までダミーの関数を置いていたので、それを以下のコードと置き換えます。
|
また、main関数内へ初期化コードを追加します。
|
mrubyプログラムの修正
sample1.rbで、LED表示状態をコンソールにも出力するように追加します。
|
ビルド
- メニューから、 Build > Build Design01 を選びます。
- Output欄へ、「--------------- Build Succeeded: ...」と表示されるのを確認します。
- デバイスをUSBポートへ接続します。
- メニューから Debug > Program を選択します。
- Output欄へ、「Device 'PSoC 5LP CY8C5888LT*-LP097' was successfully programmed at ...」と表示されるのを確認します。
動作確認
ターミナルソフトを起動し、COM番号をターゲットボードに合わせます。画面はTeraTermのものです。
また、ボーレートを、57600に設定します。TeraTermでは設定>シリアルポートから設定します。
ターミナルソフト上で、LEDの点滅に合わせて0と1が交互に表示され、プッシュスイッチを押すと1の表示だけになることを確認します。