1 |
|
---|
2 | CPU例外処理のテスト
|
---|
3 |
|
---|
4 | 【テストの目的】
|
---|
5 |
|
---|
6 | CPU例外ハンドラの実行開始/リターン時のシステム状態と,CPU例外ハンドラ
|
---|
7 | 中でのxsns_dpnとxsns_xpnの動作を網羅的にテストする.
|
---|
8 |
|
---|
9 | 【テスト項目】
|
---|
10 |
|
---|
11 | (A) CPU例外ハンドラ実行開始時にCPUロックフラグが変化しないこと
|
---|
12 |
|
---|
13 | (B) CPU例外ハンドラ実行開始時に割込み優先度マスクが変化しないこと
|
---|
14 | !CPU例外ハンドラ中で割込み優先度マスクを読めないため,テストできな
|
---|
15 | い.
|
---|
16 |
|
---|
17 | (C) CPU例外ハンドラ実行開始時にディスパッチ禁止フラグが変化しないこと
|
---|
18 |
|
---|
19 | (D) CPU例外ハンドラ実行開始時にタスク例外処理禁止フラグが変化しないこと
|
---|
20 |
|
---|
21 | (E) CPU例外ハンドラリターン時にCPUロックフラグが元に戻ること
|
---|
22 |
|
---|
23 | (F) CPU例外ハンドラリターン時に割込み優先度マスクが元に戻ること
|
---|
24 |
|
---|
25 | (G) CPU例外ハンドラリターン時にディスパッチ禁止フラグが変化しないこと
|
---|
26 |
|
---|
27 | (H) CPU例外ハンドラリターン時にタスク例外処理禁止フラグが変化しないこと
|
---|
28 |
|
---|
29 | (I) xsns_xpnが正しい値を返すこと
|
---|
30 |
|
---|
31 | xsns_xpnは,CPU例外が発生した状況が次の条件をすべて満たす場合にfalse,
|
---|
32 | そうでない場合にtrueを返す.
|
---|
33 | ・タスクコンテキスト
|
---|
34 | ・割込みロック解除状態
|
---|
35 | ・CPUロック解除状態
|
---|
36 | ・割込み優先度マスク全解除状態
|
---|
37 | ・タスク例外許可状態
|
---|
38 |
|
---|
39 | (J) xsns_dpnが正しい値を返すこと
|
---|
40 |
|
---|
41 | xsns_dpnは,CPU例外が発生した状況が次の条件をすべて満たす場合にfalse,
|
---|
42 | そうでない場合にtrueを返す.
|
---|
43 | ・タスクコンテキスト
|
---|
44 | ・割込みロック解除状態
|
---|
45 | ・CPUロック解除状態
|
---|
46 | ・割込み優先度マスク全解除状態
|
---|
47 | ・ディスパッチ許可状態
|
---|
48 |
|
---|
49 | (K) タスク切換えによるリカバリーができること
|
---|
50 |
|
---|
51 | (L) タスク例外によるリカバリーができること
|
---|
52 |
|
---|
53 | 【テストを実施する状況】
|
---|
54 |
|
---|
55 | CPU例外の発生する状況は,次のように分類することができる.これらの状況毎
|
---|
56 | にテストプログラムを用意する.
|
---|
57 |
|
---|
58 | (a-1) 非タスクコンテキスト
|
---|
59 | (a-2) タスクコンテキスト
|
---|
60 |
|
---|
61 | (b-1) 割込みロック状態
|
---|
62 | (b-2) 割込みロック解除状態
|
---|
63 |
|
---|
64 | (c-1) CPUロック状態
|
---|
65 | (c-2) CPUロック解除状態
|
---|
66 |
|
---|
67 | (d-1) 割込み優先度マスク=TIPM_ENAALL
|
---|
68 | (d-2) 割込み優先度マスク=TMAX_INTPRI
|
---|
69 | !TMAX_INTPRI=TMIN_INTPRIの場合は(d-3)と同じになるので実施しない.
|
---|
70 | (d-3) 割込み優先度マスク=TMIN_INTPRI
|
---|
71 | (d-4) 割込み優先度マスク=TMIN_INTPRI-1
|
---|
72 | !TMIN_INTPRI-1が設定できるかはターゲットに依存する.
|
---|
73 |
|
---|
74 | (e-1) ディスパッチ禁止状態
|
---|
75 | (e-2) ディスパッチ許可状態
|
---|
76 |
|
---|
77 | (f-1) タスク例外禁止状態
|
---|
78 | (f-2) タスク例外許可状態
|
---|
79 |
|
---|
80 | この組み合わせをすべてテストすることは現実的でないため,代表的なパター
|
---|
81 | ンに絞り込む.
|
---|
82 |
|
---|
83 | まず,(a)~(c)の組み合わせで,次の5つのパターンをテストする.これらのテ
|
---|
84 | ストをする際には,(d)~(f)については,(d-1)(e-1)(f-2)の組み合わせに固定
|
---|
85 | する.
|
---|
86 |
|
---|
87 | (1) (a-1)(b-1)(c-2) → リカバリー不可
|
---|
88 | !(a-1)(b-1)(c-1)のテストは省く.
|
---|
89 | (2) (a-1)(b-2)(c-1) → リカバリー不可
|
---|
90 | (3) (a-1)(b-2)(c-2) → リカバリー不可
|
---|
91 |
|
---|
92 | (4) (a-2)(b-1)(c-2) → リカバリー不可
|
---|
93 | !(a-2)(b-1)(c-1)のテストは省く.
|
---|
94 | (5) (a-2)(b-2)(c-1) → リカバリー不可
|
---|
95 |
|
---|
96 | 次に,(a)~(c)を(a-2)(b-2)(c-2)に固定して,(d)~(f)の組み合わせで,次の
|
---|
97 | 8つのパターンをテストする.
|
---|
98 |
|
---|
99 | (6) (d-1)(e-2)(f-1) → タスク切換えによるリカバリー可能
|
---|
100 |
|
---|
101 | (7) (d-1)(e-1)(f-2) → タスク例外によるリカバリー可能
|
---|
102 |
|
---|
103 | (8) (d-2)(e-2)(f-2) → リカバリー不可
|
---|
104 | !(d-2)(e-1)(f-2)のテストは省く.
|
---|
105 |
|
---|
106 | (9) (d-3)(e-2)(f-2) → リカバリー不可
|
---|
107 | !(d-3)(e-1)(f-2)のテストは省く.
|
---|
108 |
|
---|
109 | (10) (d-4)(e-2)(f-2) → リカバリー不可
|
---|
110 | !(d-4)(e-1)(f-2)のテストは省く.
|
---|
111 |
|
---|
112 | (11) (d-1)(e-2)(f-2) → 両方法によるリカバリー可能
|
---|
113 |
|
---|
114 | (12) (d-1)(e-1)(f-1) → リカバリー不可
|
---|
115 | (d-2)~(d-4)×(e-1)×(f-1) のテスト(3パターン)は省く.
|
---|
116 |
|
---|
117 | (13) (d-3)(e-2)(f-1) → リカバリー不可
|
---|
118 | (d-2),(d-4)×(e-2)×(f-1) のテスト(2パターン)は省く.
|
---|
119 |
|
---|
120 | 【使用リソース】
|
---|
121 |
|
---|
122 | TASK1: TA_ACT,中優先度,タスク例外処理ルーチン登録
|
---|
123 | TASK2: TA_NULL,高優先度
|
---|
124 | CPUEXC1: TA_NULL
|
---|
125 | ALM1: TA_NULL
|
---|
126 |
|
---|
127 | 以上
|
---|