CPU例外処理のテスト 【テストの目的】 CPU例外ハンドラの実行開始/リターン時のシステム状態と,CPU例外ハンドラ 中でのxsns_dpnの動作を網羅的にテストする. 【テスト項目】 (A) CPU例外ハンドラ実行開始時にCPUロックフラグが変化しないこと (B) CPU例外ハンドラ実行開始時に割込み優先度マスクが変化しないこと !CPU例外ハンドラ中で割込み優先度マスクを読めないため,テストできな  い. (C) CPU例外ハンドラ実行開始時にディスパッチ禁止フラグが変化しないこと (D) CPU例外ハンドラリターン時にCPUロックフラグが元に戻ること (E) CPU例外ハンドラリターン時に割込み優先度マスクが元に戻ること (F) CPU例外ハンドラリターン時にディスパッチ禁止フラグが変化しないこと (G) xsns_dpnが正しい値を返すこと xsns_dpnは,CPU例外が発生した状況が次の条件をすべて満たす場合にfalse, そうでない場合にtrueを返す.  ・タスクコンテキスト  ・割込みロック解除状態  ・CPUロック解除状態  ・割込み優先度マスク全解除状態  ・ディスパッチ許可状態 (H) タスク切換えによるリカバリーができること 【テストを実施する状況】 CPU例外の発生する状況は,次のように分類することができる.これらの状況毎 にテストプログラムを用意する. (a-1) 非タスクコンテキスト (a-2) タスクコンテキスト (b-1) 割込みロック状態 (b-2) 割込みロック解除状態 (c-1) CPUロック状態 (c-2) CPUロック解除状態 (d-1) 割込み優先度マスク全解除(割込み優先度マスク=TIPM_ENAALL) (d-2) 割込み優先度マスク=TMAX_INTPRI !TMAX_INTPRI=TMIN_INTPRIの場合は(d-3)と同じになるので実施しない. (d-3) 割込み優先度マスク=TMIN_INTPRI (d-4) 割込み優先度マスク=TMIN_INTPRI-1 !TMIN_INTPRI-1が設定できるかはターゲットに依存する. (e-1) ディスパッチ禁止状態 (e-2) ディスパッチ許可状態 この組み合わせをすべてテストすることは現実的でないため,代表的なパター ンに絞り込む. まず,(a)〜(c)の組み合わせで,次の5つのパターンをテストする.これらのテ ストをする際には,(d)と(e)については,(d-1)(e-1)の組み合わせに固定する. (1) (a-1)(b-1)(c-2) → リカバリー不可 !(a-1)(b-1)(c-1)のテストは省く. (2) (a-1)(b-2)(c-1) → リカバリー不可 (3) (a-1)(b-2)(c-2) → リカバリー不可 (4) (a-2)(b-1)(c-2) → リカバリー不可 !(a-2)(b-1)(c-1)のテストは省く. (5) (a-2)(b-2)(c-1) → リカバリー不可 次に,(a)〜(c)を(a-2)(b-2)(c-2)に固定して,(d)と(e)の組み合わせで,次の 5つのパターンをテストする. (6) (d-1)(e-2) → タスク切換えによるリカバリー可能 (7) (d-1)(e-1) → リカバリー不可 (8) (d-2)(e-2) → リカバリー不可 !(d-2)(e-1)のテストは省く. (9) (d-3)(e-2) → リカバリー不可 !(d-3)(e-1)のテストは省く. (10) (d-4)(e-2) → リカバリー不可 !(d-4)(e-1)のテストは省く. 【使用リソース】 TASK1: 中優先度タスク,TA_ACT属性 TASK2: 高優先度タスク CPUEXC: CPU例外ハンドラ ALM1: アラームハンドラ 以上