PD実践: マルチタスク演習2(周期タスク)

  • リアルタイムOS
    • この演習で使用しているEV3RTはリアルタイムOSであり、組み込みシステムに使われている。リアルタイムOSを使うと、プログラマは実行タイミングや実行時間を決めることでき、処理する時間をばらつきのないようにできる。これは、高い精度の制御をするために必要でロボットなどで大切である。
    • EV3RTではこの機能を実現するために周期ハンドラとよばれる決められた時間間隔でタスクを実行する機能がある。ハンドラとは、何かの処理が要求されたときに起動されるプログラムのこと。周期ハンドラは一定周期で実行されるハンドラであり、マウスがクリックされたときに実行されるイベントハンドラなどがある。なお、周期ハンドラについて詳細に知りたい学生はToppers新世代標準仕様書のハンドラを参照して欲しい。
  • 周期ハンドラ

 

DOMAIN(TDOM_APP) {
    ...
    EV3_CRE_CYC(TEST_EV3_CYC1, { TA_STA, 0, test_ev3_cychdr, 500, 0 });  ← この行を追加
    ...
}
ATT_MOD(app.o)

EV3_CRE_CYCの各パラメータの意味は、以下の通りです。

    • 【第1パラメータ】周期ハンドラのID番号
    • 【第2パラメータ】周期ハンドラの属性。
      • TA_STAを指定すると、アプリケーションの起動時に周期処理も開始する。
      • TA_NULLを指定すると、アプリケーションでEV3_sta_cyc(TEST_EV3_CYC1)を呼び出すまで動作しない。
    • 【第3パラメータ】周期ハンドラに渡される値(拡張情報)。この演習では0を指定する。
    • 【第4パラメータ】周期的に実行される関数。Cファイルに同名の関数を定義してください。
    • 【第5パラメータ】起動周期(EV3RTの場合、単位はミリ秒で指定)。この演習では500を指定する。
    • 【第6パラメータ】起動位相。周期ハンドラの動作開始を指定してから、最初に周期ハンドラが呼ばれるまでの相対時間。この演習では0を指定する。
      • 属性にTA_STAを指定して、起動位相に0を指定するとシステムが起動して最初のタイムティックが発生した時に動作する。
  • 周期ハンドラのAPI
ER ev3_sta_cyc
(
ID 
ev3cycid
)

   EV3用周期ハンドラの動作を開始する.

引数
ev3cycidEV3用周期ハンドラのID番号(EV3_CRE_CYCで指定)
戻り値
E_OK正常終了
E_CTX非タスクコンテキストからの呼出し
E_ID不正ID番号

 

ER ev3_stp_cyc
(
ID
ev3cycid
)

   EV3用周期ハンドラの動作を停止する.

引数
ev3cycidEV3用周期ハンドラのID番号(EV3_CRE_CYCで指定)
戻り値
E_OK正常終了
E_CTX非タスクコンテキストからの呼出し
E_ID不正ID番号

 

 

  • サンプルプログラム
  1. ソースファイル:/cyc-task/app.c、設定ファイル:/cyc-task/app.cfg
    プログラム起動後、MAIN_TASKはメロディーを鳴らす。同時に、周期ハンドラが 500ms毎に起動され、LCDにカウンタ表示する。
  • 演習2
  1.  サンプルプログラムcyc-taskの動作を確認してください。周期ハンドラの動作の仕組みを考えて説明してください。
  2.  サンプルプログラムを改造し、以下のプログラムを作成しなさい。『「かえるの歌」のメロディーを永遠と鳴らし続けながら、カウント数をLCDに表示する』
    – MAIN_TASK:「かえるの歌」のメロディーを鳴らす
    – SUB_TASK: カウント数をLCDに表示する
  3. 第3週演習3[レポート1]では並列実行を習っていなかったので反応の鈍いプログラムでした。サンプルプログラムcyc-taskを改良してリアルタイム性の高いプログラムを作成してください。
    以下のカラーセンサー(環境光と反射光)の組立例を組み立ててください。フタが開いたら100ms以内で「かえるの歌」が流れ、閉じたら100ms以内で止まるプログラムを作成しよう!

      • 29_lightsensor.lxf:オープンセンサー

 

 

  • レポート3
    • マルチタスク演習1,2をレポートにまとめ、Moodleから提出してください。

コメント

Folding@home Kanazawa (ID 257261)

みんなのためにおうちで新型コロナウイルスを解析しよう!

タイトルとURLをコピーしました