3 * Toyohashi Open Platform for Embedded Real-Time Systems
5 * Copyright (C) 2007-2009 by Embedded and Real-Time Systems Laboratory
6 * Graduate School of Information Science, Nagoya Univ., JAPAN
8 * 上記著作権者は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ
9 * ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
10 * 変・再配布(以下,利用と呼ぶ)することを無償で許諾する.
11 * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
12 * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー
14 * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
15 * 用できる形で再配布する場合には,再配布に伴うドキュメント(利用
16 * 者マニュアルなど)に,上記の著作権表示,この利用条件および下記
18 * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
19 * 用できない形で再配布する場合には,次のいずれかの条件を満たすこ
21 * (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
22 * 作権表示,この利用条件および下記の無保証規定を掲載すること.
23 * (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
25 * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
26 * 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
27 * また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
28 * 由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを
31 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お
32 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
33 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
34 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
37 * @(#) $Id: test_task1.c 1577 2009-05-31 14:30:51Z ertl-hiro $
45 * make_runnableとmake_non_runnableを網羅的にテストする.
49 * (A) 実行状態のタスクよりも高い優先度のタスクを実行できる状態にする
50 * (A-1) ディスパッチ保留状態ではない場合
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) ディスパッチ保留状態で,実行状態になるべきだが実行可能状態となっ
73 * (J-1) 同一優先度のタスクがなくなる場合
74 * (J-2) 同一優先度のタスクがなくならない場合
75 * (K) ディスパッチ保留状態で,実行可能状態になるべきだが実行状態のタ
77 * !ディスパッチ保留では,実行状態のタスクが実行できる状態でなく
78 * なるような遷移を起こすことができないため,この状況は起こらない.
82 * TASK1: 中優先度タスク,メインタスク,最初から起動
93 * 1: act_tsk(TASK2) ... (A-1)
95 * 2: slp_tsk() ... (H-2)
97 * 3: act_tsk(TASK3) ... (B)
98 * 4: act_tsk(TASK4) ... (B)
99 * 5: slp_tsk() ... (H-3)
101 * 6: slp_tsk() ... (H-3)
104 * 8: slp_tsk() ... (H-3)
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)
114 * 16: slp_tsk() ... (H-3)
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)
125 * 25: slp_tsk() ... (H-3)
127 * 26: slp_tsk() ... (H-2)
130 * 28: rsm_tsk(TASK1) ... (A-2)
131 * 29: wup_tsk(TASK5) ... (G)
134 * 31: slp_tsk() ... (H-2)
136 * 32: slp_tsk() ... (H-3)
138 * 33: sta_alm(ALM1, 10)
139 * 34: slp_tsk() ... (H-1)
141 * 35: iget_tid(&tskid)
142 * assert(tskid == TSK_NONE)
143 * 36: iwup_tsk(TASK1) ... (D)
150 #include <test_lib.h>
151 #include <t_syslog.h>
152 #include "kernel_cfg.h"
153 #include "test_task1.h"
156 alarm1_handler(intptr_t exinf)
162 ercd = iget_tid(&tskid);
163 check_ercd(ercd, E_OK);
164 check_assert(tskid == TSK_NONE);
167 ercd = iwup_tsk(TASK1);
168 check_ercd(ercd, E_OK);
177 task1(intptr_t exinf)
182 ercd = act_tsk(TASK2);
183 check_ercd(ercd, E_OK);
186 ercd = act_tsk(TASK3);
187 check_ercd(ercd, E_OK);
190 ercd = act_tsk(TASK4);
191 check_ercd(ercd, E_OK);
195 check_ercd(ercd, E_OK);
198 ercd = act_tsk(TASK5);
199 check_ercd(ercd, E_OK);
202 ercd = act_tsk(TASK6);
203 check_ercd(ercd, E_OK);
206 ercd = sus_tsk(TASK6);
207 check_ercd(ercd, E_OK);
210 ercd = sus_tsk(TASK5);
211 check_ercd(ercd, E_OK);
214 ercd = rsm_tsk(TASK5);
215 check_ercd(ercd, E_OK);
218 ercd = rsm_tsk(TASK6);
219 check_ercd(ercd, E_OK);
223 check_ercd(ercd, E_OK);
227 check_ercd(ercd, E_OK);
235 task2(intptr_t exinf)
241 check_ercd(ercd, E_OK);
247 task3(intptr_t exinf)
253 check_ercd(ercd, E_OK);
257 check_ercd(ercd, E_OK);
263 task4(intptr_t exinf)
268 ercd = wup_tsk(TASK1);
269 check_ercd(ercd, E_OK);
273 check_ercd(ercd, E_OK);
277 check_ercd(ercd, E_OK);
283 task5(intptr_t exinf)
289 check_ercd(ercd, E_OK);
292 ercd = sta_alm(ALM1, 10);
293 check_ercd(ercd, E_OK);
297 check_ercd(ercd, E_OK);
303 task6(intptr_t exinf)
309 check_ercd(ercd, E_OK);
312 ercd = wup_tsk(TASK1);
313 check_ercd(ercd, E_OK);
316 ercd = wup_tsk(TASK2);
317 check_ercd(ercd, E_OK);
320 ercd = sus_tsk(TASK2);
321 check_ercd(ercd, E_OK);
324 ercd = wup_tsk(TASK3);
325 check_ercd(ercd, E_OK);
328 ercd = wup_tsk(TASK4);
329 check_ercd(ercd, E_OK);
332 ercd = sus_tsk(TASK1);
333 check_ercd(ercd, E_OK);
337 check_ercd(ercd, E_OK);
341 check_ercd(ercd, E_OK);
344 ercd = rsm_tsk(TASK1);
345 check_ercd(ercd, E_OK);
348 ercd = wup_tsk(TASK5);
349 check_ercd(ercd, E_OK);
353 check_ercd(ercd, E_OK);
357 check_ercd(ercd, E_OK);