source: asp_ewarm/asp-1.7.0/test/test_cpuexc11.c@ 61

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

ASP for EWARM のコミット.

File size: 6.7 KB
Line 
1/*
2 * TOPPERS Software
3 * Toyohashi Open Platform for Embedded Real-Time Systems
4 *
5 * Copyright (C) 2007-2009 by Embedded and Real-Time Systems Laboratory
6 * Graduate School of Information Science, Nagoya Univ., JAPAN
7 *
8 * ã‹L’˜ìŒ ŽÒ‚́CˆÈ‰º‚Ì(1)`(4)‚ÌðŒ‚ð–ž‚½‚·ê‡‚ÉŒÀ‚èC–{ƒ\ƒtƒgƒEƒF
9 * ƒAi–{ƒ\ƒtƒgƒEƒFƒA‚ð‰ü•Ï‚µ‚½‚à‚Ì‚ðŠÜ‚ށDˆÈ‰º“¯‚¶j‚ðŽg—pE•¡»E‰ü
10 * •ÏEÄ”z•ziˆÈ‰ºC—˜—p‚ƌĂԁj‚·‚邱‚Ƃ𖳏ž‚Å‹–‘ø‚·‚éD
11 * (1) –{ƒ\ƒtƒgƒEƒFƒA‚ðƒ\[ƒXƒR[ƒh‚ÌŒ`‚Å—˜—p‚·‚éê‡‚ɂ́Cã‹L‚Ì’˜ì
12 * Œ •\Ž¦C‚±‚Ì—˜—pðŒ‚¨‚æ‚щº‹L‚Ì–³•ÛØ‹K’肪C‚»‚Ì‚Ü‚Ü‚ÌŒ`‚Ń\[
13 * ƒXƒR[ƒh’†‚ÉŠÜ‚Ü‚ê‚Ä‚¢‚邱‚ƁD
14 * (2) –{ƒ\ƒtƒgƒEƒFƒA‚ðCƒ‰ƒCƒuƒ‰ƒŠŒ`Ž®‚ȂǁC‘¼‚̃\ƒtƒgƒEƒFƒAŠJ”­‚ÉŽg
15 * —p‚Å‚«‚éŒ`‚ōĔz•z‚·‚éê‡‚ɂ́CÄ”z•z‚É”º‚¤ƒhƒLƒ…
16ƒƒ“ƒgi—˜—p
17 * ŽÒƒ}ƒjƒ…
18ƒAƒ‹‚Ȃǁj‚ɁCã‹L‚Ì’˜ìŒ •\Ž¦C‚±‚Ì—˜—pðŒ‚¨‚æ‚щº‹L
19 * ‚Ì–³•ÛØ‹K’è‚ðŒfÚ‚·‚邱‚ƁD
20 * (3) –{ƒ\ƒtƒgƒEƒFƒA‚ðC‹@Ší‚É‘g‚ݍž‚ނȂǁC‘¼‚̃\ƒtƒgƒEƒFƒAŠJ”­‚ÉŽg
21 * —p‚Å‚«‚È‚¢Œ`‚ōĔz•z‚·‚éê‡‚ɂ́CŽŸ‚Ì‚¢‚¸‚ê‚©‚ÌðŒ‚ð–ž‚½‚·‚±
22 * ‚ƁD
23 * (a) Ä”z•z‚É”º‚¤ƒhƒLƒ…
24ƒƒ“ƒgi—˜—pŽÒƒ}ƒjƒ…
25ƒAƒ‹‚Ȃǁj‚ɁCã‹L‚Ì’˜
26 * ìŒ •\Ž¦C‚±‚Ì—˜—pðŒ‚¨‚æ‚щº‹L‚Ì–³•ÛØ‹K’è‚ðŒfÚ‚·‚邱‚ƁD
27 * (b) Ä”z•z‚ÌŒ`‘Ô‚ðC•Ê‚É’è‚ß‚é•û–@‚É‚æ‚Á‚āCTOPPERSƒvƒƒWƒFƒNƒg‚É
28 * •ñ‚·‚邱‚ƁD
29 * (4) –{ƒ\ƒtƒgƒEƒFƒA‚Ì—˜—p‚É‚æ‚è’¼Ú“I‚Ü‚½‚͊ԐړI‚ɐ¶‚¶‚é‚¢‚©‚Ȃ鑹
30 * ŠQ‚©‚ç‚àCã‹L’˜ìŒ ŽÒ‚¨‚æ‚ÑTOPPERSƒvƒƒWƒFƒNƒg‚ð–Ɛӂ·‚邱‚ƁD
31 * ‚Ü‚½C–{ƒ\ƒtƒgƒEƒFƒA‚̃†[ƒU‚Ü‚½‚̓Gƒ“ƒhƒ†[ƒU‚©‚ç‚Ì‚¢‚©‚Ȃ闝
32 * —R‚ÉŠî‚­¿‹‚©‚ç‚àCã‹L’˜ìŒ ŽÒ‚¨‚æ‚ÑTOPPERSƒvƒƒWƒFƒNƒg‚ð
33 * –Ɛӂ·‚邱‚ƁD
34 *
35 * –{ƒ\ƒtƒgƒEƒFƒA‚́C–³•ÛØ‚Å’ñ‹Ÿ‚³‚ê‚Ä‚¢‚é‚à‚Ì‚Å‚ ‚éDã‹L’˜ìŒ ŽÒ‚¨
36 * ‚æ‚ÑTOPPERSƒvƒƒWƒFƒNƒg‚́C–{ƒ\ƒtƒgƒEƒFƒA‚ÉŠÖ‚µ‚āC“Á’è‚ÌŽg—p–Ú“I
37 * ‚ɑ΂·‚é“K‡«‚àŠÜ‚߂āC‚¢‚©‚È‚é•ÛØ‚às‚í‚È‚¢D‚Ü‚½C–{ƒ\ƒtƒgƒEƒF
38 * ƒA‚Ì—˜—p‚É‚æ‚è’¼Ú“I‚Ü‚½‚͊ԐړI‚ɐ¶‚¶‚½‚¢‚©‚Ȃ鑹ŠQ‚ÉŠÖ‚µ‚Ä‚àC‚»
39 * ‚̐ӔC‚𕉂í‚È‚¢D
40 *
41 * @(#) $Id: test_cpuexc11.c 2005 2010-12-31 04:20:08Z ertl-hiro $
42 */
43
44/*
45 * CPU—áŠOˆ—‚̃eƒXƒg(11)
46 *
47 * yƒeƒXƒg‚Ì–Ú“Iz
48 *
49 * Š„ž‚Ý—Dæ“xƒ}ƒXƒNTIPM_ENAALLCƒfƒBƒXƒpƒbƒ`‹–‰Âó‘ԁCƒ^ƒXƒN—áŠO‹–
50 * ‰Âó‘Ô‚Å”­¶‚µ‚½CPU—áŠO‚É‚¨‚¯‚éƒVƒXƒeƒ€ó‘Ԃ̃eƒXƒgDƒ^ƒXƒNØŠ·‚¦‚É
51 * ‚æ‚胊ƒJƒoƒŠ[‚Å‚«‚邱‚Æ‚àƒeƒXƒg‚·‚éD
52 *
53 * yƒeƒXƒg€–ځz
54 *
55 * ‚¢‚¸‚ê‚àCŠ„ž‚Ý—Dæ“xƒ}ƒXƒNTIPM_ENAALLCƒfƒBƒXƒpƒbƒ`‹–‰Âó‘ԁCƒ^
56 * ƒXƒN—áŠO‹–‰Âó‘Ô‚Å”­¶‚µ‚½CPU—áŠO‚É‚¨‚¢‚āC
57 *
58 * (A) CPU—áŠOƒnƒ“ƒhƒ‰ŽÀsŠJŽnŽž‚ÉCPUƒƒbƒNƒtƒ‰ƒO‚ª•Ï‰»‚µ‚È‚¢‚±‚Æ
59 * (B) CPU—áŠOƒnƒ“ƒhƒ‰ŽÀsŠJŽnŽž‚ÉŠ„ž‚Ý—Dæ“xƒ}ƒXƒN‚ª•Ï‰»‚µ‚È‚¢‚±‚Æ
60 * ICPU—áŠOƒnƒ“ƒhƒ‰’†‚ÅŠ„ž‚Ý—Dæ“xƒ}ƒXƒN‚ð“Ç‚ß‚È‚¢‚½‚߁CƒeƒXƒg‚Å
61 * ‚«‚È‚¢D
62 * (C) CPU—áŠOƒnƒ“ƒhƒ‰ŽÀsŠJŽnŽž‚ɃfƒBƒXƒpƒbƒ`‹ÖŽ~ƒtƒ‰ƒO‚ª•Ï‰»‚µ‚È‚¢‚±‚Æ
63 * (D) CPU—áŠOƒnƒ“ƒhƒ‰ŽÀsŠJŽnŽž‚Ƀ^ƒXƒN—áŠOˆ—‹ÖŽ~ƒtƒ‰ƒO‚ª•Ï‰»‚µ‚È‚¢‚±‚Æ
64 * (E) CPU—áŠOƒnƒ“ƒhƒ‰ƒŠƒ^[ƒ“Žž‚ÉCPUƒƒbƒNƒtƒ‰ƒO‚ªŒ³‚ɖ߂邱‚Æ
65 * (F) CPU—áŠOƒnƒ“ƒhƒ‰ƒŠƒ^[ƒ“Žž‚ÉŠ„ž‚Ý—Dæ“xƒ}ƒXƒN‚ªŒ³‚ɖ߂邱‚Æ
66 * (G) CPU—áŠOƒnƒ“ƒhƒ‰ƒŠƒ^[ƒ“Žž‚ɃfƒBƒXƒpƒbƒ`‹ÖŽ~ƒtƒ‰ƒO‚ª•Ï‰»‚µ‚È‚¢‚±‚Æ
67 * (H) CPU—áŠOƒnƒ“ƒhƒ‰ƒŠƒ^[ƒ“Žž‚Ƀ^ƒXƒN—áŠOˆ—‹ÖŽ~ƒtƒ‰ƒO‚ª•Ï‰»‚µ‚È‚¢‚±‚Æ
68 * (I) xsns_xpn‚ªfalse‚ð•Ô‚·‚±‚Æ
69 * (J) xsns_dpn‚ªfalse‚ð•Ô‚·‚±‚Æ
70 * (K) ƒ^ƒXƒNØŠ·‚¦‚É‚æ‚郊ƒJƒoƒŠ[‚ª‚Å‚«‚邱‚Æ
71 * (L) ƒ^ƒXƒN—áŠO‚É‚æ‚郊ƒJƒoƒŠ[‚ª‚Å‚«‚邱‚Æ
72 *
73 * yŽg—pƒŠƒ\[ƒXz
74 *
75 * TASK1: TA_ACTC’†—Dæ“xCƒ^ƒXƒN—áŠOˆ—ƒ‹[ƒ`ƒ““o˜^
76 * TASK2: TA_NULLC‚—Dæ“x
77 * CPUEXC1: TA_NULL
78 *
79 * yƒeƒXƒgƒV[ƒPƒ“ƒXz
80 *
81 * == TASK1i’†—Dæ“xC1‰ñ–ځj==
82 * 1: ó‘Ԃ̃`ƒFƒbƒN
83 * ena_tex()
84 * 2: ó‘Ԃ̃`ƒFƒbƒN
85 * RAISE_CPU_EXCEPTION
86 * == CPUEXC1i1‰ñ–ځj==
87 * 3: ó‘Ԃ̃`ƒFƒbƒN ... (A)(C)(D)
88 * xsns_xpn() == false ... (I)
89 * xsns_dpn() == false ... (J)
90 * 4: iact_tsk(TASK2)
91 * iloc_cpu()
92 * ƒŠƒ^[ƒ“
93 * == TASK2i‚—Dæ“xj==
94 * 5: ó‘Ԃ̃`ƒFƒbƒN ... (E)(F)(G)(H)
95 * 6: ter_tsk(TASK1) ... (K)
96 * 7: act_tsk(TASK1) ... (K)
97 * 8: ext_tsk()
98 * == TASK1i’†—Dæ“xC2‰ñ–ځj==
99 * 9: ó‘Ԃ̃`ƒFƒbƒN ... (K)
100 * ena_tex()
101 * 10: ó‘Ԃ̃`ƒFƒbƒN
102 * RAISE_CPU_EXCEPTION
103 * == CPUEXC1i2‰ñ–ځj==
104 * 11: ó‘Ԃ̃`ƒFƒbƒN ... (A)(C)(D)
105 * xsns_xpn() == false ... (I)
106 * xsns_dpn() == false ... (J)
107 * 12: iras_tex(TASK1, 1U)
108 * iloc_cpu()
109 * ƒŠƒ^[ƒ“
110 * == TASK1‚̃^ƒXƒN—áŠOˆ—ƒ‹[ƒ`ƒ“ ==
111 * 13: ó‘Ԃ̃`ƒFƒbƒN ... (E)(F)(G)(H)
112 * 14: act_tsk(TASK1) ... (L)
113 * 15: ext_tsk() ... (L)
114 * == TASK1i’†—Dæ“xC3‰ñ–ځj==
115 * 16: ó‘Ԃ̃`ƒFƒbƒN ... (L)
116 * 17: ƒeƒXƒgI—¹
117 */
118
119#include <kernel.h>
120#include <test_lib.h>
121#include <t_syslog.h>
122#include "kernel_cfg.h"
123#include "test_cpuexc.h"
124
125int_t task1_count = 0;
126
127void
128task1(intptr_t exinf)
129{
130 ER ercd;
131
132 switch (++task1_count) {
133 case 1:
134 check_point(1);
135 check_state(false, false, TIPM_ENAALL, false, false, true);
136 ercd = ena_tex();
137 check_ercd(ercd, E_OK);
138
139 check_point(2);
140 check_state(false, false, TIPM_ENAALL, false, false, false);
141 RAISE_CPU_EXCEPTION;
142
143 check_point(0);
144 break;
145
146 case 2:
147 check_point(9);
148 check_state(false, false, TIPM_ENAALL, false, false, true);
149 ercd = ena_tex();
150 check_ercd(ercd, E_OK);
151
152 check_point(10);
153 check_state(false, false, TIPM_ENAALL, false, false, false);
154 RAISE_CPU_EXCEPTION;
155
156 check_point(0);
157 break;
158
159 case 3:
160 check_point(16);
161 check_state(false, false, TIPM_ENAALL, false, false, true);
162
163 check_finish(17);
164 break;
165
166 default:
167 check_point(0);
168 break;
169 }
170}
171
172void
173tex_task1(TEXPTN texptn, intptr_t exinf)
174{
175 ER ercd;
176
177 check_point(13);
178 check_state(false, false, TIPM_ENAALL, false, false, true);
179
180 check_point(14);
181 ercd = act_tsk(TASK1);
182 check_ercd(ercd, E_OK);
183
184 check_point(15);
185 ercd = ext_tsk();
186 check_ercd(ercd, E_OK);
187
188 check_point(0);
189}
190
191void
192task2(intptr_t exinf)
193{
194 ER ercd;
195
196 check_point(5);
197 check_state(false, false, TIPM_ENAALL, false, false, true);
198
199 check_point(6);
200 ercd = ter_tsk(TASK1);
201 check_ercd(ercd, E_OK);
202
203 check_point(7);
204 ercd = act_tsk(TASK1);
205 check_ercd(ercd, E_OK);
206
207 check_point(8);
208 ercd = ext_tsk();
209 check_ercd(ercd, E_OK);
210
211 check_point(0);
212}
213
214void
215alarm1_handler(intptr_t exinf)
216{
217 check_point(0);
218}
219
220int_t cpuexc_count = 0;
221
222void
223cpuexc_handler(void *p_excinf)
224{
225 ER ercd;
226
227 switch (++cpuexc_count) {
228 case 1:
229 check_point(3);
230 check_state_i(true, false, false, true, false);
231 check_assert(xsns_xpn(p_excinf) == false);
232 check_assert(xsns_dpn(p_excinf) == false);
233
234 check_point(4);
235 ercd = iact_tsk(TASK2);
236 check_ercd(ercd, E_OK);
237 ercd = iloc_cpu();
238 check_ercd(ercd, E_OK);
239 break;
240
241 case 2:
242 check_point(11);
243 check_state_i(true, false, false, true, false);
244 check_assert(xsns_xpn(p_excinf) == false);
245 check_assert(xsns_dpn(p_excinf) == false);
246
247 check_point(12);
248 ercd = iras_tex(TASK1, 1U);
249 check_ercd(ercd, E_OK);
250 ercd = iloc_cpu();
251 check_ercd(ercd, E_OK);
252 break;
253
254 default:
255 check_point(0);
256 break;
257 }
258}
Note: See TracBrowser for help on using the repository browser.