OSDN Git Service

7ac0e8c423d9e1efc97d350d74d328679c321af7
[toppersasp4lpc/asp.git] / asp / test / test_task1.c
1 /*
2  *  TOPPERS Software
3  *      Toyohashi Open Platform for Embedded Real-Time Systems
4  * 
5  *  Copyright (C) 2007-2009 by Embedded and Real-Time Systems Laboratory
6  *              Graduate School of Information Science, Nagoya Univ., JAPAN
7  * 
8  *  上記著作権者は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ
9  *  ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
10  *  変・再配布(以下,利用と呼ぶ)することを無償で許諾する.
11  *  (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
12  *      権表示,この利用条件および下記の無保証規定が,そのままの形でソー
13  *      スコード中に含まれていること.
14  *  (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
15  *      用できる形で再配布する場合には,再配布に伴うドキュメント(利用
16  *      者マニュアルなど)に,上記の著作権表示,この利用条件および下記
17  *      の無保証規定を掲載すること.
18  *  (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
19  *      用できない形で再配布する場合には,次のいずれかの条件を満たすこ
20  *      と.
21  *    (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
22  *        作権表示,この利用条件および下記の無保証規定を掲載すること.
23  *    (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
24  *        報告すること.
25  *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
26  *      害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
27  *      また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
28  *      由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを
29  *      免責すること.
30  * 
31  *  本ソフトウェアは,無保証で提供されているものである.上記著作権者お
32  *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
33  *  に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
34  *  アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
35  *  の責任を負わない.
36  * 
37  *  @(#) $Id: test_task1.c 1577 2009-05-31 14:30:51Z ertl-hiro $
38  */
39
40 /* 
41  *              タスク管理モジュールのテスト(1)
42  *
43  * 【テストの目的】
44  *
45  *  make_runnableとmake_non_runnableを網羅的にテストする.
46  *
47  * 【テスト項目】
48  *
49  *      (A) 実行状態のタスクよりも高い優先度のタスクを実行できる状態にする
50  *              (A-1) ディスパッチ保留状態ではない場合
51  *              (A-2) ディスパッチ保留状態の場合
52  *      (B) 実行状態のタスクと同じ優先度のタスクを実行できる状態にする
53  *              !同じ優先度のタスクの中の末尾に入ることを確認する
54  *      (C) 実行状態のタスクよりも低い優先度のタスクを実行できる状態にする
55  *              !同じ優先度のタスクの中の末尾に入ることを確認する
56  *      (D) 実行できる状態のタスクがない状態で,タスクを実行できる状態にする
57  *              !この場合は,ディスパッチ保留状態ではない
58  *      (E) ディスパッチ保留状態で,実行状態になるべきだが実行可能状態タス
59  *              クよりも高い優先度のタスクを,実行できる状態にする
60  *      (F) ディスパッチ保留状態で,実行状態になるべきだが実行可能状態タス
61  *              クと同じ優先度のタスクを,実行できる状態にする
62  *      (G) ディスパッチ保留状態で,実行状態になるべきだが実行可能状態タス
63  *              クよりも低い優先度のタスクを,実行できる状態にする
64  *      (H) 実行状態のタスクを,実行できる状態でなくす
65  *              (H-1) 実行できる状態のタスクがなくなる場合
66  *              (H-2) 同一優先度のタスクがなくなる場合
67  *              (H-3) 同一優先度のタスクがなくならない場合
68  *      (I) 実行可能状態のタスクを,実行できる状態でなくす
69  *              (I-1) 同一優先度のタスクがなくなる場合
70  *              (I-2) 同一優先度のタスクがなくならない場合
71  *      (J) ディスパッチ保留状態で,実行状態になるべきだが実行可能状態となっ
72  *              ているタスクを,実行できる状態でなくす
73  *              (J-1) 同一優先度のタスクがなくなる場合
74  *              (J-2) 同一優先度のタスクがなくならない場合
75  *      (K) ディスパッチ保留状態で,実行可能状態になるべきだが実行状態のタ
76  *              スクを,実行できる状態でなくす
77  *              !ディスパッチ保留では,実行状態のタスクが実行できる状態でなく
78  *              なるような遷移を起こすことができないため,この状況は起こらない.
79  *
80  * 【使用リソース】
81  *
82  *      TASK1: 中優先度タスク,メインタスク,最初から起動
83  *      TASK2: 高優先度タスク
84  *      TASK3: 中優先度タスク
85  *      TASK4: 中優先度タスク
86  *      TASK5: 低優先度タスク
87  *      TASK6: 低優先度タスク
88  *      ALM1:  アラームハンドラ
89  *
90  * 【テストシーケンス】
91  *
92  *      == TASK1(優先度:中)==
93  *      1:      act_tsk(TASK2)                                  ... (A-1)
94  *      == TASK2(優先度:高)==
95  *      2:      slp_tsk()                                               ... (H-2)
96  *      == TASK1(続き)==
97  *      3:      act_tsk(TASK3)                                  ... (B)
98  *      4:      act_tsk(TASK4)                                  ... (B)
99  *      5:      slp_tsk()                                               ... (H-3)
100  *      == TASK3(優先度:中)==
101  *      6:      slp_tsk()                                               ... (H-3)
102  *      == TASK4(優先度:中)==
103  *      7:      wup_tsk(TASK1)
104  *      8:      slp_tsk()                                               ... (H-3)
105  *      == TASK1(続き)==
106  *      9:      act_tsk(TASK5)                                  ... (C)
107  *      10:     act_tsk(TASK6)                                  ... (C)
108  *      11:     sus_tsk(TASK6)                                  ... (I-2)
109  *      12:     sus_tsk(TASK5)                                  ... (I-1)
110  *      13:     rsm_tsk(TASK5)                                  ... (C)
111  *      14:     rsm_tsk(TASK6)                                  ... (C)
112  *      15:     slp_tsk()                                               ... (H-2)
113  *      == TASK5(優先度:低)==
114  *      16:     slp_tsk()                                               ... (H-3)
115  *      == TASK6(優先度:低)==
116  *      17:     dis_dsp()
117  *      18:     wup_tsk(TASK1)                                  ... (A-2)
118  *      19:     wup_tsk(TASK2)                                  ... (E)
119  *      20:     sus_tsk(TASK2)                                  ... (J-1)
120  *      21:     wup_tsk(TASK3)                                  ... (F)
121  *      22:     wup_tsk(TASK4)                                  ... (F)
122  *      23:     sus_tsk(TASK1)                                  ... (J-2)
123  *      24:     ena_dsp()
124  *      == TASK3(続き)==
125  *      25:     slp_tsk()                                               ... (H-3)
126  *      == TASK4(続き)==
127  *      26:     slp_tsk()                                               ... (H-2)
128  *      == TASK6(続き)==
129  *      27:     dis_dsp()
130  *      28:     rsm_tsk(TASK1)                                  ... (A-2)
131  *      29:     wup_tsk(TASK5)                                  ... (G)
132  *      30:     ena_dsp()
133  *      == TASK1(続き)==
134  *      31:     slp_tsk()                                               ... (H-2)
135  *      == TASK6(続き)==
136  *      32:     slp_tsk()                                               ... (H-3)
137  *      == TASK5(続き)==
138  *      33:     sta_alm(ALM1, 10)
139  *      34:     slp_tsk()                                               ... (H-1)
140  *      == ALM1 ==
141  *      35:     iget_tid(&tskid)
142  *              assert(tskid == TSK_NONE)
143  *      36:     iwup_tsk(TASK1)                                 ... (D)
144  *      37:     RETURN
145  *      == TASK1(続き)==
146  *      38: END
147  */
148
149 #include <kernel.h>
150 #include <test_lib.h>
151 #include <t_syslog.h>
152 #include "kernel_cfg.h"
153 #include "test_task1.h"
154
155 void
156 alarm1_handler(intptr_t exinf)
157 {
158         ER              ercd;
159         ID              tskid;
160
161         check_point(35);
162         ercd = iget_tid(&tskid);
163         check_ercd(ercd, E_OK);
164         check_assert(tskid == TSK_NONE);
165
166         check_point(36);
167         ercd = iwup_tsk(TASK1);
168         check_ercd(ercd, E_OK);
169
170         check_point(37);
171         return;
172
173         check_point(0);
174 }
175
176 void
177 task1(intptr_t exinf)
178 {
179         ER              ercd;
180
181         check_point(1);
182         ercd = act_tsk(TASK2);
183         check_ercd(ercd, E_OK);
184
185         check_point(3);
186         ercd = act_tsk(TASK3);
187         check_ercd(ercd, E_OK);
188
189         check_point(4);
190         ercd = act_tsk(TASK4);
191         check_ercd(ercd, E_OK);
192
193         check_point(5);
194         ercd = slp_tsk();
195         check_ercd(ercd, E_OK);
196
197         check_point(9);
198         ercd = act_tsk(TASK5);
199         check_ercd(ercd, E_OK);
200
201         check_point(10);
202         ercd = act_tsk(TASK6);
203         check_ercd(ercd, E_OK);
204
205         check_point(11);
206         ercd = sus_tsk(TASK6);
207         check_ercd(ercd, E_OK);
208
209         check_point(12);
210         ercd = sus_tsk(TASK5);
211         check_ercd(ercd, E_OK);
212
213         check_point(13);
214         ercd = rsm_tsk(TASK5);
215         check_ercd(ercd, E_OK);
216
217         check_point(14);
218         ercd = rsm_tsk(TASK6);
219         check_ercd(ercd, E_OK);
220
221         check_point(15);
222         ercd = slp_tsk();
223         check_ercd(ercd, E_OK);
224
225         check_point(31);
226         ercd = slp_tsk();
227         check_ercd(ercd, E_OK);
228
229         check_finish(38);
230
231         check_point(0);
232 }
233
234 void
235 task2(intptr_t exinf)
236 {
237         ER              ercd;
238
239         check_point(2);
240         ercd = slp_tsk();
241         check_ercd(ercd, E_OK);
242
243         check_point(0);
244 }
245
246 void
247 task3(intptr_t exinf)
248 {
249         ER              ercd;
250
251         check_point(6);
252         ercd = slp_tsk();
253         check_ercd(ercd, E_OK);
254
255         check_point(25);
256         ercd = slp_tsk();
257         check_ercd(ercd, E_OK);
258
259         check_point(0);
260 }
261
262 void
263 task4(intptr_t exinf)
264 {
265         ER              ercd;
266
267         check_point(7);
268         ercd = wup_tsk(TASK1);
269         check_ercd(ercd, E_OK);
270
271         check_point(8);
272         ercd = slp_tsk();
273         check_ercd(ercd, E_OK);
274
275         check_point(26);
276         ercd = slp_tsk();
277         check_ercd(ercd, E_OK);
278
279         check_point(0);
280 }
281
282 void
283 task5(intptr_t exinf)
284 {
285         ER              ercd;
286
287         check_point(16);
288         ercd = slp_tsk();
289         check_ercd(ercd, E_OK);
290
291         check_point(33);
292         ercd = sta_alm(ALM1, 10);
293         check_ercd(ercd, E_OK);
294
295         check_point(34);
296         ercd = slp_tsk();
297         check_ercd(ercd, E_OK);
298
299         check_point(0);
300 }
301
302 void
303 task6(intptr_t exinf)
304 {
305         ER              ercd;
306
307         check_point(17);
308         ercd = dis_dsp();
309         check_ercd(ercd, E_OK);
310
311         check_point(18);
312         ercd = wup_tsk(TASK1);
313         check_ercd(ercd, E_OK);
314
315         check_point(19);
316         ercd = wup_tsk(TASK2);
317         check_ercd(ercd, E_OK);
318
319         check_point(20);
320         ercd = sus_tsk(TASK2);
321         check_ercd(ercd, E_OK);
322
323         check_point(21);
324         ercd = wup_tsk(TASK3);
325         check_ercd(ercd, E_OK);
326
327         check_point(22);
328         ercd = wup_tsk(TASK4);
329         check_ercd(ercd, E_OK);
330
331         check_point(23);
332         ercd = sus_tsk(TASK1);
333         check_ercd(ercd, E_OK);
334
335         check_point(24);
336         ercd = ena_dsp();
337         check_ercd(ercd, E_OK);
338
339         check_point(27);
340         ercd = dis_dsp();
341         check_ercd(ercd, E_OK);
342
343         check_point(28);
344         ercd = rsm_tsk(TASK1);
345         check_ercd(ercd, E_OK);
346
347         check_point(29);
348         ercd = wup_tsk(TASK5);
349         check_ercd(ercd, E_OK);
350
351         check_point(30);
352         ercd = ena_dsp();
353         check_ercd(ercd, E_OK);
354
355         check_point(32);
356         ercd = slp_tsk();
357         check_ercd(ercd, E_OK);
358
359         check_point(0);
360 }