source: asp3_wo_tecs/trunk/test/test_mutex4.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: 23.3 KB
Line 
1/*
2 * TOPPERS Software
3 * Toyohashi Open Platform for Embedded Real-Time Systems
4 *
5 * Copyright (C) 2007-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_mutex4.c 310 2015-02-08 13:46:46Z ertl-hiro $
53 */
54
55/*
56 * ミューテックスのテスト(4)
57 *
58 * 【テストの目的】
59 *
60 * 優å…
61ˆåº¦ä¸Šé™ãƒŸãƒ¥ãƒ¼ãƒ†ãƒƒã‚¯ã‚¹ã«å¯¾ã—て,loc_mtxとunl_mtxに伴う優å…
62ˆåº¦ã®å¤‰
63 * 更処理を網羅
64的にテストする.ただし,change_priorityと
65 * mutex_calc_priorityの内
66容には踏み込まない.
67 *
68 * 【テスト項
69目】
70 *
71 * (A) ミューテックスのロック処理(loc_mtx)に伴う優å…
72ˆåº¦å¤‰æ›´
73 * (A-1) ロックしたミューテックスの優å…
74ˆåº¦ä¸Šé™ãŒè‡ªã‚¿ã‚¹ã‚¯ã®ç¾åœ¨å„ªå…
75ˆ
76 * 度よりも高い場合に,自タスクの優å…
77ˆåº¦ãŒãã®å„ªå…
78ˆåº¦ä¸Šé™ã¾ã§
79 * 上がること.また,同じ優å…
80ˆåº¦å†…
81での優å…
82ˆé †ä½ãŒæœ€é«˜ã«ãªã‚‹ã“
83 * と
84 * (A-2) ロックしたミューテックスの優å…
85ˆåº¦ä¸Šé™ãŒè‡ªã‚¿ã‚¹ã‚¯ã®ç¾åœ¨å„ªå…
86ˆ
87 * 度と同じ場合に,自タスクの優å…
88ˆåº¦ãŒå¤‰ã‚ã‚‰ãªã„こと.また,
89 * 同じ優å…
90ˆåº¦å†…
91での優å…
92ˆé †ä½ãŒå¤‰ã‚ã‚‰ãªã„こと
93 * (A-3) ロックしたミューテックスの優å…
94ˆåº¦ä¸Šé™ãŒè‡ªã‚¿ã‚¹ã‚¯ã®ç¾åœ¨å„ªå…
95ˆ
96 * 度よりも低い場合に,自タスクの優å…
97ˆåº¦ãŒå¤‰ã‚ã‚‰ãªã„こと.ま
98 * た,同じ優å…
99ˆåº¦å†…
100での優å…
101ˆé †ä½ãŒå¤‰ã‚ã‚‰ãªã„こと
102 * (B) ミューテックスのロック解除処理(unl_mtx)に伴うロック解除した
103 * タスクの優å…
104ˆåº¦å¤‰æ›´
105 * (B-1) ロック解除したミューテックスの上限優å…
106ˆåº¦ãŒè‡ªã‚¿ã‚¹ã‚¯ã®ç¾åœ¨
107 * 優å…
108ˆåº¦ã¨åŒã˜ã§ï¼ŒãƒŸãƒ¥ãƒ¼ãƒ†ãƒƒã‚¯ã‚¹ã®ãƒ­ãƒƒã‚¯è§£é™¤ã§å„ªå…
109ˆåº¦ãŒä¸‹ãŒ
110 * るべき場合に,自タスクの優å…
111ˆåº¦ãŒé©åˆ‡ã«ä¸‹ã’られること.ま
112 * た,同じ優å…
113ˆåº¦å†…
114での優å…
115ˆé †ä½ãŒæœ€é«˜ã«ãªã‚‹ã“と
116 * (B-2) ロック解除したミューテックスの上限優å…
117ˆåº¦ãŒè‡ªã‚¿ã‚¹ã‚¯ã®ç¾åœ¨
118 * 優å…
119ˆåº¦ã¨åŒã˜ã§ï¼ŒãƒŸãƒ¥ãƒ¼ãƒ†ãƒƒã‚¯ã‚¹ã®ãƒ­ãƒƒã‚¯è§£é™¤ã§å„ªå…
120ˆåº¦ãŒå¤‰ã‚
121 * るべきでない場合に,自タスクの優å…
122ˆåº¦ãŒå¤‰ã‚ã‚‰ãªã„こと.ま
123 * た,同じ優å…
124ˆåº¦å†…
125での優å…
126ˆé †ä½ãŒå¤‰ã‚ã‚‰ãªã„こと
127 * (B-3) ロック解除したミューテックスの上限優å…
128ˆåº¦ãŒè‡ªã‚¿ã‚¹ã‚¯ã®ç¾åœ¨
129 * 優å…
130ˆåº¦ã‚ˆã‚Šã‚‚低い場合に,自タスクの優å…
131ˆåº¦ãŒå¤‰ã‚ã‚‰ãªã„こと.
132 * また,同じ優å…
133ˆåº¦å†…
134での優å…
135ˆé †ä½ãŒå¤‰ã‚ã‚‰ãªã„こと
136 * (C) ミューテックスのロック解除処理(unl_mtx)に伴いミューテックスを
137 * ロックしたタスクの優å…
138ˆåº¦å¤‰æ›´
139 * (C-1) ミューテックスの優å…
140ˆåº¦ä¸Šé™ãŒæ–°ãŸã«ãƒŸãƒ¥ãƒ¼ãƒ†ãƒƒã‚¯ã‚¹ã‚’ロック
141 * したタスクの現在優å…
142ˆåº¦ã‚ˆã‚Šã‚‚高い場合に,当該タスクの優å…
143ˆ
144 * 度がその優å…
145ˆåº¦ä¸Šé™ã¾ã§ä¸ŠãŒã‚‹ã“と.また,同じ優å…
146ˆåº¦å†…
147での
148 * 優å…
149ˆé †ä½ãŒæœ€ä½Žã«ãªã‚‹ã“と
150 * (C-2) ミューテックスの優å…
151ˆåº¦ä¸Šé™ãŒæ–°ãŸã«ãƒŸãƒ¥ãƒ¼ãƒ†ãƒƒã‚¯ã‚¹ã‚’ロック
152 * したタスクの現在優å…
153ˆåº¦ã¨åŒã˜å ´åˆã«ï¼Œå½“該タスクの優å…
154ˆåº¦ãŒ
155 * 変わらないこと.また,同じ優å…
156ˆåº¦å†…
157での優å…
158ˆé †ä½ãŒæœ€ä½Žã«ãª
159 * ること
160 * (C-3) ミューテックスの優å…
161ˆåº¦ä¸Šé™ãŒæ–°ãŸã«ãƒŸãƒ¥ãƒ¼ãƒ†ãƒƒã‚¯ã‚¹ã‚’ロック
162 * したタスクの現在優å…
163ˆåº¦ã‚ˆã‚Šã‚‚低い場合に,当該タスクの優å…
164ˆ
165 * 度が変わらないこと.また,同じ優å…
166ˆåº¦å†…
167での優å…
168ˆé †ä½ãŒæœ€ä½Ž
169 * になること
170 * (D) ミューテックスのロック処理(loc_mtx)のE_ILUSEエラー
171 * (D-1) 自タスクのベース優å…
172ˆåº¦ãŒï¼Œãƒ­ãƒƒã‚¯ã—ようとしたミューテック
173 * スの上限優å…
174ˆåº¦ã‚ˆã‚Šã‚‚高い時,E_ILUSEエラーになること
175 * (D-2) 自タスクのベース優å…
176ˆåº¦ãŒï¼Œãƒ­ãƒƒã‚¯ã—ようとしたミューテック
177 * スの上限優å…
178ˆåº¦ã¨åŒã˜ã‹ãã‚Œã‚ˆã‚Šä½Žã‘れば,自タスクの現在優
179 * å…
180ˆåº¦ãŒãã‚Œã‚ˆã‚Šé«˜ãã¦ã‚‚,E_ILUSEエラーにならないこと
181 *
182 * 【テスト項
183目の実現方法】
184 *
185 * (A-1)
186 * 中優å…
187ˆåº¦ã‚¿ã‚¹ã‚¯ï¼ˆTASK1)に,高優å…
188ˆåº¦ä¸Šé™ãƒŸãƒ¥ãƒ¼ãƒ†ãƒƒã‚¯ã‚¹ï¼ˆMTX2)を
189 * ロックさせ,高優å…
190ˆåº¦ã«ãªã‚‹ã“とを確認する.また,実行可能状æ…
191‹ã®
192 * 高優å…
193ˆåº¦ã‚¿ã‚¹ã‚¯ï¼ˆTASK4)よりも,優å…
194ˆé †ä½ãŒé«˜ããªã‚‹ã“とを確認する.
195 * ディスパッチ禁止状æ…
196‹ã§å®Ÿæ–½ã™ã‚‹ï¼Ž
197 * (A-2)
198 * 中優å…
199ˆåº¦ã‚¿ã‚¹ã‚¯ï¼ˆTASK1)に,中優å…
200ˆåº¦ä¸Šé™ãƒŸãƒ¥ãƒ¼ãƒ†ãƒƒã‚¯ã‚¹ï¼ˆMTX1)を
201 * ロックさせ,優å…
202ˆåº¦ãŒå¤‰ã‚ã‚‰ãªã„ことを確認する.また,実行可能状
203 * æ…
204‹ã®ä¸­å„ªå…
205ˆåº¦ã‚¿ã‚¹ã‚¯ã‚’2つ(TASK2,TASK3)を用意しておき,優å…
206ˆé †ä½
207 * が変わらないことを確認する.ディスパッチ禁止状æ…
208‹ã§å®Ÿæ–½ã™ã‚‹ï¼Ž
209 * (A-3)
210 * 中優å…
211ˆåº¦ã‚¿ã‚¹ã‚¯ï¼ˆTASK1)が高優å…
212ˆåº¦ä¸Šé™ãƒŸãƒ¥ãƒ¼ãƒ†ãƒƒã‚¯ã‚¹ï¼ˆMTX2)をロッ
213 * クして高優å…
214ˆåº¦ã«ãªã£ã¦ã„る状æ…
215‹ã§ï¼Œä¸­å„ªå…
216ˆåº¦ä¸Šé™ãƒŸãƒ¥ãƒ¼ãƒ†ãƒƒã‚¯ã‚¹
217 * (MTX1)をロックさせ,優å…
218ˆåº¦ãŒå¤‰ã‚ã‚‰ãªã„ことを確認する.また,
219 * 実行可能状æ…
220‹ã®é«˜å„ªå…
221ˆåº¦ã‚¿ã‚¹ã‚¯ã‚’2つ(TASK4,TASK5)を用意しておき,
222 * 優å…
223ˆé †ä½ãŒå¤‰ã‚ã‚‰ãªã„ことを確認する.ディスパッチ禁止状æ…
224‹ã§å®Ÿæ–½
225 * する.
226 * (B-1)
227 * 中優å…
228ˆåº¦ã‚¿ã‚¹ã‚¯ï¼ˆTASK1)に高優å…
229ˆåº¦ä¸Šé™ãƒŸãƒ¥ãƒ¼ãƒ†ãƒƒã‚¯ã‚¹ï¼ˆMTX2)のみ
230 * をロックさせている状æ…
231‹ã§ï¼Œãã‚Œã‚’ロック解除させ,中優å…
232ˆåº¦ã«ãªã‚‹
233 * ことを確認する.また,実行可能状æ…
234‹ã®ä¸­å„ªå…
235ˆåº¦ã‚¿ã‚¹ã‚¯ï¼ˆTASK2)より
236 * も,優å…
237ˆé †ä½ãŒé«˜ããªã‚‹ã“とを確認する.
238 * (B-2)
239 * 中優å…
240ˆåº¦ã‚¿ã‚¹ã‚¯ï¼ˆTASK1)に中優å…
241ˆåº¦ä¸Šé™ãƒŸãƒ¥ãƒ¼ãƒ†ãƒƒã‚¯ã‚¹ï¼ˆMTX1)のみ
242 * をロックさせている状æ…
243‹ã§ï¼Œãã‚Œã‚’ロック解除させ,優å…
244ˆåº¦ãŒå¤‰ã‚ã‚‰
245 * ないことを確認する.また,実行可能状æ…
246‹ã®ä¸­å„ªå…
247ˆåº¦ã‚¿ã‚¹ã‚¯ã‚’2つ
248 * (TASK2,TASK3)を用意しておき,優å…
249ˆé †ä½ãŒå¤‰ã‚ã‚‰ãªã„ことを確認
250 * する.ディスパッチ禁止状æ…
251‹ã§å®Ÿæ–½ã™ã‚‹ï¼Ž
252 * (B-3)
253 * 中優å…
254ˆåº¦ã‚¿ã‚¹ã‚¯ï¼ˆTASK1)に高優å…
255ˆåº¦ä¸Šé™ãƒŸãƒ¥ãƒ¼ãƒ†ãƒƒã‚¯ã‚¹ï¼ˆMTX2)と中
256 * 優å…
257ˆåº¦ä¸Šé™ãƒŸãƒ¥ãƒ¼ãƒ†ãƒƒã‚¯ã‚¹ï¼ˆMTX1)をロックさせている状æ…
258‹ã§ï¼Œä¸­å„ª
259 * å…
260ˆåº¦ä¸Šé™ãƒŸãƒ¥ãƒ¼ãƒ†ãƒƒã‚¯ã‚¹ï¼ˆMTX1)をロック解除させ,優å…
261ˆåº¦ãŒå¤‰ã‚ã‚‰
262 * ないことを確認する.また,実行可能状æ…
263‹ã®é«˜å„ªå…
264ˆåº¦ã‚¿ã‚¹ã‚¯ã‚’2つ
265 * (TASK4,TASK5)を用意しておき,優å…
266ˆé †ä½ãŒå¤‰ã‚ã‚‰ãªã„ことを確認
267 * する.ディスパッチ禁止状æ…
268‹ã§å®Ÿæ–½ã™ã‚‹ï¼Ž
269 * (C-1)
270 * 中優å…
271ˆåº¦ã‚¿ã‚¹ã‚¯ï¼ˆTASK1)に高優å…
272ˆåº¦ä¸Šé™ãƒŸãƒ¥ãƒ¼ãƒ†ãƒƒã‚¯ã‚¹ï¼ˆMTX2)をロッ
273 * クさせ,別の中優å…
274ˆåº¦ã‚¿ã‚¹ã‚¯ï¼ˆTASK2)がMTX2を待
275っている状æ…
276‹ã§ï¼Œ
277 * TASK1を一時的に高優å…
278ˆåº¦ã«ã—,さらにTASK1にMTX2をロック解除させ,
279 * TASK2の優å…
280ˆåº¦ãŒé«˜å„ªå…
281ˆåº¦ã«ãªã‚‹ã“とを確認する.また,TASK2の優å…
282ˆ
283 * 順位が,TASK1よりも低くなることを確認する.
284 * (C-2)
285 * 中優å…
286ˆåº¦ã‚¿ã‚¹ã‚¯ï¼ˆTASK2)に中優å…
287ˆåº¦ä¸Šé™ãƒŸãƒ¥ãƒ¼ãƒ†ãƒƒã‚¯ã‚¹ï¼ˆMTX1)をロッ
288 * クさせ,別の中優å…
289ˆåº¦ã‚¿ã‚¹ã‚¯ï¼ˆTASK1)がMTX1を待
290っている状æ…
291‹ã§ï¼Œ
292 * TASK2にMTX1をロック解除させ,TASK1の優å…
293ˆåº¦ãŒä¸­å„ªå…
294ˆåº¦ã®ã¾ã¾å¤‰åŒ–
295 * しないことを確認する.また,実行可能状æ…
296‹ã®ä¸­å„ªå…
297ˆåº¦ã‚¿ã‚¹ã‚¯ã‚’もう
298 * 1つ(TASK3)用意しておき,TASK1の優å…
299ˆé †ä½ãŒTASK3よりも低くなる
300 * ことを確認する.
301 * (C-3)
302 * 中優å…
303ˆåº¦ã‚¿ã‚¹ã‚¯ï¼ˆTASK1)に高優å…
304ˆåº¦ä¸Šé™ãƒŸãƒ¥ãƒ¼ãƒ†ãƒƒã‚¯ã‚¹ï¼ˆMTX3)と中
305 * 優å…
306ˆåº¦ä¸Šé™ãƒŸãƒ¥ãƒ¼ãƒ†ãƒƒã‚¯ã‚¹ï¼ˆMTX1)をロックさせ,別の中優å…
307ˆåº¦ã‚¿ã‚¹
308 * ク(TASK2)が別の高優å…
309ˆåº¦ä¸Šé™ãƒŸãƒ¥ãƒ¼ãƒ†ãƒƒã‚¯ã‚¹ï¼ˆMTX2)をロックして
310 * MTX1を待
311っている状æ…
312‹ã§ï¼ŒTASK1にMTX1をロック解除させ,TASK2の優
313 * å…
314ˆåº¦ãŒé«˜å„ªå…
315ˆåº¦ã®ã¾ã¾å¤‰åŒ–しないことを確認する.また,TASK2の優å…
316ˆ
317 * 順位が,TASK1よりも低くなることを確認する.
318 * (D-1)
319 * 高優å…
320ˆåº¦ã‚¿ã‚¹ã‚¯ï¼ˆTASK4)に,中優å…
321ˆåº¦ä¸Šé™ãƒŸãƒ¥ãƒ¼ãƒ†ãƒƒã‚¯ã‚¹ï¼ˆMTX1)を
322 * ロックさせ,E_ILUSEエラーになることを確認する.
323 * (D-2)
324 * 中優å…
325ˆåº¦ã‚¿ã‚¹ã‚¯ï¼ˆTASK1)が高優å…
326ˆåº¦ä¸Šé™ãƒŸãƒ¥ãƒ¼ãƒ†ãƒƒã‚¯ã‚¹ï¼ˆMTX2)をロッ
327 * クして高優å…
328ˆåº¦ã«ãªã£ã¦ã„る状æ…
329‹ã§ï¼Œä¸­å„ªå…
330ˆåº¦ä¸Šé™ãƒŸãƒ¥ãƒ¼ãƒ†ãƒƒã‚¯ã‚¹
331 * (MTX1)をロックさせ,E_ILUSEエラーになるないことを確認する.
332 *
333 * 【使用リソース】
334 *
335 * TASK1: 中優å…
336ˆåº¦ã‚¿ã‚¹ã‚¯ï¼Œãƒ¡ã‚¤ãƒ³ã‚¿ã‚¹ã‚¯ï¼Œæœ€åˆã‹ã‚‰èµ·å‹•
337 * TASK2: 中優å…
338ˆåº¦ã‚¿ã‚¹ã‚¯
339 * TASK3: 中優å…
340ˆåº¦ã‚¿ã‚¹ã‚¯
341 * TASK4: 高優å…
342ˆåº¦ã‚¿ã‚¹ã‚¯
343 * TASK5: 高優å…
344ˆåº¦ã‚¿ã‚¹ã‚¯
345 * MTX1: ミューテックス(TA_CEILING属性,上限は中優å…
346ˆåº¦ï¼‰
347 * MTX2: ミューテックス(TA_CEILING属性,上限は高優å…
348ˆåº¦ï¼‰
349 * MTX3: ミューテックス(TA_CEILING属性,上限は高優å…
350ˆåº¦ï¼‰
351 *
352 * 【テストシーケンス】
353 *
354 * == TASK1(優å…
355ˆåº¦ï¼šä¸­ï¼‰==
356 * call(set_bit_func(bit_mutex))
357 * 1: dis_dsp()
358 * 2: act_tsk(TASK2)
359 * act_tsk(TASK4)
360 * // 高:TASK4,中:TASK1→TASK2
361 * 3: ploc_mtx(MTX2) ... (A-1)
362 * // 高:TASK1→TASK4,中:TASK2,MTX2:TASK1
363 * get_pri(TSK_SELF, &tskpri)
364 * assert(tskpri == HIGH_PRIORITY)
365 * 4: ena_dsp()
366 * 5: unl_mtx(MTX2) ... (B-1)
367 * // 高:TASK4,中:TASK1→TASK2
368 * == TASK4(優å…
369ˆåº¦ï¼šé«˜ï¼‰==
370 * 6: loc_mtx(MTX1) -> E_ILUSE ... (D-1)
371 * 7: slp_tsk()
372 * // 中:TASK1→TASK2
373 * == TASK1(続き)==
374 * 8: get_pri(TSK_SELF, &tskpri)
375 * assert(tskpri == MID_PRIORITY)
376 *
377 * 9: dis_dsp()
378 * 10: rot_rdq(MID_PRIORITY)
379 * // 中:TASK2→TASK1
380 * 11: act_tsk(TASK3)
381 * // 中:TASK2→TASK1→TASK3
382 * 12: ploc_mtx(MTX1) ... (A-2)
383 * // 中:TASK2→TASK1→TASK3,MTX1:TASK1
384 * get_pri(TSK_SELF, &tskpri)
385 * assert(tskpri == MID_PRIORITY)
386 * 13: ena_dsp()
387 * == TASK2(優å…
388ˆåº¦ï¼šä¸­ï¼‰==
389 * 14: slp_tsk()
390 * // 中:TASK1→TASK3,MTX1:TASK1
391 * == TASK1(続き)==
392 * 15: slp_tsk()
393 * // 中:TASK3,MTX1:TASK1
394 * == TASK3(優å…
395ˆåº¦ï¼šä¸­ï¼‰==
396 * 16: wup_tsk(TASK1)
397 * // 中:TASK3→TASK1,MTX1:TASK1
398 * 17: slp_tsk()
399 * // 中:TASK1,MTX1:TASK1
400 *
401 * == TASK1(続き)==
402 * 18: wup_tsk(TASK2)
403 * // 中:TASK1→TASK2,MTX1:TASK1
404 * 19: dis_dsp()
405 * 20: rot_rdq(MID_PRIORITY)
406 * // 中:TASK2→TASK1,MTX1:TASK1
407 * 21: wup_tsk(TASK3)
408 * // 中:TASK2→TASK1→TASK3,MTX1:TASK1
409 * 22: unl_mtx(MTX1) ... (B-2)
410 * // 中:TASK2→TASK1→TASK3
411 * get_pri(TSK_SELF, &tskpri)
412 * assert(tskpri == MID_PRIORITY)
413 * 23: ena_dsp()
414 * == TASK2(優å…
415ˆåº¦ï¼šä¸­ï¼‰==
416 * 24: slp_tsk()
417 * // 中:TASK1→TASK3
418 * == TASK1(続き)==
419 * 25: slp_tsk()
420 * // 中:TASK3
421 * == TASK3(優å…
422ˆåº¦ï¼šä¸­ï¼‰==
423 * 26: wup_tsk(TASK1)
424 * // 中:TASK3→TASK1
425 * 27: slp_tsk()
426 * // 中:TASK1
427 *
428 * == TASK1(続き)==
429 * 28: dis_dsp()
430 * 29: wup_tsk(TASK4)
431 * // 高:TASK4,中:TASK1
432 * 30: ploc_mtx(MTX2)
433 * // 高:TASK1→TASK4,MTX2:TASK1
434 * 31: rot_rdq(HIGH_PRIORITY)
435 * // 高:TASK4→TASK1,MTX2:TASK1
436 * 32: act_tsk(TASK5)
437 * // 高:TASK4→TASK1→TASK5,MTX2:TASK1
438 * 33: ploc_mtx(MTX1) ... (A-3)(D-2)
439 * // 高:TASK4→TASK1→TASK5,MTX2:TASK1,MTX1:TASK1
440 * get_pri(TSK_SELF, &tskpri)
441 * assert(tskpri == HIGH_PRIORITY)
442 * 34: ena_dsp()
443 * == TASK4(続き)==
444 * 35: slp_tsk()
445 * // 高:TASK1→TASK5,MTX2:TASK1,MTX1:TASK1
446 * == TASK1(続き)==
447 * 36: slp_tsk()
448 * // 高:TASK5,MTX2:TASK1,MTX1:TASK1
449 * == TASK5(優å…
450ˆåº¦ï¼šé«˜ï¼‰==
451 * 37: wup_tsk(TASK1)
452 * // 高:TASK5→TASK1,MTX2:TASK1,MTX1:TASK1
453 * 38: slp_tsk()
454 * // 高:TASK1,MTX2:TASK1,MTX1:TASK1
455 *
456 * == TASK1(続き)==
457 * 39: dis_dsp()
458 * 40: wup_tsk(TASK4)
459 * // 高:TASK1→TASK4,MTX2:TASK1,MTX1:TASK1
460 * 41: rot_rdq(HIGH_PRIORITY)
461 * // 高:TASK4→TASK1,MTX2:TASK1,MTX1:TASK1
462 * 42: wup_tsk(TASK5)
463 * // 高:TASK4→TASK1→TASK5,MTX2:TASK1,MTX1:TASK1
464 * 43: unl_mtx(MTX1) ... (B-3)
465 * // 高:TASK4→TASK1→TASK5,MTX2:TASK1
466 * get_pri(TSK_SELF, &tskpri)
467 * assert(tskpri == HIGH_PRIORITY)
468 * 44: ena_dsp()
469 * == TASK4(続き)==
470 * 45: slp_tsk()
471 * // 高:TASK1→TASK5,MTX2:TASK1
472 * == TASK1(続き)==
473 * 46: slp_tsk()
474 * // 高:TASK5,MTX2:TASK1
475 * == TASK5(続き)==
476 * 47: wup_tsk(TASK1)
477 * // 高:TASK5→TASK1,MTX2:TASK1
478 * 48: slp_tsk()
479 * // 高:TASK1,MTX2:TASK1
480 *
481 * == TASK1(続き)==
482 * 49: wup_tsk(TASK2)
483 * wup_tsk(TASK3)
484 * slp_tsk()
485 * // 中:TASK2→TASK3,MTX2:TASK1
486 * == TASK2(続き)==
487 * 50: loc_mtx(MTX2)
488 * // 中:TASK3,MTX2:TASK1→TASK2
489 * == TASK3(続き)==
490 * 51: chg_pri(TASK1, HIGH_PRIORITY)
491 * wup_tsk(TASK1)
492 * // 高:TASK1,中:TASK3,MTX2:TASK1→TASK2
493 * == TASK1(続き)==
494 * 52: unl_mtx(MTX2) ... (C-1)
495 * // 高:TASK1→TASK2,中:TASK3,MTX2:TASK2
496 * get_pri(TASK2, &tskpri)
497 * assert(tskpri == HIGH_PRIORITY)
498 *
499 * 53: loc_mtx(MTX3)
500 * // 高:TASK1→TASK2,中:TASK3,MTX2:TASK2,MTX3:TASK1
501 * chg_pri(TASK1, TPRI_INI)
502 * 54: loc_mtx(MTX1)
503 * // 高:TASK1→TASK2,中:TASK3,MTX1:TASK1,MTX2:TASK2,MTX3:TASK1
504 * 55: slp_tsk()
505 * // 高:TASK2,中:TASK3,MTX1:TASK1,MTX2:TASK2,MTX3:TASK1
506 * == TASK2(続き)==
507 * 56: wup_tsk(TASK1)
508 * // 高:TASK2→TASK1,中:TASK3,MTX1:TASK1,MTX2:TASK2,MTX3:TASK1
509 * 57: loc_mtx(MTX1)
510 * // 高:TASK1,中:TASK3,MTX1:TASK1→TASK2,MTX2:TASK2,MTX3:TASK1
511 * == TASK1(続き)==
512 * 58: unl_mtx(MTX1) ... (C-3)
513 * // 高:TASK1→TASK2,中:TASK3,MTX1:TASK2,MTX2:TASK2,MTX3:TASK1
514 * get_pri(TASK2, &tskpri)
515 * assert(tskpri == HIGH_PRIORITY)
516 * 59: unl_mtx(MTX3)
517 * // 高:TASK2,中:TASK1→TASK3,MTX1:TASK2,MTX2:TASK2
518 * == TASK2(続き)==
519 * 60: unl_mtx(MTX1)
520 * // 高:TASK2,中:TASK1→TASK3,MTX2:TASK2
521 * 61: unl_mtx(MTX2)
522 * // 中:TASK2→TASK1→TASK3
523 *
524 * 62: loc_mtx(MTX1)
525 * // 中:TASK2→TASK1→TASK3,MTX1:TASK2
526 * 63: rot_rdq(MID_PRIORITY)
527 * // 中:TASK1→TASK3→TASK2,MTX1:TASK2
528 * == TASK1(続き)==
529 * 64: loc_mtx(MTX1)
530 * // 中:TASK3→TASK2,MTX1:TASK2→TASK1
531 * == TASK3(続き)==
532 * 65: rot_rdq(MID_PRIORITY)
533 * // 中:TASK2→TASK3,MTX1:TASK2→TASK1
534 * == TASK2(続き)==
535 * 66: unl_mtx(MTX1) ... (C-2)
536 * // 中:TASK2→TASK3→TASK1,MTX1:TASK1
537 * get_pri(TASK1, &tskpri)
538 * assert(tskpri == MID_PRIORITY)
539 * == TASK2(続き)==
540 * 67: ext_tsk() -> noreturn
541 * // 中:TASK3→TASK1,MTX1:TASK1
542 * == TASK3(続き)==
543 * 68: ext_tsk() -> noreturn
544 * // 中:TASK1,MTX1:TASK1
545 * == TASK1(続き)==
546 * 69: END
547 */
548
549#include <kernel.h>
550#include <t_syslog.h>
551#include "syssvc/test_svc.h"
552#include "kernel_cfg.h"
553#include "test_mutex4.h"
554
555extern ER bit_mutex(void);
556
557/* DO NOT DELETE THIS LINE -- gentest depends on it. */
558
559void
560task1(intptr_t exinf)
561{
562 ER_UINT ercd;
563 PRI tskpri;
564
565 test_start(__FILE__);
566
567 set_bit_func(bit_mutex);
568
569 check_point(1);
570 ercd = dis_dsp();
571 check_ercd(ercd, E_OK);
572
573 check_point(2);
574 ercd = act_tsk(TASK2);
575 check_ercd(ercd, E_OK);
576
577 ercd = act_tsk(TASK4);
578 check_ercd(ercd, E_OK);
579
580 check_point(3);
581 ercd = ploc_mtx(MTX2);
582 check_ercd(ercd, E_OK);
583
584 ercd = get_pri(TSK_SELF, &tskpri);
585 check_ercd(ercd, E_OK);
586
587 check_assert(tskpri == HIGH_PRIORITY);
588
589 check_point(4);
590 ercd = ena_dsp();
591 check_ercd(ercd, E_OK);
592
593 check_point(5);
594 ercd = unl_mtx(MTX2);
595 check_ercd(ercd, E_OK);
596
597 check_point(8);
598 ercd = get_pri(TSK_SELF, &tskpri);
599 check_ercd(ercd, E_OK);
600
601 check_assert(tskpri == MID_PRIORITY);
602
603 check_point(9);
604 ercd = dis_dsp();
605 check_ercd(ercd, E_OK);
606
607 check_point(10);
608 ercd = rot_rdq(MID_PRIORITY);
609 check_ercd(ercd, E_OK);
610
611 check_point(11);
612 ercd = act_tsk(TASK3);
613 check_ercd(ercd, E_OK);
614
615 check_point(12);
616 ercd = ploc_mtx(MTX1);
617 check_ercd(ercd, E_OK);
618
619 ercd = get_pri(TSK_SELF, &tskpri);
620 check_ercd(ercd, E_OK);
621
622 check_assert(tskpri == MID_PRIORITY);
623
624 check_point(13);
625 ercd = ena_dsp();
626 check_ercd(ercd, E_OK);
627
628 check_point(15);
629 ercd = slp_tsk();
630 check_ercd(ercd, E_OK);
631
632 check_point(18);
633 ercd = wup_tsk(TASK2);
634 check_ercd(ercd, E_OK);
635
636 check_point(19);
637 ercd = dis_dsp();
638 check_ercd(ercd, E_OK);
639
640 check_point(20);
641 ercd = rot_rdq(MID_PRIORITY);
642 check_ercd(ercd, E_OK);
643
644 check_point(21);
645 ercd = wup_tsk(TASK3);
646 check_ercd(ercd, E_OK);
647
648 check_point(22);
649 ercd = unl_mtx(MTX1);
650 check_ercd(ercd, E_OK);
651
652 ercd = get_pri(TSK_SELF, &tskpri);
653 check_ercd(ercd, E_OK);
654
655 check_assert(tskpri == MID_PRIORITY);
656
657 check_point(23);
658 ercd = ena_dsp();
659 check_ercd(ercd, E_OK);
660
661 check_point(25);
662 ercd = slp_tsk();
663 check_ercd(ercd, E_OK);
664
665 check_point(28);
666 ercd = dis_dsp();
667 check_ercd(ercd, E_OK);
668
669 check_point(29);
670 ercd = wup_tsk(TASK4);
671 check_ercd(ercd, E_OK);
672
673 check_point(30);
674 ercd = ploc_mtx(MTX2);
675 check_ercd(ercd, E_OK);
676
677 check_point(31);
678 ercd = rot_rdq(HIGH_PRIORITY);
679 check_ercd(ercd, E_OK);
680
681 check_point(32);
682 ercd = act_tsk(TASK5);
683 check_ercd(ercd, E_OK);
684
685 check_point(33);
686 ercd = ploc_mtx(MTX1);
687 check_ercd(ercd, E_OK);
688
689 ercd = get_pri(TSK_SELF, &tskpri);
690 check_ercd(ercd, E_OK);
691
692 check_assert(tskpri == HIGH_PRIORITY);
693
694 check_point(34);
695 ercd = ena_dsp();
696 check_ercd(ercd, E_OK);
697
698 check_point(36);
699 ercd = slp_tsk();
700 check_ercd(ercd, E_OK);
701
702 check_point(39);
703 ercd = dis_dsp();
704 check_ercd(ercd, E_OK);
705
706 check_point(40);
707 ercd = wup_tsk(TASK4);
708 check_ercd(ercd, E_OK);
709
710 check_point(41);
711 ercd = rot_rdq(HIGH_PRIORITY);
712 check_ercd(ercd, E_OK);
713
714 check_point(42);
715 ercd = wup_tsk(TASK5);
716 check_ercd(ercd, E_OK);
717
718 check_point(43);
719 ercd = unl_mtx(MTX1);
720 check_ercd(ercd, E_OK);
721
722 ercd = get_pri(TSK_SELF, &tskpri);
723 check_ercd(ercd, E_OK);
724
725 check_assert(tskpri == HIGH_PRIORITY);
726
727 check_point(44);
728 ercd = ena_dsp();
729 check_ercd(ercd, E_OK);
730
731 check_point(46);
732 ercd = slp_tsk();
733 check_ercd(ercd, E_OK);
734
735 check_point(49);
736 ercd = wup_tsk(TASK2);
737 check_ercd(ercd, E_OK);
738
739 ercd = wup_tsk(TASK3);
740 check_ercd(ercd, E_OK);
741
742 ercd = slp_tsk();
743 check_ercd(ercd, E_OK);
744
745 check_point(52);
746 ercd = unl_mtx(MTX2);
747 check_ercd(ercd, E_OK);
748
749 ercd = get_pri(TASK2, &tskpri);
750 check_ercd(ercd, E_OK);
751
752 check_assert(tskpri == HIGH_PRIORITY);
753
754 check_point(53);
755 ercd = loc_mtx(MTX3);
756 check_ercd(ercd, E_OK);
757
758 ercd = chg_pri(TASK1, TPRI_INI);
759 check_ercd(ercd, E_OK);
760
761 check_point(54);
762 ercd = loc_mtx(MTX1);
763 check_ercd(ercd, E_OK);
764
765 check_point(55);
766 ercd = slp_tsk();
767 check_ercd(ercd, E_OK);
768
769 check_point(58);
770 ercd = unl_mtx(MTX1);
771 check_ercd(ercd, E_OK);
772
773 ercd = get_pri(TASK2, &tskpri);
774 check_ercd(ercd, E_OK);
775
776 check_assert(tskpri == HIGH_PRIORITY);
777
778 check_point(59);
779 ercd = unl_mtx(MTX3);
780 check_ercd(ercd, E_OK);
781
782 check_point(64);
783 ercd = loc_mtx(MTX1);
784 check_ercd(ercd, E_OK);
785
786 check_finish(69);
787 check_point(0);
788}
789
790void
791task2(intptr_t exinf)
792{
793 ER_UINT ercd;
794 PRI tskpri;
795
796 check_point(14);
797 ercd = slp_tsk();
798 check_ercd(ercd, E_OK);
799
800 check_point(24);
801 ercd = slp_tsk();
802 check_ercd(ercd, E_OK);
803
804 check_point(50);
805 ercd = loc_mtx(MTX2);
806 check_ercd(ercd, E_OK);
807
808 check_point(56);
809 ercd = wup_tsk(TASK1);
810 check_ercd(ercd, E_OK);
811
812 check_point(57);
813 ercd = loc_mtx(MTX1);
814 check_ercd(ercd, E_OK);
815
816 check_point(60);
817 ercd = unl_mtx(MTX1);
818 check_ercd(ercd, E_OK);
819
820 check_point(61);
821 ercd = unl_mtx(MTX2);
822 check_ercd(ercd, E_OK);
823
824 check_point(62);
825 ercd = loc_mtx(MTX1);
826 check_ercd(ercd, E_OK);
827
828 check_point(63);
829 ercd = rot_rdq(MID_PRIORITY);
830 check_ercd(ercd, E_OK);
831
832 check_point(66);
833 ercd = unl_mtx(MTX1);
834 check_ercd(ercd, E_OK);
835
836 ercd = get_pri(TASK1, &tskpri);
837 check_ercd(ercd, E_OK);
838
839 check_assert(tskpri == MID_PRIORITY);
840
841 check_point(67);
842 ercd = ext_tsk();
843
844 check_point(0);
845}
846
847void
848task3(intptr_t exinf)
849{
850 ER_UINT ercd;
851
852 check_point(16);
853 ercd = wup_tsk(TASK1);
854 check_ercd(ercd, E_OK);
855
856 check_point(17);
857 ercd = slp_tsk();
858 check_ercd(ercd, E_OK);
859
860 check_point(26);
861 ercd = wup_tsk(TASK1);
862 check_ercd(ercd, E_OK);
863
864 check_point(27);
865 ercd = slp_tsk();
866 check_ercd(ercd, E_OK);
867
868 check_point(51);
869 ercd = chg_pri(TASK1, HIGH_PRIORITY);
870 check_ercd(ercd, E_OK);
871
872 ercd = wup_tsk(TASK1);
873 check_ercd(ercd, E_OK);
874
875 check_point(65);
876 ercd = rot_rdq(MID_PRIORITY);
877 check_ercd(ercd, E_OK);
878
879 check_point(68);
880 ercd = ext_tsk();
881
882 check_point(0);
883}
884
885void
886task4(intptr_t exinf)
887{
888 ER_UINT ercd;
889
890 check_point(6);
891 ercd = loc_mtx(MTX1);
892 check_ercd(ercd, E_ILUSE);
893
894 check_point(7);
895 ercd = slp_tsk();
896 check_ercd(ercd, E_OK);
897
898 check_point(35);
899 ercd = slp_tsk();
900 check_ercd(ercd, E_OK);
901
902 check_point(45);
903 ercd = slp_tsk();
904 check_ercd(ercd, E_OK);
905
906 check_point(0);
907}
908
909void
910task5(intptr_t exinf)
911{
912 ER_UINT ercd;
913
914 check_point(37);
915 ercd = wup_tsk(TASK1);
916 check_ercd(ercd, E_OK);
917
918 check_point(38);
919 ercd = slp_tsk();
920 check_ercd(ercd, E_OK);
921
922 check_point(47);
923 ercd = wup_tsk(TASK1);
924 check_ercd(ercd, E_OK);
925
926 check_point(48);
927 ercd = slp_tsk();
928 check_ercd(ercd, E_OK);
929
930 check_point(0);
931}
Note: See TracBrowser for help on using the repository browser.