Changeset 56 for asp_wo_cfg/trunk/sample/sample1.c
- Timestamp:
- Nov 11, 2012, 6:18:55 PM (11 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
asp_wo_cfg/trunk/sample/sample1.c
r49 r56 38 38 * の責任を負わない. 39 39 * 40 * @(#)$Id$40 * $Id$ 41 41 */ 42 42 … … 49 49 * 50 50 * ユーザインタフェースを受け持つメインタスク(タスクID: MAIN_TASK,優 51 * 先度: MAIN_PRIORITY)と,3つの並 列実行されるタスク(タスクID:51 * 先度: MAIN_PRIORITY)と,3つの並行実行されるタスク(タスクID: 52 52 * TASK1〜TASK3,初期優先度: MID_PRIORITY)で構成される.また,起動周 53 53 * 期が2秒の周期ハンドラ(周期ハンドラID: CYCHDR1)を用いる. 54 54 * 55 * 並列実行されるタスクは,task_loop回空ループを実行する度に,タスクが 56 * 実行中であることをあらわすメッセージを表示する. 55 * 並行実行されるタスクは,task_loop回空ループを実行する度に,タスクが 56 * 実行中であることをあらわすメッセージを表示する.空ループを実行する 57 * のは,空ループなしでメッセージを出力すると,多量のメッセージが出力 58 * され,プログラムの動作が確認しずらくなるためである.また,低速なシ 59 * リアルポートを用いてメッセージを出力する場合に,すべてのメッセージ 60 * が出力できるように,メッセージの量を制限するという理由もある. 57 61 * 58 62 * 周期ハンドラは,三つの優先度(HIGH_PRIORITY,MID_PRIORITY, … … 61 65 * 62 66 * メインタスクは,シリアルI/Oポートからの文字入力を行い(文字入力を 63 * 待っている間は,並 列実行されるタスクが実行されている),入力された67 * 待っている間は,並行実行されるタスクが実行されている),入力された 64 68 * 文字に対応した処理を実行する.入力された文字と処理の関係は次の通り. 65 69 * Control-Cまたは'Q'が入力されると,プログラムを終了する. … … 452 456 * ループ回数の設定 453 457 * 454 * TASK_LOOPがマクロ定義されている場合,測定せずに,TASK_LOOPに定 455 * 義された値を,タスク内でのループ回数とする. 456 * 457 * MEASURE_TWICEがマクロ定義されている場合,1回目の測定結果を捨て 458 * て,2回目の測定結果を使う.1回目の測定は長めの時間が出るため. 458 * 並行実行されるタスク内での空ループの回数(task_loop)は,空ルー 459 * プの実行時間が約0.4秒になるように設定する.この設定のために, 460 * LOOP_REF回の空ループの実行時間を,その前後でget_timを呼ぶことで 461 * 測定し,その測定結果から空ループの実行時間が0.4秒になるループ回 462 * 数を求め,task_loopに設定する. 463 * 464 * LOOP_REFは,デフォルトでは1,000,000に設定しているが,想定したよ 465 * り遅いプロセッサでは,サンプルプログラムの実行開始に時間がかか 466 * りすぎるという問題を生じる.逆に想定したより速いプロセッサでは, 467 * LOOP_REF回の空ループの実行時間が短くなり,task_loopに設定する値 468 * の誤差が大きくなるという問題がある. 469 * 470 * そこで,そのようなターゲットでは,target_test.hで,LOOP_REFを適 471 * 切な値に定義するのが望ましい. 472 * 473 * また,task_loopの値を固定したい場合には,その値をTASK_LOOPにマ 474 * クロ定義する.TASK_LOOPがマクロ定義されている場合,上記の測定を 475 * 行わずに,TASK_LOOPに定義された値を空ループの回数とする. 476 * 477 * ターゲットによっては,空ループの実行時間の1回目の測定で,本来よ 478 * りも長めになるものがある.このようなターゲットでは,MEASURE_TWICE 479 * をマクロ定義することで,1回目の測定結果を捨てて,2回目の測定結果 480 * を使う. 481 * 482 * タスク例外処理ルーチン内での空ループの回数(tex_loop)は, 483 * task_loopの4分の1の値(空ループの実行時間が0.1秒になるループ回 484 * 数)に設定する. 459 485 */ 460 486 #ifdef TASK_LOOP … … 476 502 477 503 #endif /* TASK_LOOP */ 478 tex_loop = task_loop / 5;504 tex_loop = task_loop / 4; 479 505 480 506 /*
Note:
See TracChangeset
for help on using the changeset viewer.