source: asp_ewarm/asp-1.7.0/target/stm32_discovery_EWARM2/sample_workspace/src/sample1.c@ 61

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

ASP for EWARM のコミット.

File size: 14.5 KB
Line 
1/*
2 * TOPPERS/ASP Kernel
3 * Toyohashi Open Platform for Embedded Real-Time Systems/
4 * Advanced Standard Profile Kernel
5 *
6 * Copyright (C) 2000-2003 by Embedded and Real-Time Systems Laboratory
7 * Toyohashi Univ. of Technology, JAPAN
8 * Copyright (C) 2004-2010 by Embedded and Real-Time Systems Laboratory
9 * Graduate School of Information Science, Nagoya Univ., JAPAN
10 *
11 * ã‹L’˜ìŒ ŽÒ‚́CˆÈ‰º‚Ì(1)`(4)‚ÌðŒ‚ð–ž‚½‚·ê‡‚ÉŒÀ‚èC–{ƒ\ƒtƒgƒEƒF
12 * ƒAi–{ƒ\ƒtƒgƒEƒFƒA‚ð‰ü•Ï‚µ‚½‚à‚Ì‚ðŠÜ‚ށDˆÈ‰º“¯‚¶j‚ðŽg—pE•¡»E‰ü
13 * •ÏEÄ”z•ziˆÈ‰ºC—˜—p‚ƌĂԁj‚·‚邱‚Ƃ𖳏ž‚Å‹–‘ø‚·‚éD
14 * (1) –{ƒ\ƒtƒgƒEƒFƒA‚ðƒ\[ƒXƒR[ƒh‚ÌŒ`‚Å—˜—p‚·‚éê‡‚ɂ́Cã‹L‚Ì’˜ì
15 * Œ •\Ž¦C‚±‚Ì—˜—pðŒ‚¨‚æ‚щº‹L‚Ì–³•ÛØ‹K’肪C‚»‚Ì‚Ü‚Ü‚ÌŒ`‚Ń\[
16 * ƒXƒR[ƒh’†‚ÉŠÜ‚Ü‚ê‚Ä‚¢‚邱‚ƁD
17 * (2) –{ƒ\ƒtƒgƒEƒFƒA‚ðCƒ‰ƒCƒuƒ‰ƒŠŒ`Ž®‚ȂǁC‘¼‚̃\ƒtƒgƒEƒFƒAŠJ”­‚ÉŽg
18 * —p‚Å‚«‚éŒ`‚ōĔz•z‚·‚éê‡‚ɂ́CÄ”z•z‚É”º‚¤ƒhƒLƒ…
19ƒƒ“ƒgi—˜—p
20 * ŽÒƒ}ƒjƒ…
21ƒAƒ‹‚Ȃǁj‚ɁCã‹L‚Ì’˜ìŒ •\Ž¦C‚±‚Ì—˜—pðŒ‚¨‚æ‚щº‹L
22 * ‚Ì–³•ÛØ‹K’è‚ðŒfÚ‚·‚邱‚ƁD
23 * (3) –{ƒ\ƒtƒgƒEƒFƒA‚ðC‹@Ší‚É‘g‚ݍž‚ނȂǁC‘¼‚̃\ƒtƒgƒEƒFƒAŠJ”­‚ÉŽg
24 * —p‚Å‚«‚È‚¢Œ`‚ōĔz•z‚·‚éê‡‚ɂ́CŽŸ‚Ì‚¢‚¸‚ê‚©‚ÌðŒ‚ð–ž‚½‚·‚±
25 * ‚ƁD
26 * (a) Ä”z•z‚É”º‚¤ƒhƒLƒ…
27ƒƒ“ƒgi—˜—pŽÒƒ}ƒjƒ…
28ƒAƒ‹‚Ȃǁj‚ɁCã‹L‚Ì’˜
29 * ìŒ •\Ž¦C‚±‚Ì—˜—pðŒ‚¨‚æ‚щº‹L‚Ì–³•ÛØ‹K’è‚ðŒfÚ‚·‚邱‚ƁD
30 * (b) Ä”z•z‚ÌŒ`‘Ô‚ðC•Ê‚É’è‚ß‚é•û–@‚É‚æ‚Á‚āCTOPPERSƒvƒƒWƒFƒNƒg‚É
31 * •ñ‚·‚邱‚ƁD
32 * (4) –{ƒ\ƒtƒgƒEƒFƒA‚Ì—˜—p‚É‚æ‚è’¼Ú“I‚Ü‚½‚͊ԐړI‚ɐ¶‚¶‚é‚¢‚©‚Ȃ鑹
33 * ŠQ‚©‚ç‚àCã‹L’˜ìŒ ŽÒ‚¨‚æ‚ÑTOPPERSƒvƒƒWƒFƒNƒg‚ð–Ɛӂ·‚邱‚ƁD
34 * ‚Ü‚½C–{ƒ\ƒtƒgƒEƒFƒA‚̃†[ƒU‚Ü‚½‚̓Gƒ“ƒhƒ†[ƒU‚©‚ç‚Ì‚¢‚©‚Ȃ闝
35 * —R‚ÉŠî‚­¿‹‚©‚ç‚àCã‹L’˜ìŒ ŽÒ‚¨‚æ‚ÑTOPPERSƒvƒƒWƒFƒNƒg‚ð
36 * –Ɛӂ·‚邱‚ƁD
37 *
38 * –{ƒ\ƒtƒgƒEƒFƒA‚́C–³•ÛØ‚Å’ñ‹Ÿ‚³‚ê‚Ä‚¢‚é‚à‚Ì‚Å‚ ‚éDã‹L’˜ìŒ ŽÒ‚¨
39 * ‚æ‚ÑTOPPERSƒvƒƒWƒFƒNƒg‚́C–{ƒ\ƒtƒgƒEƒFƒA‚ÉŠÖ‚µ‚āC“Á’è‚ÌŽg—p–Ú“I
40 * ‚ɑ΂·‚é“K‡«‚àŠÜ‚߂āC‚¢‚©‚È‚é•ÛØ‚às‚í‚È‚¢D‚Ü‚½C–{ƒ\ƒtƒgƒEƒF
41 * ƒA‚Ì—˜—p‚É‚æ‚è’¼Ú“I‚Ü‚½‚͊ԐړI‚ɐ¶‚¶‚½‚¢‚©‚Ȃ鑹ŠQ‚ÉŠÖ‚µ‚Ä‚àC‚»
42 * ‚̐ӔC‚𕉂í‚È‚¢D
43 *
44 * @(#) $Id: sample1.c 1797 2010-06-07 04:24:19Z ertl-hiro $
45 */
46
47/*
48 * ƒTƒ“ƒvƒ‹ƒvƒƒOƒ‰ƒ€(1)‚Ì–{‘Ì
49 *
50 * ASPƒJ[ƒlƒ‹‚ÌŠî–{“I‚È“®ì‚ðŠm”F‚·‚邽‚߂̃Tƒ“ƒvƒ‹ƒvƒƒOƒ‰ƒ€D
51 *
52 * ƒvƒƒOƒ‰ƒ€‚ÌŠT—v:
53 *
54 * ƒ†[ƒUƒCƒ“ƒ^ƒtƒF[ƒX‚ðŽó‚¯Ž‚ƒƒCƒ“ƒ^ƒXƒNiƒ^ƒXƒNID: MAIN_TASKC—D
55 * æ“x: MAIN_PRIORITYj‚ƁC3‚‚̕À—ñŽÀs‚³‚ê‚éƒ^ƒXƒNiƒ^ƒXƒNID:
56 * TASK1`TASK3C‰Šú—Dæ“x: MID_PRIORITYj‚ō\¬‚³‚ê‚éD‚Ü‚½C‹N“®Žü
57 * Šú‚ª2•b‚ÌŽüŠúƒnƒ“ƒhƒ‰iŽüŠúƒnƒ“ƒhƒ‰ID: CYCHDR1j‚ð—p‚¢‚éD
58 *
59 * •À—ñŽÀs‚³‚ê‚éƒ^ƒXƒN‚́Ctask_loop‰ñ‹óƒ‹[ƒv‚ðŽÀs‚·‚é“x‚ɁCƒ^ƒXƒN‚ª
60 * ŽÀs’†‚Å‚ ‚邱‚Æ‚ð‚ ‚ç‚í‚·ƒƒbƒZ[ƒW‚ð•\Ž¦‚·‚éD
61 *
62 * ŽüŠúƒnƒ“ƒhƒ‰‚́CŽO‚‚̗Dæ“xiHIGH_PRIORITYCMID_PRIORITYC
63 * LOW_PRIORITYj‚̃ŒƒfƒBƒLƒ…
64[‚ð‰ñ“]‚³‚¹‚éDƒvƒƒOƒ‰ƒ€‚Ì‹N“®’¼Œã‚́C
65 * ŽüŠúƒnƒ“ƒhƒ‰‚Í’âŽ~ó‘Ô‚É‚È‚Á‚Ä‚¢‚éD
66 *
67 * ƒƒCƒ“ƒ^ƒXƒN‚́CƒVƒŠƒAƒ‹I/Oƒ|[ƒg‚©‚ç‚Ì•¶Žš“ü—Í‚ðs‚¢i•¶Žš“ü—Í‚ð
68 * ‘Ò‚Á‚Ä‚¢‚éŠÔ‚́C•À—ñŽÀs‚³‚ê‚éƒ^ƒXƒN‚ªŽÀs‚³‚ê‚Ä‚¢‚éjC“ü—Í‚³‚ꂽ
69 * •¶Žš‚ɑΉž‚µ‚½ˆ—‚ðŽÀs‚·‚éD“ü—Í‚³‚ꂽ•¶Žš‚Əˆ—‚ÌŠÖŒW‚ÍŽŸ‚Ì’Ê‚èD
70 * Control-C‚Ü‚½‚Í'Q'‚ª“ü—Í‚³‚ê‚é‚ƁCƒvƒƒOƒ‰ƒ€‚ðI—¹‚·‚éD
71 *
72 * '1' : ‘Ώۃ^ƒXƒN‚ðTASK1‚ɐ؂芷‚¦‚éi‰ŠúÝ’èjD
73 * '2' : ‘Ώۃ^ƒXƒN‚ðTASK2‚ɐ؂芷‚¦‚éD
74 * '3' : ‘Ώۃ^ƒXƒN‚ðTASK3‚ɐ؂芷‚¦‚éD
75 * 'a' : ‘Ώۃ^ƒXƒN‚ðact_tsk‚É‚æ‚è‹N“®‚·‚éD
76 * 'A' : ‘Ώۃ^ƒXƒN‚ɑ΂·‚é‹N“®—v‹‚ðcan_act‚É‚æ‚èƒLƒƒƒ“ƒZƒ‹‚·‚éD
77 * 'e' : ‘Ώۃ^ƒXƒN‚Éext_tsk‚ðŒÄ‚яo‚³‚¹CI—¹‚³‚¹‚éD
78 * 't' : ‘Ώۃ^ƒXƒN‚ðter_tsk‚É‚æ‚è‹­§I—¹‚·‚éD
79 * '>' : ‘Ώۃ^ƒXƒN‚Ì—Dæ“x‚ðHIGH_PRIORITY‚É‚·‚éD
80 * '=' : ‘Ώۃ^ƒXƒN‚Ì—Dæ“x‚ðMID_PRIORITY‚É‚·‚éD
81 * '<' : ‘Ώۃ^ƒXƒN‚Ì—Dæ“x‚ðLOW_PRIORITY‚É‚·‚éD
82 * 'G' : ‘Ώۃ^ƒXƒN‚Ì—Dæ“x‚ðget_pri‚œǂݏo‚·D
83 * 's' : ‘Ώۃ^ƒXƒN‚Éslp_tsk‚ðŒÄ‚яo‚³‚¹C‹N°‘Ò‚¿‚É‚³‚¹‚éD
84 * 'S' : ‘Ώۃ^ƒXƒN‚Étslp_tsk(10•b)‚ðŒÄ‚яo‚³‚¹C‹N°‘Ò‚¿‚É‚³‚¹‚éD
85 * 'w' : ‘Ώۃ^ƒXƒN‚ðwup_tsk‚É‚æ‚è‹N°‚·‚éD
86 * 'W' : ‘Ώۃ^ƒXƒN‚ɑ΂·‚é‹N°—v‹‚ðcan_wup‚É‚æ‚èƒLƒƒƒ“ƒZƒ‹‚·‚éD
87 * 'l' : ‘Ώۃ^ƒXƒN‚ðrel_wai‚É‚æ‚è‹­§“I‚É‘Ò‚¿‰ðœ‚É‚·‚éD
88 * 'u' : ‘Ώۃ^ƒXƒN‚ðsus_tsk‚É‚æ‚è‹­§‘Ò‚¿ó‘Ô‚É‚·‚éD
89 * 'm' : ‘Ώۃ^ƒXƒN‚Ì‹­§‘Ò‚¿ó‘Ô‚ðrsm_tsk‚É‚æ‚è‰ðœ‚·‚éD
90 * 'd' : ‘Ώۃ^ƒXƒN‚Édly_tsk(10•b)‚ðŒÄ‚яo‚³‚¹CŽžŠÔŒo‰ß‘Ò‚¿‚É‚³‚¹‚éD
91 * 'x' : ‘Ώۃ^ƒXƒN‚É—áŠOƒpƒ^[ƒ“0x0001‚Ì—áŠOˆ—‚ð—v‹‚·‚éD
92 * 'X' : ‘Ώۃ^ƒXƒN‚É—áŠOƒpƒ^[ƒ“0x0002‚Ì—áŠOˆ—‚ð—v‹‚·‚éD
93 * 'y' : ‘Ώۃ^ƒXƒN‚Édis_tex‚ðŒÄ‚яo‚³‚¹Cƒ^ƒXƒN—áŠO‚ð‹ÖŽ~‚·‚éD
94 * 'Y' : ‘Ώۃ^ƒXƒN‚Éena_tex‚ðŒÄ‚яo‚³‚¹Cƒ^ƒXƒN—áŠO‚ð‹–‰Â‚·‚éD
95 * 'r' : 3‚‚̗Dæ“xiHIGH_PRIORITYCMID_PRIORITYCLOW_PRIORITYj‚̃Œ
96 * ƒfƒBƒLƒ…
97[‚ð‰ñ“]‚³‚¹‚éD
98 * 'c' : ŽüŠúƒnƒ“ƒhƒ‰‚𓮍ìŠJŽn‚³‚¹‚éD
99 * 'C' : ŽüŠúƒnƒ“ƒhƒ‰‚𓮍ì’âŽ~‚³‚¹‚éD
100 * 'b' : ƒAƒ‰[ƒ€ƒnƒ“ƒhƒ‰‚ð5•bŒã‚É‹N“®‚·‚é‚悤“®ìŠJŽn‚³‚¹‚éD
101 * 'B' : ƒAƒ‰[ƒ€ƒnƒ“ƒhƒ‰‚𓮍ì’âŽ~‚³‚¹‚éD
102 * 'z' : ‘Ώۃ^ƒXƒN‚ÉCPU—áŠO‚𔭐¶‚³‚¹‚éiƒ^ƒXƒN‚ðI—¹‚³‚¹‚éjD
103 * 'Z' : ‘Ώۃ^ƒXƒN‚ÉCPUƒƒbƒNó‘Ô‚ÅCPU—áŠO‚𔭐¶‚³‚¹‚éiƒvƒƒOƒ‰ƒ€‚ð
104 * I—¹‚·‚éjD
105 * 'V' : get_utm‚Ő«”\•]‰¿—pƒVƒXƒeƒ€Žž‚ð2‰ñ“ǂށD
106 * 'v' : ”­s‚µ‚½ƒVƒXƒeƒ€ƒR[ƒ‹‚ð•\Ž¦‚·‚éiƒfƒtƒHƒ‹ƒgjD
107 * 'q' : ”­s‚µ‚½ƒVƒXƒeƒ€ƒR[ƒ‹‚ð•\Ž¦‚µ‚È‚¢D
108 */
109
110#include <kernel.h>
111#include <t_syslog.h>
112#include <t_stdlib.h>
113#include "syssvc/serial.h"
114#include "syssvc/syslog.h"
115#include "kernel_cfg.h"
116#include "sample1.h"
117
118/*
119 * ƒT[ƒrƒXƒR[ƒ‹‚̃Gƒ‰[‚̃ƒOo—Í
120 */
121Inline void
122svc_perror(const char *file, int_t line, const char *expr, ER ercd)
123{
124 if (ercd < 0) {
125 t_perror(LOG_ERROR, file, line, expr, ercd);
126 }
127}
128
129#define SVC_PERROR(expr) svc_perror(__FILE__, __LINE__, #expr, (expr))
130
131/*
132 * •ÀsŽÀs‚³‚ê‚éƒ^ƒXƒN‚ւ̃ƒbƒZ[ƒW—̈æ
133 */
134char_t message[3];
135
136/*
137 * ƒ‹[ƒv‰ñ”
138 */
139ulong_t task_loop; /* ƒ^ƒXƒN“à‚ł̃‹[ƒv‰ñ” */
140ulong_t tex_loop; /* —áŠOˆ—ƒ‹[ƒ`ƒ““à‚ł̃‹[ƒv‰ñ” */
141
142/*
143 * •ÀsŽÀs‚³‚ê‚éƒ^ƒXƒN
144 */
145void task(intptr_t exinf)
146{
147 volatile ulong_t i;
148 int_t n = 0;
149 int_t tskno = (int_t) exinf;
150 const char *graph[] = { "|", " +", " *" };
151 char_t c;
152
153 SVC_PERROR(ena_tex());
154 while (1) {
155 syslog(LOG_NOTICE, "task%d is running (%03d). %s",
156 tskno, ++n, graph[tskno-1]);
157 for (i = 0; i < task_loop; i++);
158 c = message[tskno-1];
159 message[tskno-1] = 0;
160 switch (c) {
161 case 'e':
162 syslog(LOG_INFO, "#%d#ext_tsk()", tskno);
163 SVC_PERROR(ext_tsk());
164 assert(0);
165 case 's':
166 syslog(LOG_INFO, "#%d#slp_tsk()", tskno);
167 SVC_PERROR(slp_tsk());
168 break;
169 case 'S':
170 syslog(LOG_INFO, "#%d#tslp_tsk(10000)", tskno);
171 SVC_PERROR(tslp_tsk(10000));
172 break;
173 case 'd':
174 syslog(LOG_INFO, "#%d#dly_tsk(10000)", tskno);
175 SVC_PERROR(dly_tsk(10000));
176 break;
177 case 'y':
178 syslog(LOG_INFO, "#%d#dis_tex()", tskno);
179 SVC_PERROR(dis_tex());
180 break;
181 case 'Y':
182 syslog(LOG_INFO, "#%d#ena_tex()", tskno);
183 SVC_PERROR(ena_tex());
184 break;
185#ifdef CPUEXC1
186 case 'z':
187 syslog(LOG_NOTICE, "#%d#raise CPU exception", tskno);
188 RAISE_CPU_EXCEPTION;
189 break;
190 case 'Z':
191 SVC_PERROR(loc_cpu());
192 syslog(LOG_NOTICE, "#%d#raise CPU exception", tskno);
193 RAISE_CPU_EXCEPTION;
194 SVC_PERROR(unl_cpu());
195 break;
196#endif /* CPUEXC1 */
197 default:
198 break;
199 }
200 }
201}
202
203/*
204 * •Às‚µ‚ÄŽÀs‚³‚ê‚éƒ^ƒXƒN—p‚̃^ƒXƒN—áŠOˆ—ƒ‹[ƒ`ƒ“
205 */
206void tex_routine(TEXPTN texptn, intptr_t exinf)
207{
208 volatile ulong_t i;
209 int_t tskno = (int_t) exinf;
210
211 syslog(LOG_NOTICE, "task%d receives exception 0x%04x.", tskno, texptn);
212 for (i = 0; i < tex_loop; i++);
213
214 if ((texptn & 0x8000U) != 0U) {
215 syslog(LOG_INFO, "#%d#ext_tsk()", tskno);
216 SVC_PERROR(ext_tsk());
217 assert(0);
218 }
219}
220
221/*
222 * CPU—áŠOƒnƒ“ƒhƒ‰
223 */
224#ifdef CPUEXC1
225
226void
227cpuexc_handler(void *p_excinf)
228{
229 ID tskid;
230
231 syslog(LOG_NOTICE, "CPU exception handler (p_excinf = %08p).", p_excinf);
232 if (sns_ctx() != true) {
233 syslog(LOG_WARNING,
234 "sns_ctx() is not true in CPU exception handler.");
235 }
236 if (sns_dpn() != true) {
237 syslog(LOG_WARNING,
238 "sns_dpn() is not true in CPU exception handler.");
239 }
240 syslog(LOG_INFO, "sns_loc = %d sns_dsp = %d sns_tex = %d",
241 sns_loc(), sns_dsp(), sns_tex());
242 syslog(LOG_INFO, "xsns_dpn = %d xsns_xpn = %d",
243 xsns_dpn(p_excinf), xsns_xpn(p_excinf));
244
245 if (xsns_xpn(p_excinf)) {
246 syslog(LOG_NOTICE, "Sample program ends with exception.");
247 SVC_PERROR(ext_ker());
248 assert(0);
249 }
250
251 SVC_PERROR(iget_tid(&tskid));
252 SVC_PERROR(iras_tex(tskid, 0x8000U));
253}
254
255#endif /* CPUEXC1 */
256
257/*
258 * ŽüŠúƒnƒ“ƒhƒ‰
259 *
260 * HIGH_PRIORITYCMID_PRIORITYCLOW_PRIORITY ‚ÌŠe—Dæ“x‚̃ŒƒfƒBƒLƒ…
261[
262 * ‚ð‰ñ“]‚³‚¹‚éD
263 */
264void cyclic_handler(intptr_t exinf)
265{
266 SVC_PERROR(irot_rdq(HIGH_PRIORITY));
267 SVC_PERROR(irot_rdq(MID_PRIORITY));
268 SVC_PERROR(irot_rdq(LOW_PRIORITY));
269}
270
271/*
272 * ƒAƒ‰[ƒ€ƒnƒ“ƒhƒ‰
273 *
274 * HIGH_PRIORITYCMID_PRIORITYCLOW_PRIORITY ‚ÌŠe—Dæ“x‚̃ŒƒfƒBƒLƒ…
275[
276 * ‚ð‰ñ“]‚³‚¹‚éD
277 */
278void alarm_handler(intptr_t exinf)
279{
280 SVC_PERROR(irot_rdq(HIGH_PRIORITY));
281 SVC_PERROR(irot_rdq(MID_PRIORITY));
282 SVC_PERROR(irot_rdq(LOW_PRIORITY));
283}
284
285/*
286 * ƒƒCƒ“ƒ^ƒXƒN
287 */
288void main_task(intptr_t exinf)
289{
290 char_t c;
291 ID tskid = TASK1;
292 int_t tskno = 1;
293 ER_UINT ercd;
294 PRI tskpri;
295#ifndef TASK_LOOP
296 volatile ulong_t i;
297 SYSTIM stime1, stime2;
298#endif /* TASK_LOOP */
299#ifdef TOPPERS_SUPPORT_GET_UTM
300 SYSUTM utime1, utime2;
301#endif /* TOPPERS_SUPPORT_GET_UTM */
302
303 SVC_PERROR(syslog_msk_log(LOG_UPTO(LOG_INFO), LOG_UPTO(LOG_EMERG)));
304 syslog(LOG_NOTICE, "Sample program starts (exinf = %d).", (int_t) exinf);
305
306 /*
307 * ƒVƒŠƒAƒ‹ƒ|[ƒg‚̏‰Šú‰»
308 *
309 * ƒVƒXƒeƒ€ƒƒOƒ^ƒXƒN‚Æ“¯‚¶ƒVƒŠƒAƒ‹ƒ|[ƒg‚ðŽg‚¤ê‡‚ȂǁCƒVƒŠƒAƒ‹
310 * ƒ|[ƒg‚ªƒI[ƒvƒ“Ï‚݂̏ꍇ‚É‚Í‚±‚±‚ÅE_OBJƒGƒ‰[‚ɂȂ邪CŽxá‚Í
311 * ‚È‚¢D
312 */
313 ercd = serial_opn_por(TASK_PORTID);
314 if (ercd < 0 && MERCD(ercd) != E_OBJ) {
315 syslog(LOG_ERROR, "%s (%d) reported by `serial_opn_por'.",
316 itron_strerror(ercd), SERCD(ercd));
317 }
318 SVC_PERROR(serial_ctl_por(TASK_PORTID,
319 (IOCTL_CRLF | IOCTL_FCSND | IOCTL_FCRCV)));
320
321 /*
322 * ƒ‹[ƒv‰ñ”‚̐ݒè
323 *
324 * TASK_LOOP‚ªƒ}ƒNƒ’è‹`‚³‚ê‚Ä‚¢‚éê‡C‘ª’肹‚¸‚ɁCTASK_LOOP‚É’è
325 * ‹`‚³‚ꂽ’l‚ðCƒ^ƒXƒN“à‚ł̃‹[ƒv‰ñ”‚Æ‚·‚éD
326 *
327 * MEASURE_TWICE‚ªƒ}ƒNƒ’è‹`‚³‚ê‚Ä‚¢‚éê‡C1‰ñ–Ú‚Ì‘ª’茋‰Ê‚ðŽÌ‚Ä
328 * ‚āC2‰ñ–Ú‚Ì‘ª’茋‰Ê‚ðŽg‚¤D1‰ñ–Ú‚Ì‘ª’è‚Í’·‚ß‚ÌŽžŠÔ‚ªo‚邽‚߁D
329 */
330#ifdef TASK_LOOP
331 task_loop = TASK_LOOP;
332#else /* TASK_LOOP */
333
334#ifdef MEASURE_TWICE
335 task_loop = LOOP_REF;
336 SVC_PERROR(get_tim(&stime1));
337 for (i = 0; i < task_loop; i++);
338 SVC_PERROR(get_tim(&stime2));
339#endif /* MEASURE_TWICE */
340
341 task_loop = LOOP_REF;
342 SVC_PERROR(get_tim(&stime1));
343 for (i = 0; i < task_loop; i++);
344 SVC_PERROR(get_tim(&stime2));
345 task_loop = LOOP_REF * 400UL / (stime2 - stime1);
346
347#endif /* TASK_LOOP */
348 tex_loop = task_loop / 5;
349
350 /*
351 * ƒ^ƒXƒN‚Ì‹N“®
352 */
353 SVC_PERROR(act_tsk(TASK1));
354 SVC_PERROR(act_tsk(TASK2));
355 SVC_PERROR(act_tsk(TASK3));
356
357 /*
358 * ƒƒCƒ“ƒ‹[ƒv
359 */
360 do {
361 SVC_PERROR(serial_rea_dat(TASK_PORTID, &c, 1));
362 switch (c) {
363 case 'e':
364 case 's':
365 case 'S':
366 case 'd':
367 case 'y':
368 case 'Y':
369 case 'z':
370 case 'Z':
371 message[tskno-1] = c;
372 break;
373 case '1':
374 tskno = 1;
375 tskid = TASK1;
376 break;
377 case '2':
378 tskno = 2;
379 tskid = TASK2;
380 break;
381 case '3':
382 tskno = 3;
383 tskid = TASK3;
384 break;
385 case 'a':
386 syslog(LOG_INFO, "#act_tsk(%d)", tskno);
387 SVC_PERROR(act_tsk(tskid));
388 break;
389 case 'A':
390 syslog(LOG_INFO, "#can_act(%d)", tskno);
391 SVC_PERROR(ercd = can_act(tskid));
392 if (ercd >= 0) {
393 syslog(LOG_NOTICE, "can_act(%d) returns %d", tskno, ercd);
394 }
395 break;
396 case 't':
397 syslog(LOG_INFO, "#ter_tsk(%d)", tskno);
398 SVC_PERROR(ter_tsk(tskid));
399 break;
400 case '>':
401 syslog(LOG_INFO, "#chg_pri(%d, HIGH_PRIORITY)", tskno);
402 SVC_PERROR(chg_pri(tskid, HIGH_PRIORITY));
403 break;
404 case '=':
405 syslog(LOG_INFO, "#chg_pri(%d, MID_PRIORITY)", tskno);
406 SVC_PERROR(chg_pri(tskid, MID_PRIORITY));
407 break;
408 case '<':
409 syslog(LOG_INFO, "#chg_pri(%d, LOW_PRIORITY)", tskno);
410 SVC_PERROR(chg_pri(tskid, LOW_PRIORITY));
411 break;
412 case 'G':
413 syslog(LOG_INFO, "#get_pri(%d, &tskpri)", tskno);
414 SVC_PERROR(ercd = get_pri(tskid, &tskpri));
415 if (ercd >= 0) {
416 syslog(LOG_NOTICE, "priority of task %d is %d", tskno, tskpri);
417 }
418 break;
419 case 'w':
420 syslog(LOG_INFO, "#wup_tsk(%d)", tskno);
421 SVC_PERROR(wup_tsk(tskid));
422 break;
423 case 'W':
424 syslog(LOG_INFO, "#can_wup(%d)", tskno);
425 SVC_PERROR(ercd = can_wup(tskid));
426 if (ercd >= 0) {
427 syslog(LOG_NOTICE, "can_wup(%d) returns %d", tskno, ercd);
428 }
429 break;
430 case 'l':
431 syslog(LOG_INFO, "#rel_wai(%d)", tskno);
432 SVC_PERROR(rel_wai(tskid));
433 break;
434 case 'u':
435 syslog(LOG_INFO, "#sus_tsk(%d)", tskno);
436 SVC_PERROR(sus_tsk(tskid));
437 break;
438 case 'm':
439 syslog(LOG_INFO, "#rsm_tsk(%d)", tskno);
440 SVC_PERROR(rsm_tsk(tskid));
441 break;
442 case 'x':
443 syslog(LOG_INFO, "#ras_tex(%d, 0x0001U)", tskno);
444 SVC_PERROR(ras_tex(tskid, 0x0001U));
445 break;
446 case 'X':
447 syslog(LOG_INFO, "#ras_tex(%d, 0x0002U)", tskno);
448 SVC_PERROR(ras_tex(tskid, 0x0002U));
449 break;
450 case 'r':
451 syslog(LOG_INFO, "#rot_rdq(three priorities)");
452 SVC_PERROR(rot_rdq(HIGH_PRIORITY));
453 SVC_PERROR(rot_rdq(MID_PRIORITY));
454 SVC_PERROR(rot_rdq(LOW_PRIORITY));
455 break;
456 case 'c':
457 syslog(LOG_INFO, "#sta_cyc(1)");
458 SVC_PERROR(sta_cyc(CYCHDR1));
459 break;
460 case 'C':
461 syslog(LOG_INFO, "#stp_cyc(1)");
462 SVC_PERROR(stp_cyc(CYCHDR1));
463 break;
464 case 'b':
465 syslog(LOG_INFO, "#sta_alm(1, 5000)");
466 SVC_PERROR(sta_alm(ALMHDR1, 5000));
467 break;
468 case 'B':
469 syslog(LOG_INFO, "#stp_alm(1)");
470 SVC_PERROR(stp_alm(ALMHDR1));
471 break;
472
473 case 'V':
474#ifdef TOPPERS_SUPPORT_GET_UTM
475 SVC_PERROR(get_utm(&utime1));
476 SVC_PERROR(get_utm(&utime2));
477 syslog(LOG_NOTICE, "utime1 = %ld, utime2 = %ld",
478 (ulong_t) utime1, (ulong_t) utime2);
479#else /* TOPPERS_SUPPORT_GET_UTM */
480 syslog(LOG_NOTICE, "get_utm is not supported.");
481#endif /* TOPPERS_SUPPORT_GET_UTM */
482 break;
483
484 case 'v':
485 SVC_PERROR(syslog_msk_log(LOG_UPTO(LOG_INFO),
486 LOG_UPTO(LOG_EMERG)));
487 break;
488 case 'q':
489 SVC_PERROR(syslog_msk_log(LOG_UPTO(LOG_NOTICE),
490 LOG_UPTO(LOG_EMERG)));
491 break;
492
493#ifdef BIT_KERNEL
494 case ' ':
495 SVC_PERROR(loc_cpu());
496 {
497 extern ER bit_kernel(void);
498
499 SVC_PERROR(ercd = bit_kernel());
500 if (ercd >= 0) {
501 syslog(LOG_NOTICE, "bit_kernel passed.");
502 }
503 }
504 SVC_PERROR(unl_cpu());
505 break;
506#endif /* BIT_KERNEL */
507
508 default:
509 break;
510 }
511 } while (c != '\003' && c != 'Q');
512
513 syslog(LOG_NOTICE, "Sample program ends.");
514 SVC_PERROR(ext_ker());
515 assert(0);
516}
Note: See TracBrowser for help on using the repository browser.