[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
(itron-club 1747)
テストの具体
例/Re:
Re:
応答性能はどうでしょうか
/Re:
ベ
ンチマークについて
- To: itron-club __at__ ertl.jp (itron-club ML)
- From: pai_ __at__ dj.pdx.ne.jp
- Date: Sun, 26 Dec 2004 22:38:53 +0900 (JST)
木元です。テストプログラムは、おっしゃる通りOSが正しく実装されている
かどうかを確かめるものです。以下のようなプログラムを想定しています(ケー
タイメールのため、全部大文字になっていますが、ご了承ください)。
VOID TASK_A(INT STACD) {
INT ERR;
PRINTF("TASK_A SLP_TSK\N");
ERR = SLP_TSK();
PRINTF("TASK_A ERR=%04X\N", ERR);
}
VOID TASK_B(INT STACD) {
INT ERR;
PRINTF("TASK_B WUP_TSK(%D)\N", ID_TASK_A);
ERR = WUP_TSK(ID_TASK_A);
PRINTF("TASK_B ERR=%04X\N", ERR);
}
ディスパッチ禁止状態でタスクAとタスクBを実行し、ディスパッチを許可し
ます。例えばタスクAとタスクBの優先度が同じで、タスクAがレディーキュー
の先頭にいれば、以下のようなログが期待できます。
TASK_A SLP_TSK
TASK_B WUP_TSK(1)
TASK_B ERR=0000
TASK_A ERR=0000
これにより、タスクAがレディーキューにつながったときにも、FCFS(FIRST
COME FIRST SERVE)の原則によりタスクBが実行されることがわかります。一
方、タスクAの方が優先度が高い場合は、以下のようになることが期待できま
す。
TASK_A SLP_TSK
TASK_B WUP_TSK(1)
TASK_A ERR=0000
TASK_B ERR=0000
この表示により、タスクBがWUP_TSK()から戻るのは、優先度の高いタスクAが
終了してからとなることが確認できます。
この方法はOSのデバッグ機能などを使用していませんので、どのOSでも共通
にテストすることができます。実際に使うときは、テストスクリプトからプロ
グラムを自動生成するのがよいと思います。割り込みやタイムティックについ
ては、CPUのTRAPなどを使用するか、ハード的にI/O出力を割り込み入力につ
なぐとシミュレートできるでしょう。
VOID TASK_C(INT STACD) {
INT I;
FOR (I=0; I<10; I++) {
PRINTF("TIME TICK(%D)\N", I);
ASM("TRAP 1");
}
}
なおこの方法では、OS内部を実行中に割り込みが発生した場合をシミュレー
トすることはできません。また、上記サンプルのPRINTF()は、割り込みやOSを
使用しないで実装しなければなりませんので、シリアルをポーリングで待つか、
または大きなメモリに書き出すのがよいと思います。
pai_