source: azure_iot_hub_f767zi/trunk/asp_baseplatform/test/test_task1.c@ 457

Last change on this file since 457 was 457, checked in by coas-nagasima, 4 years ago

ファイルを追加

  • Property svn:eol-style set to native
  • Property svn:mime-type set to text/x-csrc;charset=UTF-8
File size: 10.0 KB
Line 
1/*
2 * TOPPERS Software
3 * Toyohashi Open Platform for Embedded Real-Time Systems
4 *
5 * Copyright (C) 2007-2013 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$
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/* DO NOT DELETE THIS LINE -- gentest depends on it. */
156
157void
158alarm1_handler(intptr_t exinf)
159{
160 ID tskid;
161 ER_UINT ercd;
162
163 check_point(35);
164 ercd = iget_tid(&tskid);
165 check_ercd(ercd, E_OK);
166
167 check_assert(tskid == TSK_NONE);
168
169 check_point(36);
170 ercd = iwup_tsk(TASK1);
171 check_ercd(ercd, E_OK);
172
173 check_point(37);
174 return;
175
176 check_point(0);
177}
178
179void
180task1(intptr_t exinf)
181{
182 ER_UINT ercd;
183
184 test_start(__FILE__);
185
186 check_point(1);
187 ercd = act_tsk(TASK2);
188 check_ercd(ercd, E_OK);
189
190 check_point(3);
191 ercd = act_tsk(TASK3);
192 check_ercd(ercd, E_OK);
193
194 check_point(4);
195 ercd = act_tsk(TASK4);
196 check_ercd(ercd, E_OK);
197
198 check_point(5);
199 ercd = slp_tsk();
200 check_ercd(ercd, E_OK);
201
202 check_point(9);
203 ercd = act_tsk(TASK5);
204 check_ercd(ercd, E_OK);
205
206 check_point(10);
207 ercd = act_tsk(TASK6);
208 check_ercd(ercd, E_OK);
209
210 check_point(11);
211 ercd = sus_tsk(TASK6);
212 check_ercd(ercd, E_OK);
213
214 check_point(12);
215 ercd = sus_tsk(TASK5);
216 check_ercd(ercd, E_OK);
217
218 check_point(13);
219 ercd = rsm_tsk(TASK5);
220 check_ercd(ercd, E_OK);
221
222 check_point(14);
223 ercd = rsm_tsk(TASK6);
224 check_ercd(ercd, E_OK);
225
226 check_point(15);
227 ercd = slp_tsk();
228 check_ercd(ercd, E_OK);
229
230 check_point(31);
231 ercd = slp_tsk();
232 check_ercd(ercd, E_OK);
233
234 check_finish(38);
235 check_point(0);
236}
237
238void
239task2(intptr_t exinf)
240{
241 ER_UINT ercd;
242
243 check_point(2);
244 ercd = slp_tsk();
245 check_ercd(ercd, E_OK);
246
247 check_point(0);
248}
249
250void
251task3(intptr_t exinf)
252{
253 ER_UINT ercd;
254
255 check_point(6);
256 ercd = slp_tsk();
257 check_ercd(ercd, E_OK);
258
259 check_point(25);
260 ercd = slp_tsk();
261 check_ercd(ercd, E_OK);
262
263 check_point(0);
264}
265
266void
267task4(intptr_t exinf)
268{
269 ER_UINT ercd;
270
271 check_point(7);
272 ercd = wup_tsk(TASK1);
273 check_ercd(ercd, E_OK);
274
275 check_point(8);
276 ercd = slp_tsk();
277 check_ercd(ercd, E_OK);
278
279 check_point(26);
280 ercd = slp_tsk();
281 check_ercd(ercd, E_OK);
282
283 check_point(0);
284}
285
286void
287task5(intptr_t exinf)
288{
289 ER_UINT ercd;
290
291 check_point(16);
292 ercd = slp_tsk();
293 check_ercd(ercd, E_OK);
294
295 check_point(33);
296 ercd = sta_alm(ALM1, 10);
297 check_ercd(ercd, E_OK);
298
299 check_point(34);
300 ercd = slp_tsk();
301 check_ercd(ercd, E_OK);
302
303 check_point(0);
304}
305
306void
307task6(intptr_t exinf)
308{
309 ER_UINT ercd;
310
311 check_point(17);
312 ercd = dis_dsp();
313 check_ercd(ercd, E_OK);
314
315 check_point(18);
316 ercd = wup_tsk(TASK1);
317 check_ercd(ercd, E_OK);
318
319 check_point(19);
320 ercd = wup_tsk(TASK2);
321 check_ercd(ercd, E_OK);
322
323 check_point(20);
324 ercd = sus_tsk(TASK2);
325 check_ercd(ercd, E_OK);
326
327 check_point(21);
328 ercd = wup_tsk(TASK3);
329 check_ercd(ercd, E_OK);
330
331 check_point(22);
332 ercd = wup_tsk(TASK4);
333 check_ercd(ercd, E_OK);
334
335 check_point(23);
336 ercd = sus_tsk(TASK1);
337 check_ercd(ercd, E_OK);
338
339 check_point(24);
340 ercd = ena_dsp();
341 check_ercd(ercd, E_OK);
342
343 check_point(27);
344 ercd = dis_dsp();
345 check_ercd(ercd, E_OK);
346
347 check_point(28);
348 ercd = rsm_tsk(TASK1);
349 check_ercd(ercd, E_OK);
350
351 check_point(29);
352 ercd = wup_tsk(TASK5);
353 check_ercd(ercd, E_OK);
354
355 check_point(30);
356 ercd = ena_dsp();
357 check_ercd(ercd, E_OK);
358
359 check_point(32);
360 ercd = slp_tsk();
361 check_ercd(ercd, E_OK);
362
363 check_point(0);
364}
Note: See TracBrowser for help on using the repository browser.