source: asp3_wo_tecs/trunk/extension/subprio/test/test_subprio1.c@ 302

Last change on this file since 302 was 302, checked in by ertl-honda, 7 years ago

TECSレスのASP3の開発のため以下のtrunkからコピー
http://dev.toppers.jp/svn/asp3/branches/WO_TECS-3.C.0

File size: 10.5 KB
Line 
1/*
2 * TOPPERS Software
3 * Toyohashi Open Platform for Embedded Real-Time Systems
4 *
5 * Copyright (C) 2014-2015 by Embedded and Real-Time Systems Laboratory
6 * Graduate School of Information Science, Nagoya Univ., JAPAN
7 *
8 * 上記著作権者
9は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ
10 * ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
11 * 変・再é…
12å¸ƒï¼ˆä»¥ä¸‹ï¼Œåˆ©ç”¨ã¨å‘¼ã¶ï¼‰ã™ã‚‹ã“とを無償で許諾する.
13 * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
14 * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー
15 * スコード中に含まれていること.
16 * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
17 * 用できる形で再é…
18å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œå†é…
19å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨
20 * 者
21マニュアルなど)に,上記の著作権表示,この利用条件および下記
22 * の無保証規定を掲載すること.
23 * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
24 * 用できない形で再é…
25å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œæ¬¡ã®ã„ずれかの条件を満たすこ
26 * と.
27 * (a) 再é…
28å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨è€…
29マニュアルなど)に,上記の著
30 * 作権表示,この利用条件および下記の無保証規定を掲載すること.
31 * (b) 再é…
32å¸ƒã®å½¢æ…
33‹ã‚’,別に定める方法によって,TOPPERSプロジェクトに
34 * 報告すること.
35 * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
36 * 害からも,上記著作権者
37およびTOPPERSプロジェクトをå…
38è²¬ã™ã‚‹ã“と.
39 * また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
40 * 由に基づく請求からも,上記著作権者
41およびTOPPERSプロジェクトを
42 * å…
43è²¬ã™ã‚‹ã“と.
44 *
45 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者
46お
47 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
48 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
49 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
50 * の責任を負わない.
51 *
52 * $Id: test_subprio1.c 310 2015-02-08 13:46:46Z ertl-hiro $
53 */
54
55/*
56 * サブ優å…
57ˆåº¦æ©Ÿèƒ½ã®ãƒ†ã‚¹ãƒˆ(1)
58 *
59 * 【テストの目的】
60 *
61 * サブ優å…
62ˆåº¦ã‚’用いたスケジューリングに関して網羅
63的にテストする.
64 *
65 * 【テスト項
66目】
67 *
68 * (A) サブ優å…
69ˆåº¦ã®åˆæœŸåŒ–
70 * (A-1) タスクの生成時にUINT_MAXに初期化されること[NGKI3681]
71 * (A-2) タスクの起動時には変更されないこと
72 * (B) サブ優å…
73ˆåº¦ã‚’用いた優å…
74ˆé †ä½ã®æ±ºå®š
75 * (B-1) サブ優å…
76ˆåº¦ãŒé«˜ã„タスクが高い優å…
77ˆé †ä½ã‚’持つこと[NGKI0560ï¼½
78 * (B-2) サブ優å…
79ˆåº¦ã‚‚同一のタスクの間ではFCFSになること[NGKI0561ï¼½
80 * (C) chg_sprによるサブ優å…
81ˆåº¦ã®å¤‰æ›´ï¼»NGKI3672ï¼½
82 * (C-1) 実行状æ…
83‹ã®ã‚¿ã‚¹ã‚¯ã«å¯¾ã™ã‚‹chg_spr(タスク切換えなし)
84 * (C-2) 実行状æ…
85‹ã®ã‚¿ã‚¹ã‚¯ã«å¯¾ã™ã‚‹chg_spr(タスク切換えあり)
86 * (C-3) 実行可能状æ…
87‹ã®ã‚¿ã‚¹ã‚¯ã«å¯¾ã™ã‚‹chg_spr(タスク切換えなし)
88 * (C-4) 実行可能状æ…
89‹ã®ã‚¿ã‚¹ã‚¯ã«å¯¾ã™ã‚‹chg_spr(タスク切換えあり)
90 * (C-5) 休止状æ…
91‹ã®ã‚¿ã‚¹ã‚¯ã«å¯¾ã™ã‚‹chg_spr
92 * (C-6) 同じサブ優å…
93ˆåº¦ã®ã‚¿ã‚¹ã‚¯ã®ä¸­ã§æœ€ä½Žå„ªå…
94ˆé †ä½ã«ãªã‚‹ã“と[NGKI3673ï¼½
95 * (D) サブ優å…
96ˆåº¦ã®å‚ç…
97§
98 * (D-1) ref_tskにより,サブ優å…
99ˆåº¦ã‚’参ç…
100§ã§ãã‚‹ã“と[NGKINGKI3662ï¼½
101 * (E) chg_priによる優å…
102ˆé †ä½ã®å¤‰æ›´
103 * (E-1) 優å…
104ˆåº¦ä¸Šé™ãƒŸãƒ¥ãƒ¼ãƒ†ãƒƒã‚¯ã‚¹ã‚’ロックしていない時
105 * (E-2) 優å…
106ˆåº¦ä¸Šé™ãƒŸãƒ¥ãƒ¼ãƒ†ãƒƒã‚¯ã‚¹ã‚’ロックしている時 … 実施しない
107 * ※[NGKI3682]により,サブ優å…
108ˆåº¦æ©Ÿèƒ½ã¨çµ¡ã‚€ã“とがない
109 * (F) ミューテックスによる現在優å…
110ˆåº¦ã®å¤‰æ›´
111 * (F-1) サービスコールの前後とも実行できる状æ…
112‹ã®æ™‚
113 * (F-2) サービスコールにより実行できる状æ…
114‹ã«ãªã£ãŸæ™‚ … 実施しない
115 * ※[NGKI3682]により,サブ優å…
116ˆåº¦æ©Ÿèƒ½ã¨çµ¡ã‚€ã“とがない
117 * (G) サブ優å…
118ˆåº¦ã‚’用いる/用いない優å…
119ˆåº¦ã‚’対象としたrot_rdq
120 * (G-1) rot_rdqがE_ILUSEエラーになること[NGKI3663]
121 * (G-2) サブ優å…
122ˆåº¦ã‚’用いない優å…
123ˆåº¦ã‚’対象にした時
124 * (H) サブ優å…
125ˆåº¦ã‚’用いる優å…
126ˆåº¦ãŒENA_SPRにより設定できること[NGKI3675ï¼½
127 *
128 * 【使用リソース】
129 *
130 * TASK1: 高優å…
131ˆåº¦ã‚¿ã‚¹ã‚¯ï¼Œãƒ¡ã‚¤ãƒ³ã‚¿ã‚¹ã‚¯ï¼Œæœ€åˆã‹ã‚‰èµ·å‹•
132 * TASK2: 中優å…
133ˆåº¦ã‚¿ã‚¹ã‚¯
134 * TASK3: 中優å…
135ˆåº¦ã‚¿ã‚¹ã‚¯
136 * TASK4: 中優å…
137ˆåº¦ã‚¿ã‚¹ã‚¯
138 * TASK5: 中優å…
139ˆåº¦ã‚¿ã‚¹ã‚¯
140 * 中優å…
141ˆåº¦ã‚’,サブ優å…
142ˆåº¦ã‚’使って優å…
143ˆé †ä½ã‚’決めるように設定
144 * MTX1: ミューテックス(TA_CEILING属性,上限は中優å…
145ˆåº¦ï¼‰
146 *
147 * 【テストシーケンス】
148 *
149 * == TASK1(優å…
150ˆåº¦ï¼šé«˜ï¼‰==
151 * 1: act_tsk(TASK2)
152 * ref_tsk(TASK2, &rtsk) ... (A-1)(D-1)
153 * assert(rtsk.subpri == UINT_MAX)
154 * act_tsk(TASK3)
155 * act_tsk(TASK4)
156 * act_tsk(TASK5)
157 * slp_tsk()
158 * == TASK2-1(優å…
159ˆåº¦ï¼šä¸­ï¼Œ1回め)==
160 * 2: rot_rdq(MID_PRIORITY) -> E_ILUSE ... (G-1)
161 * rot_rdq(LOW_PRIORITY) ... (G-2)
162 * chg_pri(TSK_SELF, TPRI_INI)
163 * == TASK3-1(優å…
164ˆåº¦ï¼šä¸­ï¼Œ1回め)== ... (B-2)
165 * 3: chg_pri(TSK_SELF, TPRI_INI) ... (E-1)
166 * == TASK4-1(優å…
167ˆåº¦ï¼šä¸­ï¼Œ1回め)==
168 * 4: chg_pri(TSK_SELF, TPRI_INI)
169 * == TASK5(優å…
170ˆåº¦ï¼šä¸­ï¼‰==
171 * 5: chg_pri(TSK_SELF, TPRI_INI)
172 * == TASK2-1(続き)==
173 * 6: wup_tsk(TASK1)
174 * == TASK1(続き)==
175 * 7: chg_spr(TASK2, 10)
176 * ref_tsk(TASK2, &rtsk)
177 * assert(rtsk.subpri == 10)
178 * chg_spr(TASK3, 5)
179 * chg_spr(TASK4, 5) ... (C-6)
180 * slp_tsk()
181 * == TASK3-1(続き)== ... (B-1)
182 * 8: ext_tsk()
183 * == TASK4-1(続き)==
184 * 9: chg_spr(TSK_SELF, 5) ... (C-1)
185 * 10: chg_spr(TSK_SELF, 10) ... (C-2)
186 * == TASK2-1(続き)==
187 * 11: chg_spr(TASK4, 10) ... (C-3)
188 * 12: chg_spr(TASK4, 5) ... (C-4)
189 * == TASK4-1(続き)==
190 * 13: ext_tsk()
191 * == TASK2-1(続き)==
192 * 14: ext_tsk()
193 * == TASK5(続き)==
194 * 15: wup_tsk(TASK1)
195 * == TASK1(続き)==
196 * 16: act_tsk(TASK4)
197 * chg_spr(TASK3, 10) ... (C-5)
198 * act_tsk(TASK3)
199 * ref_tsk(TASK3, &rtsk)
200 * assert(rtsk.subpri == 10)
201 * act_tsk(TASK2)
202 * ref_tsk(TASK2, &rtsk) ... (A-2)
203 * assert(rtsk.subpri == 10)
204 * slp_tsk()
205 * == TASK4-2(2回め)==
206 * 17: ext_tsk()
207 * == TASK3-2(2回め)==
208 * 18: loc_mtx(MTX1)
209 * unl_mtx(MTX1) ... (F-1)
210 * ext_tsk()
211 * == TASK2-2(2回め)==
212 * 19: ext_tsk()
213 * == TASK5(続き)==
214 * 20: wup_tsk(TASK1)
215 * == TASK1(続き)==
216 * 21: END
217 */
218
219#include <kernel.h>
220#include <t_syslog.h>
221#include "syssvc/test_svc.h"
222#include "kernel_cfg.h"
223#include "test_subprio1.h"
224
225/* DO NOT DELETE THIS LINE -- gentest depends on it. */
226
227void
228task1(intptr_t exinf)
229{
230 ER_UINT ercd;
231 T_RTSK rtsk;
232
233 test_start(__FILE__);
234
235 check_point(1);
236 ercd = act_tsk(TASK2);
237 check_ercd(ercd, E_OK);
238
239 ercd = ref_tsk(TASK2, &rtsk);
240 check_ercd(ercd, E_OK);
241
242 check_assert(rtsk.subpri == UINT_MAX);
243
244 ercd = act_tsk(TASK3);
245 check_ercd(ercd, E_OK);
246
247 ercd = act_tsk(TASK4);
248 check_ercd(ercd, E_OK);
249
250 ercd = act_tsk(TASK5);
251 check_ercd(ercd, E_OK);
252
253 ercd = slp_tsk();
254 check_ercd(ercd, E_OK);
255
256 check_point(7);
257 ercd = chg_spr(TASK2, 10);
258 check_ercd(ercd, E_OK);
259
260 ercd = ref_tsk(TASK2, &rtsk);
261 check_ercd(ercd, E_OK);
262
263 check_assert(rtsk.subpri == 10);
264
265 ercd = chg_spr(TASK3, 5);
266 check_ercd(ercd, E_OK);
267
268 ercd = chg_spr(TASK4, 5);
269 check_ercd(ercd, E_OK);
270
271 ercd = slp_tsk();
272 check_ercd(ercd, E_OK);
273
274 check_point(16);
275 ercd = act_tsk(TASK4);
276 check_ercd(ercd, E_OK);
277
278 ercd = chg_spr(TASK3, 10);
279 check_ercd(ercd, E_OK);
280
281 ercd = act_tsk(TASK3);
282 check_ercd(ercd, E_OK);
283
284 ercd = ref_tsk(TASK3, &rtsk);
285 check_ercd(ercd, E_OK);
286
287 check_assert(rtsk.subpri == 10);
288
289 ercd = act_tsk(TASK2);
290 check_ercd(ercd, E_OK);
291
292 ercd = ref_tsk(TASK2, &rtsk);
293 check_ercd(ercd, E_OK);
294
295 check_assert(rtsk.subpri == 10);
296
297 ercd = slp_tsk();
298 check_ercd(ercd, E_OK);
299
300 check_finish(21);
301 check_point(0);
302}
303
304static uint_t task2_count = 0;
305
306void
307task2(intptr_t exinf)
308{
309 ER_UINT ercd;
310
311 switch (++task2_count) {
312 case 1:
313 check_point(2);
314 ercd = rot_rdq(MID_PRIORITY);
315 check_ercd(ercd, E_ILUSE);
316
317 ercd = rot_rdq(LOW_PRIORITY);
318 check_ercd(ercd, E_OK);
319
320 ercd = chg_pri(TSK_SELF, TPRI_INI);
321 check_ercd(ercd, E_OK);
322
323 check_point(6);
324 ercd = wup_tsk(TASK1);
325 check_ercd(ercd, E_OK);
326
327 check_point(11);
328 ercd = chg_spr(TASK4, 10);
329 check_ercd(ercd, E_OK);
330
331 check_point(12);
332 ercd = chg_spr(TASK4, 5);
333 check_ercd(ercd, E_OK);
334
335 check_point(14);
336 ercd = ext_tsk();
337 check_ercd(ercd, E_OK);
338
339 check_point(0);
340
341 case 2:
342 check_point(19);
343 ercd = ext_tsk();
344 check_ercd(ercd, E_OK);
345
346 check_point(0);
347
348 default:
349 check_point(0);
350 }
351 check_point(0);
352}
353
354static uint_t task3_count = 0;
355
356void
357task3(intptr_t exinf)
358{
359 ER_UINT ercd;
360
361 switch (++task3_count) {
362 case 1:
363 check_point(3);
364 ercd = chg_pri(TSK_SELF, TPRI_INI);
365 check_ercd(ercd, E_OK);
366
367 check_point(8);
368 ercd = ext_tsk();
369 check_ercd(ercd, E_OK);
370
371 check_point(0);
372
373 case 2:
374 check_point(18);
375 ercd = loc_mtx(MTX1);
376 check_ercd(ercd, E_OK);
377
378 ercd = unl_mtx(MTX1);
379 check_ercd(ercd, E_OK);
380
381 ercd = ext_tsk();
382 check_ercd(ercd, E_OK);
383
384 check_point(0);
385
386 default:
387 check_point(0);
388 }
389 check_point(0);
390}
391
392static uint_t task4_count = 0;
393
394void
395task4(intptr_t exinf)
396{
397 ER_UINT ercd;
398
399 switch (++task4_count) {
400 case 1:
401 check_point(4);
402 ercd = chg_pri(TSK_SELF, TPRI_INI);
403 check_ercd(ercd, E_OK);
404
405 check_point(9);
406 ercd = chg_spr(TSK_SELF, 5);
407 check_ercd(ercd, E_OK);
408
409 check_point(10);
410 ercd = chg_spr(TSK_SELF, 10);
411 check_ercd(ercd, E_OK);
412
413 check_point(13);
414 ercd = ext_tsk();
415 check_ercd(ercd, E_OK);
416
417 check_point(0);
418
419 case 2:
420 check_point(17);
421 ercd = ext_tsk();
422 check_ercd(ercd, E_OK);
423
424 check_point(0);
425
426 default:
427 check_point(0);
428 }
429 check_point(0);
430}
431
432void
433task5(intptr_t exinf)
434{
435 ER_UINT ercd;
436
437 check_point(5);
438 ercd = chg_pri(TSK_SELF, TPRI_INI);
439 check_ercd(ercd, E_OK);
440
441 check_point(15);
442 ercd = wup_tsk(TASK1);
443 check_ercd(ercd, E_OK);
444
445 check_point(20);
446 ercd = wup_tsk(TASK1);
447 check_ercd(ercd, E_OK);
448
449 check_point(0);
450}
Note: See TracBrowser for help on using the repository browser.