リアルタイムシステム

典型的なリアルタイムシステムの1つとして、1msといった周期で計測や制御を行うというものがあります。 この周期の正確性を保つことが汎用OSでは難しいため、このような用途には一般にマイコンのタイマ割り込みやリアルタイムOSが利用されます。

ここでは、HIPCのリアルタイムシステムへの応用例として、マイコン上の周期タスクのパラメータをパソコンから変更するサンプルを紹介します。このサンプルではリアルタイム環境としてArduino Uno上でDuinOSを利用しますが、まずはパソコンで擬似的に実行してみましょう。

パソコン上での実行

サンプルはexamples/rtsimpleにあります。 以下のように、cdでこのディレクトリに移動し、makeでビルド、make runで実行します。 (ソースコードの参照だけならこちらからも可能です。)

cd ../rtsimple/
make
make run

サンプルの簡単な説明

コンフィギュレーション

コンフィギュレーションファイル(hipccfg/CFGrt.yml)では、 unsigned char型でledという名前のメンバーを持つ構造体STRUprmを定義しています。

クライアント

クライアント(client/client_rt.c)は、ledを1にしたあと0にしているだけです。 1にしたあとsleep()等を挟まずすぐに0にする指示を出していますが、 サーバーは1回の制御周期(1秒)では1度までしかパラメータを変更しない実装になっているため、 LEDは1周期、つまり1秒間点灯します。 このことは、hipcdumpの出力から"L led:"の行のタイムスタンプと値(0か1か)を見ることでも確認できます。

サーバー

前のLEDのサンプルと異なり、サーバーにはリアルタイムタスクとパラメータバンク(pbank)が登場しています。

POSIX環境ではserver/main_posix.cで、pthreadとusleepを使って、1秒周期のリアルタイムタスクを模擬しています。パソコンから新しいパラメータが来ているときにhipcPbankSwitchAccept()を呼ぶと、pbank内でページが交換されます。そして、新しいパラメータを含むページをhipcPbankGetReadOnlyPage()で得ています。

server/hipcsvs_rt.cは、前のLEDのサンプルと比較すると、構造体変数を直接操作していたのが、pbankへの操作へと変わっていますが、大まかな処理の流れはそのままで変わっていません。

DuinOSのインストール

準備

まだHIPCのサンプルをArduinoの実機で実行する環境を整えていなければ、こちらを参考にしてarduino-1.0.5と必要ならドライバをインストールし、さらにarduino-1.0.5へHIPCライブラリをインストールして下さい。

DuinOSはarduino-1.6.4では動作しませんので、ここではarduino-1.0.5を利用します。

ダウンロードと解凍

これら2つのZIPファイルを適当な場所に解凍します。

インストール

基本的には https://github.com/DuinOS/DuinOS のReadme.txtに従いますが、 うまく行かなかったところを一部変更して日本語訳したものを以下に示します。

  1. Arduino IDEを実行している場合は、全て終了させる。
  2. DuinOS-masterのarduino.DuinOSフォルダを、arduino-1.0.5-r2の\hardware\arduino\coresフォルダにコピーする。
  3. \hardware\arduino\boards.txtの名前を適当に変更する。
  4. DuinOS-masterのhardwareフォルダの中のboards.txt\hardware\arduinoフォルダにコピーする。
  5. \lib\keywords.txtの名前を適当に変更する。
  6. DuinOS-masterのlibフォルダの中のkeywords.txt\libフォルダにコピーする。
  7. DuinOS-Examples-masterのMoreComplexBlinkingフォルダを\examplesフォルダにコピーする。
  8. Arduino IDEを起動する。
  9. メニューバーから "ツール" - "マイコンボード" と進み "Arduino UNO + Duinos" を選択する。
  10. メニューバーから "ファイル" - "スケッチの例" と進み "MoreComplexBlinking" を選択して、ビルド出来ることを確認する。

サンプルのビルドと書き込み

Arduino Unoボードを用意して下さい。

Arduinoのスケッチをビルドするためにrtsimpleという名前のフォルダを作ります。 先ほどパソコンのPOSIX環境でリアルタイムサンプルをmakeしたディレクトリからファイルをコピーします。 examples/rtsimpleのhipccfgディレクトリとserverディレクトリから以下のファイルを新しく作ったrtsimpleフォルダにコピーして下さい。

Arduino IDEを立ち上げて、rtsimple.inoを開きます。 スケッチをArduino Unoへ書き込んで下さい。

Arduinoとパソコン上のクライアントとの通信

先ほどパソコンのPOSIX環境でリアルタイムサンプルをmake runしたディレクトリに移動して、以下のコマンドを実行します。(ttyS2は適切なデバイス名に変更して下さい。)

ruby ../../utilities/hipcdump 'socat /dev/ttyS2,raw,b9600,echo=0 STDIO' 'sleep 3; client/client'

クライアントプログラムが終了したらCtrl+Cで終了します。

通信がうまく行かない場合は、こちらを参考に、まずはシリアルモニタやsocatから通信できることを確認して下さい。

前のページ 次のページ


TOPページ

Last modified: 2015/07/27 08:00:59 +09:00