source: asp3_wo_tecs/trunk/extension/messagebuf/test/test_messagebuf1.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: 12.0 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_messagebuf1.c 310 2015-02-08 13:46:46Z ertl-hiro $
53 */
54
55/*
56 * メッセージバッファのテスト(1)
57 *
58 * 【テストの目的】
59 *
60 * FIFO順メッセージバッファに,メッセージを送信する処理と受信する処理
61 * を一通りテストする.
62 *
63 * 【テスト項
64目】
65 *
66 * (A) メッセージバッファへの送信処理(snd_mbf,send_message)
67 * (A-1) 受信待
68ちキューのå…
69ˆé ­ã‚¿ã‚¹ã‚¯ãŒå—信(タスク切換えなし)
70 * (A-2) 受信待
71ちキューのå…
72ˆé ­ã‚¿ã‚¹ã‚¯ãŒå—信(タスク切換えあり)
73 * (A-3) メッセージバッファ管理領域に格納
74 * (A-4) 送信待
75ちキューにタスクがあるために送信待
76ち状æ…
77‹ã«
78 * (A-5) メッセージバッファ管理領域に空きがないために送信待
79ち状æ…
80‹ã«
81 * (B) メッセージバッファからの受信処理(rcv_mbf,receive_message)
82 * (B-1) メッセージバッファ管理領域から受信
83 * (B-2) (B-1)+送信待
84ちタスク(1つまたは複数)が待
85ち解除(タスク
86 * 切換えなし)
87 * (B-3) (B-1)+送信待
88ちタスク(1つまたは複数)が待
89ち解除(タスク
90 * 切換えあり)
91 * (B-4) 送信待
92ちキューのå…
93ˆé ­ã®ã‚¿ã‚¹ã‚¯ã®ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’受信(タスク切
94 * 換えなし)
95 * (B-5) 送信待
96ちキューのå…
97ˆé ­ã®ã‚¿ã‚¹ã‚¯ã®ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’受信(タスク切
98 * 換えあり)
99 * (B-6) 受信待
100ち状æ…
101‹ã«
102 * (C) メッセージバッファ管理領域へのメッセージの格納(enqueue_message)
103 * (C-1) サイズとメッセージ本体を一連の領域に格納
104 * (C-2) サイズを格納後に管理領域のå…
105ˆé ­ã«æˆ»ã‚‹
106 * (C-3) メッセージ本体の格納途中で管理領域のå…
107ˆé ­ã«æˆ»ã‚‹
108 * (C-4) メッセージ本体の格納後に管理領域のå…
109ˆé ­ã«æˆ»ã‚‹
110 * (D) メッセージバッファ管理領域からのメッセージの取出し(dequeue_message)
111 * (D-1) サイズとメッセージ本体を一連の領域から取出し
112 * (D-2) サイズを取出し後に管理領域のå…
113ˆé ­ã«æˆ»ã‚‹
114 * (D-3) メッセージ本体の取出し途中で管理領域のå…
115ˆé ­ã«æˆ»ã‚‹
116 * (D-4) メッセージ本体の取出し後に管理領域のå…
117ˆé ­ã«æˆ»ã‚‹
118 *
119 * 【使用リソース】
120 *
121 * TASK1: 高優å…
122ˆåº¦ã‚¿ã‚¹ã‚¯ï¼Œãƒ¡ã‚¤ãƒ³ã‚¿ã‚¹ã‚¯ï¼Œæœ€åˆã‹ã‚‰èµ·å‹•
123 * TASK2: 中優å…
124ˆåº¦ã‚¿ã‚¹ã‚¯
125 * TASK3: 低優å…
126ˆåº¦ã‚¿ã‚¹ã‚¯
127 * MBF1: メッセージバッファ(TA_NULL属性,最大メッセージサイズ:26,メッ
128 * セージバッファ管理領域のサイズ:26→実際には28)
129 *
130 * 【テストシーケンス】
131 *
132 * == TASK1(優å…
133ˆåº¦ï¼šé«˜ï¼‰==
134 * call(set_bit_func(bit_kernel))
135 * 1: act_tsk(TASK2)
136 * act_tsk(TASK3)
137 * ref_mbf(MBF1, &rmbf)
138 * assert(rmbf.stskid == TSK_NONE)
139 * assert(rmbf.rtskid == TSK_NONE)
140 * assert(rmbf.smbfcnt == 0)
141 * snd_mbf(MBF1, string1, 9) ... (A-3)(C-1),使用:0〜15
142 * 2: snd_mbf(MBF1, string2, 5) ... (A-3)(C-4),使用:0〜27
143 * 3: snd_mbf(MBF1, string3, 4) ... (A-5)
144 * == TASK2(優å…
145ˆåº¦ï¼šä¸­ï¼‰==
146 * 4: ref_mbf(MBF1, &rmbf)
147 * assert(rmbf.stskid == TASK1)
148 * assert(rmbf.rtskid == TSK_NONE)
149 * assert(rmbf.smbfcnt == 2)
150 * 5: snd_mbf(MBF1, string1, 4) ... (A-4)
151 * == TASK3(優å…
152ˆåº¦ï¼šä½Žï¼‰==
153 * 6: rcv_mbf(MBF1, buf1) -> 9 ... (B-3)(D-1)(C-1),使用:16〜27,0〜15
154 * == TASK1(続き)==
155 * 7: assert(strncmp(buf1, string1, 9) == 0)
156 * slp_tsk()
157 * == TASK2(続き)==
158 * 8: rcv_mbf(MBF1, buf1) -> 5 ... (B-1)(D-4),使用:0〜15
159 * assert(strncmp(buf1, string2, 5) == 0)
160 * rcv_mbf(MBF1, buf1) -> 4 ... (B-1)(D-1),使用:8〜15
161 * assert(strncmp(buf1, string3, 4) == 0)
162 * rcv_mbf(MBF1, buf1) -> 4 ... (B-1)(D-1),使用:なし
163 * assert(strncmp(buf1, string1, 4) == 0)
164 * 9: rcv_mbf(MBF1, buf1) -> 10 ... (B-6)
165 * == TASK3(続き)==
166 * 10: ref_mbf(MBF1, &rmbf)
167 * assert(rmbf.stskid == TSK_NONE)
168 * assert(rmbf.rtskid == TASK2)
169 * assert(rmbf.smbfcnt == 0)
170 * 11: snd_mbf(MBF1, string2, 10) ... (A-2)
171 * == TASK2(続き)==
172 * 12: assert(strncmp(buf1, string2, 10) == 0)
173 * rcv_mbf(MBF1, buf1) -> 11 ... (B-6)
174 * == TASK3(続き)==
175 * 13: wup_tsk(TASK1)
176 * == TASK1(続き)==
177 * 14: snd_mbf(MBF1, string3, 11) ... (A-1)
178 * assert(strncmp(buf1, string3, 11) == 0)
179 * snd_mbf(MBF1, string1, 16) ... (A-3)(C-3),使用:16〜27,0〜7
180 * tslp_tsk(1000U) -> E_TMOUT
181 * == TASK2(続き)==
182 * 15: slp_tsk()
183 * == TASK3(続き)==
184 * 16: snd_mbf(MBF1, string2, 12) ... (A-5)
185 * == TASK1(続き)==
186 * 17: wup_tsk(TASK2)
187 * tslp_tsk(1000U) -> E_TMOUT
188 * == TASK2(続き)==
189 * 18: snd_mbf(MBF1, string3, 4) ... (A-4)
190 * == TASK1(続き)==
191 * 19: rcv_mbf(MBF1, buf1) -> 16 ... (B-2)(D-3)(C-1)(C-2),
192 * ... 使用:8〜27,0〜3
193 * assert(strncmp(buf1, string1, 16) == 0)
194 * slp_tsk()
195 * == TASK2(続き)==
196 * 20: rcv_mbf(MBF1, buf1) -> 12 ... (B-1)(D-1),使用:24〜27,0〜3
197 * assert(strncmp(buf1, string2, 12) == 0)
198 * 21: snd_mbf(MBF1, string1, 25) ... (A-5)
199 * == TASK3(続き)==
200 * 22: rcv_mbf(MBF1, buf1) -> 4 ... (B-1)(D-2),使用:なし
201 * assert(strncmp(buf1, string3, 4) == 0)
202 * rcv_mbf(MBF1, buf1) -> 25 ... (B-5)
203 * == TASK2(続き)==
204 * 23: assert(strncmp(buf1, string1, 25) == 0)
205 * snd_mbf(MBF1, string2, 26) ... (A-5)
206 * == TASK3(続き)==
207 * 24: wup_tsk(TASK1)
208 * == TASK1(続き)==
209 * 25: rcv_mbf(MBF1, buf1) -> 26 ... (B-4)
210 * assert(strncmp(buf1, string2, 26) == 0)
211 * slp_tsk()
212 * == TASK2(続き)==
213 * 26: slp_tsk()
214 * == TASK3(続き)==
215 * 27: END
216 */
217
218#include <kernel.h>
219#include <t_syslog.h>
220#include "syssvc/test_svc.h"
221#include "kernel_cfg.h"
222#include "test_messagebuf1.h"
223#include <string.h>
224
225const char string1[26] = "abcdefghijklmnopqrstuvwxyz";
226const char string2[26] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
227const char string3[16] = "0123456789abcdef";
228
229char buf1[26];
230
231extern ER bit_kernel(void);
232
233/* DO NOT DELETE THIS LINE -- gentest depends on it. */
234
235void
236task1(intptr_t exinf)
237{
238 ER_UINT ercd;
239 T_RMBF rmbf;
240
241 test_start(__FILE__);
242
243 set_bit_func(bit_kernel);
244
245 check_point(1);
246 ercd = act_tsk(TASK2);
247 check_ercd(ercd, E_OK);
248
249 ercd = act_tsk(TASK3);
250 check_ercd(ercd, E_OK);
251
252 ercd = ref_mbf(MBF1, &rmbf);
253 check_ercd(ercd, E_OK);
254
255 check_assert(rmbf.stskid == TSK_NONE);
256
257 check_assert(rmbf.rtskid == TSK_NONE);
258
259 check_assert(rmbf.smbfcnt == 0);
260
261 ercd = snd_mbf(MBF1, string1, 9);
262 check_ercd(ercd, E_OK);
263
264 check_point(2);
265 ercd = snd_mbf(MBF1, string2, 5);
266 check_ercd(ercd, E_OK);
267
268 check_point(3);
269 ercd = snd_mbf(MBF1, string3, 4);
270 check_ercd(ercd, E_OK);
271
272 check_point(7);
273 check_assert(strncmp(buf1, string1, 9) == 0);
274
275 ercd = slp_tsk();
276 check_ercd(ercd, E_OK);
277
278 check_point(14);
279 ercd = snd_mbf(MBF1, string3, 11);
280 check_ercd(ercd, E_OK);
281
282 check_assert(strncmp(buf1, string3, 11) == 0);
283
284 ercd = snd_mbf(MBF1, string1, 16);
285 check_ercd(ercd, E_OK);
286
287 ercd = tslp_tsk(1000U);
288 check_ercd(ercd, E_TMOUT);
289
290 check_point(17);
291 ercd = wup_tsk(TASK2);
292 check_ercd(ercd, E_OK);
293
294 ercd = tslp_tsk(1000U);
295 check_ercd(ercd, E_TMOUT);
296
297 check_point(19);
298 ercd = rcv_mbf(MBF1, buf1);
299 check_ercd(ercd, 16);
300
301 check_assert(strncmp(buf1, string1, 16) == 0);
302
303 ercd = slp_tsk();
304 check_ercd(ercd, E_OK);
305
306 check_point(25);
307 ercd = rcv_mbf(MBF1, buf1);
308 check_ercd(ercd, 26);
309
310 check_assert(strncmp(buf1, string2, 26) == 0);
311
312 ercd = slp_tsk();
313 check_ercd(ercd, E_OK);
314
315 check_point(0);
316}
317
318void
319task2(intptr_t exinf)
320{
321 ER_UINT ercd;
322 T_RMBF rmbf;
323
324 check_point(4);
325 ercd = ref_mbf(MBF1, &rmbf);
326 check_ercd(ercd, E_OK);
327
328 check_assert(rmbf.stskid == TASK1);
329
330 check_assert(rmbf.rtskid == TSK_NONE);
331
332 check_assert(rmbf.smbfcnt == 2);
333
334 check_point(5);
335 ercd = snd_mbf(MBF1, string1, 4);
336 check_ercd(ercd, E_OK);
337
338 check_point(8);
339 ercd = rcv_mbf(MBF1, buf1);
340 check_ercd(ercd, 5);
341
342 check_assert(strncmp(buf1, string2, 5) == 0);
343
344 ercd = rcv_mbf(MBF1, buf1);
345 check_ercd(ercd, 4);
346
347 check_assert(strncmp(buf1, string3, 4) == 0);
348
349 ercd = rcv_mbf(MBF1, buf1);
350 check_ercd(ercd, 4);
351
352 check_assert(strncmp(buf1, string1, 4) == 0);
353
354 check_point(9);
355 ercd = rcv_mbf(MBF1, buf1);
356 check_ercd(ercd, 10);
357
358 check_point(12);
359 check_assert(strncmp(buf1, string2, 10) == 0);
360
361 ercd = rcv_mbf(MBF1, buf1);
362 check_ercd(ercd, 11);
363
364 check_point(15);
365 ercd = slp_tsk();
366 check_ercd(ercd, E_OK);
367
368 check_point(18);
369 ercd = snd_mbf(MBF1, string3, 4);
370 check_ercd(ercd, E_OK);
371
372 check_point(20);
373 ercd = rcv_mbf(MBF1, buf1);
374 check_ercd(ercd, 12);
375
376 check_assert(strncmp(buf1, string2, 12) == 0);
377
378 check_point(21);
379 ercd = snd_mbf(MBF1, string1, 25);
380 check_ercd(ercd, E_OK);
381
382 check_point(23);
383 check_assert(strncmp(buf1, string1, 25) == 0);
384
385 ercd = snd_mbf(MBF1, string2, 26);
386 check_ercd(ercd, E_OK);
387
388 check_point(26);
389 ercd = slp_tsk();
390 check_ercd(ercd, E_OK);
391
392 check_point(0);
393}
394
395void
396task3(intptr_t exinf)
397{
398 ER_UINT ercd;
399 T_RMBF rmbf;
400
401 check_point(6);
402 ercd = rcv_mbf(MBF1, buf1);
403 check_ercd(ercd, 9);
404
405 check_point(10);
406 ercd = ref_mbf(MBF1, &rmbf);
407 check_ercd(ercd, E_OK);
408
409 check_assert(rmbf.stskid == TSK_NONE);
410
411 check_assert(rmbf.rtskid == TASK2);
412
413 check_assert(rmbf.smbfcnt == 0);
414
415 check_point(11);
416 ercd = snd_mbf(MBF1, string2, 10);
417 check_ercd(ercd, E_OK);
418
419 check_point(13);
420 ercd = wup_tsk(TASK1);
421 check_ercd(ercd, E_OK);
422
423 check_point(16);
424 ercd = snd_mbf(MBF1, string2, 12);
425 check_ercd(ercd, E_OK);
426
427 check_point(22);
428 ercd = rcv_mbf(MBF1, buf1);
429 check_ercd(ercd, 4);
430
431 check_assert(strncmp(buf1, string3, 4) == 0);
432
433 ercd = rcv_mbf(MBF1, buf1);
434 check_ercd(ercd, 25);
435
436 check_point(24);
437 ercd = wup_tsk(TASK1);
438 check_ercd(ercd, E_OK);
439
440 check_finish(27);
441 check_point(0);
442}
Note: See TracBrowser for help on using the repository browser.