source: asp_ewarm/asp-1.7.0/extension/dcre/sample/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: 15.1 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 1968 2010-11-20 11:00:07Z 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 * '@' : ƒ^ƒXƒN3‚ðacre_tsk‚É‚æ‚萶¬‚µCdef_tex‚É‚æ‚èƒ^ƒXƒN—áŠOˆ—
106 * ƒ‹[ƒ`ƒ“‚ðÝ’è‚·‚éD
107 * '!' : ‘Ώۃ^ƒXƒN‚ðdel_tsk‚É‚æ‚èíœ‚·‚éD
108 * 'V' : get_utm‚Ő«”\•]‰¿—pƒVƒXƒeƒ€Žž‚ð2‰ñ“ǂށD
109 * 'v' : ”­s‚µ‚½ƒVƒXƒeƒ€ƒR[ƒ‹‚ð•\Ž¦‚·‚éiƒfƒtƒHƒ‹ƒgjD
110 * 'q' : ”­s‚µ‚½ƒVƒXƒeƒ€ƒR[ƒ‹‚ð•\Ž¦‚µ‚È‚¢D
111 */
112
113#include <kernel.h>
114#include <t_syslog.h>
115#include <t_stdlib.h>
116#include "syssvc/serial.h"
117#include "syssvc/syslog.h"
118#include "kernel_cfg.h"
119#include "sample1.h"
120
121/*
122 * ƒT[ƒrƒXƒR[ƒ‹‚̃Gƒ‰[‚̃ƒOo—Í
123 */
124Inline void
125svc_perror(const char *file, int_t line, const char *expr, ER ercd)
126{
127 if (ercd < 0) {
128 t_perror(LOG_ERROR, file, line, expr, ercd);
129 }
130}
131
132#define SVC_PERROR(expr) svc_perror(__FILE__, __LINE__, #expr, (expr))
133
134/*
135 * •ÀsŽÀs‚³‚ê‚éƒ^ƒXƒN‚ւ̃ƒbƒZ[ƒW—̈æ
136 */
137char_t message[3];
138
139/*
140 * ƒ‹[ƒv‰ñ”
141 */
142ulong_t task_loop; /* ƒ^ƒXƒN“à‚ł̃‹[ƒv‰ñ” */
143ulong_t tex_loop; /* —áŠOˆ—ƒ‹[ƒ`ƒ““à‚ł̃‹[ƒv‰ñ” */
144
145/*
146 * •ÀsŽÀs‚³‚ê‚éƒ^ƒXƒN
147 */
148void task(intptr_t exinf)
149{
150 volatile ulong_t i;
151 int_t n = 0;
152 int_t tskno = (int_t) exinf;
153 const char *graph[] = { "|", " +", " *" };
154 char_t c;
155
156 SVC_PERROR(ena_tex());
157 while (1) {
158 syslog(LOG_NOTICE, "task%d is running (%03d). %s",
159 tskno, ++n, graph[tskno-1]);
160 for (i = 0; i < task_loop; i++);
161 c = message[tskno-1];
162 message[tskno-1] = 0;
163 switch (c) {
164 case 'e':
165 syslog(LOG_INFO, "#%d#ext_tsk()", tskno);
166 SVC_PERROR(ext_tsk());
167 assert(0);
168 case 's':
169 syslog(LOG_INFO, "#%d#slp_tsk()", tskno);
170 SVC_PERROR(slp_tsk());
171 break;
172 case 'S':
173 syslog(LOG_INFO, "#%d#tslp_tsk(10000)", tskno);
174 SVC_PERROR(tslp_tsk(10000));
175 break;
176 case 'd':
177 syslog(LOG_INFO, "#%d#dly_tsk(10000)", tskno);
178 SVC_PERROR(dly_tsk(10000));
179 break;
180 case 'y':
181 syslog(LOG_INFO, "#%d#dis_tex()", tskno);
182 SVC_PERROR(dis_tex());
183 break;
184 case 'Y':
185 syslog(LOG_INFO, "#%d#ena_tex()", tskno);
186 SVC_PERROR(ena_tex());
187 break;
188#ifdef CPUEXC1
189 case 'z':
190 syslog(LOG_NOTICE, "#%d#raise CPU exception", tskno);
191 RAISE_CPU_EXCEPTION;
192 break;
193 case 'Z':
194 SVC_PERROR(loc_cpu());
195 syslog(LOG_NOTICE, "#%d#raise CPU exception", tskno);
196 RAISE_CPU_EXCEPTION;
197 SVC_PERROR(unl_cpu());
198 break;
199#endif /* CPUEXC1 */
200 default:
201 break;
202 }
203 }
204}
205
206/*
207 * •Às‚µ‚ÄŽÀs‚³‚ê‚éƒ^ƒXƒN—p‚̃^ƒXƒN—áŠOˆ—ƒ‹[ƒ`ƒ“
208 */
209void tex_routine(TEXPTN texptn, intptr_t exinf)
210{
211 volatile ulong_t i;
212 int_t tskno = (int_t) exinf;
213
214 syslog(LOG_NOTICE, "task%d receives exception 0x%04x.", tskno, texptn);
215 for (i = 0; i < tex_loop; i++);
216
217 if ((texptn & 0x8000U) != 0U) {
218 syslog(LOG_INFO, "#%d#ext_tsk()", tskno);
219 SVC_PERROR(ext_tsk());
220 assert(0);
221 }
222}
223
224/*
225 * CPU—áŠOƒnƒ“ƒhƒ‰
226 */
227#ifdef CPUEXC1
228
229void
230cpuexc_handler(void *p_excinf)
231{
232 ID tskid;
233
234 syslog(LOG_NOTICE, "CPU exception handler (p_excinf = %08p).", p_excinf);
235 if (sns_ctx() != true) {
236 syslog(LOG_WARNING,
237 "sns_ctx() is not true in CPU exception handler.");
238 }
239 if (sns_dpn() != true) {
240 syslog(LOG_WARNING,
241 "sns_dpn() is not true in CPU exception handler.");
242 }
243 syslog(LOG_INFO, "sns_loc = %d sns_dsp = %d sns_tex = %d",
244 sns_loc(), sns_dsp(), sns_tex());
245 syslog(LOG_INFO, "xsns_dpn = %d xsns_xpn = %d",
246 xsns_dpn(p_excinf), xsns_xpn(p_excinf));
247
248 if (xsns_xpn(p_excinf)) {
249 syslog(LOG_NOTICE, "Sample program ends with exception.");
250 SVC_PERROR(ext_ker());
251 assert(0);
252 }
253
254 SVC_PERROR(iget_tid(&tskid));
255 SVC_PERROR(iras_tex(tskid, 0x8000U));
256}
257
258#endif /* CPUEXC1 */
259
260/*
261 * ŽüŠúƒnƒ“ƒhƒ‰
262 *
263 * HIGH_PRIORITYCMID_PRIORITYCLOW_PRIORITY ‚ÌŠe—Dæ“x‚̃ŒƒfƒBƒLƒ…
264[
265 * ‚ð‰ñ“]‚³‚¹‚éD
266 */
267void cyclic_handler(intptr_t exinf)
268{
269 SVC_PERROR(irot_rdq(HIGH_PRIORITY));
270 SVC_PERROR(irot_rdq(MID_PRIORITY));
271 SVC_PERROR(irot_rdq(LOW_PRIORITY));
272}
273
274/*
275 * ƒAƒ‰[ƒ€ƒnƒ“ƒhƒ‰
276 *
277 * HIGH_PRIORITYCMID_PRIORITYCLOW_PRIORITY ‚ÌŠe—Dæ“x‚̃ŒƒfƒBƒLƒ…
278[
279 * ‚ð‰ñ“]‚³‚¹‚éD
280 */
281void alarm_handler(intptr_t exinf)
282{
283 SVC_PERROR(irot_rdq(HIGH_PRIORITY));
284 SVC_PERROR(irot_rdq(MID_PRIORITY));
285 SVC_PERROR(irot_rdq(LOW_PRIORITY));
286}
287
288/*
289 * ƒƒCƒ“ƒ^ƒXƒN
290 */
291void main_task(intptr_t exinf)
292{
293 char_t c;
294 ID tskid = TASK1;
295 int_t tskno = 1;
296 ER_UINT ercd;
297 PRI tskpri;
298#ifndef TASK_LOOP
299 volatile ulong_t i;
300 SYSTIM stime1, stime2;
301#endif /* TASK_LOOP */
302#ifdef TOPPERS_SUPPORT_GET_UTM
303 SYSUTM utime1, utime2;
304#endif /* TOPPERS_SUPPORT_GET_UTM */
305 T_CTSK ctsk;
306 T_DTEX dtex;
307 ID TASK3 = -1;
308
309 SVC_PERROR(syslog_msk_log(LOG_UPTO(LOG_INFO), LOG_UPTO(LOG_EMERG)));
310 syslog(LOG_NOTICE, "Sample program starts (exinf = %d).", (int_t) exinf);
311
312 /*
313 * ƒVƒŠƒAƒ‹ƒ|[ƒg‚̏‰Šú‰»
314 *
315 * ƒVƒXƒeƒ€ƒƒOƒ^ƒXƒN‚Æ“¯‚¶ƒVƒŠƒAƒ‹ƒ|[ƒg‚ðŽg‚¤ê‡‚ȂǁCƒVƒŠƒAƒ‹
316 * ƒ|[ƒg‚ªƒI[ƒvƒ“Ï‚݂̏ꍇ‚É‚Í‚±‚±‚ÅE_OBJƒGƒ‰[‚ɂȂ邪CŽxá‚Í
317 * ‚È‚¢D
318 */
319 ercd = serial_opn_por(TASK_PORTID);
320 if (ercd < 0 && MERCD(ercd) != E_OBJ) {
321 syslog(LOG_ERROR, "%s (%d) reported by `serial_opn_por'.",
322 itron_strerror(ercd), SERCD(ercd));
323 }
324 SVC_PERROR(serial_ctl_por(TASK_PORTID,
325 (IOCTL_CRLF | IOCTL_FCSND | IOCTL_FCRCV)));
326
327 /*
328 * ƒ‹[ƒv‰ñ”‚̐ݒè
329 *
330 * TASK_LOOP‚ªƒ}ƒNƒ’è‹`‚³‚ê‚Ä‚¢‚éê‡C‘ª’肹‚¸‚ɁCTASK_LOOP‚É’è
331 * ‹`‚³‚ꂽ’l‚ðCƒ^ƒXƒN“à‚ł̃‹[ƒv‰ñ”‚Æ‚·‚éD
332 *
333 * MEASURE_TWICE‚ªƒ}ƒNƒ’è‹`‚³‚ê‚Ä‚¢‚éê‡C1‰ñ–Ú‚Ì‘ª’茋‰Ê‚ðŽÌ‚Ä
334 * ‚āC2‰ñ–Ú‚Ì‘ª’茋‰Ê‚ðŽg‚¤D1‰ñ–Ú‚Ì‘ª’è‚Í’·‚ß‚ÌŽžŠÔ‚ªo‚邽‚߁D
335 */
336#ifdef TASK_LOOP
337 task_loop = TASK_LOOP;
338#else /* TASK_LOOP */
339
340#ifdef MEASURE_TWICE
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#endif /* MEASURE_TWICE */
346
347 task_loop = LOOP_REF;
348 SVC_PERROR(get_tim(&stime1));
349 for (i = 0; i < task_loop; i++);
350 SVC_PERROR(get_tim(&stime2));
351 task_loop = LOOP_REF * 400UL / (stime2 - stime1);
352
353#endif /* TASK_LOOP */
354 tex_loop = task_loop / 5;
355
356 /*
357 * ƒ^ƒXƒN‚Ì‹N“®
358 */
359 SVC_PERROR(act_tsk(TASK1));
360 SVC_PERROR(act_tsk(TASK2));
361
362 /*
363 * ƒƒCƒ“ƒ‹[ƒv
364 */
365 do {
366 SVC_PERROR(serial_rea_dat(TASK_PORTID, &c, 1));
367 switch (c) {
368 case 'e':
369 case 's':
370 case 'S':
371 case 'd':
372 case 'y':
373 case 'Y':
374 case 'z':
375 case 'Z':
376 message[tskno-1] = c;
377 break;
378 case '1':
379 tskno = 1;
380 tskid = TASK1;
381 break;
382 case '2':
383 tskno = 2;
384 tskid = TASK2;
385 break;
386 case '3':
387 tskno = 3;
388 tskid = TASK3;
389 break;
390 case 'a':
391 syslog(LOG_INFO, "#act_tsk(%d)", tskno);
392 SVC_PERROR(act_tsk(tskid));
393 break;
394 case 'A':
395 syslog(LOG_INFO, "#can_act(%d)", tskno);
396 SVC_PERROR(ercd = can_act(tskid));
397 if (ercd >= 0) {
398 syslog(LOG_NOTICE, "can_act(%d) returns %d", tskno, ercd);
399 }
400 break;
401 case 't':
402 syslog(LOG_INFO, "#ter_tsk(%d)", tskno);
403 SVC_PERROR(ter_tsk(tskid));
404 break;
405 case '>':
406 syslog(LOG_INFO, "#chg_pri(%d, HIGH_PRIORITY)", tskno);
407 SVC_PERROR(chg_pri(tskid, HIGH_PRIORITY));
408 break;
409 case '=':
410 syslog(LOG_INFO, "#chg_pri(%d, MID_PRIORITY)", tskno);
411 SVC_PERROR(chg_pri(tskid, MID_PRIORITY));
412 break;
413 case '<':
414 syslog(LOG_INFO, "#chg_pri(%d, LOW_PRIORITY)", tskno);
415 SVC_PERROR(chg_pri(tskid, LOW_PRIORITY));
416 break;
417 case 'G':
418 syslog(LOG_INFO, "#get_pri(%d, &tskpri)", tskno);
419 SVC_PERROR(ercd = get_pri(tskid, &tskpri));
420 if (ercd >= 0) {
421 syslog(LOG_NOTICE, "priority of task %d is %d", tskno, tskpri);
422 }
423 break;
424 case 'w':
425 syslog(LOG_INFO, "#wup_tsk(%d)", tskno);
426 SVC_PERROR(wup_tsk(tskid));
427 break;
428 case 'W':
429 syslog(LOG_INFO, "#can_wup(%d)", tskno);
430 SVC_PERROR(ercd = can_wup(tskid));
431 if (ercd >= 0) {
432 syslog(LOG_NOTICE, "can_wup(%d) returns %d", tskno, ercd);
433 }
434 break;
435 case 'l':
436 syslog(LOG_INFO, "#rel_wai(%d)", tskno);
437 SVC_PERROR(rel_wai(tskid));
438 break;
439 case 'u':
440 syslog(LOG_INFO, "#sus_tsk(%d)", tskno);
441 SVC_PERROR(sus_tsk(tskid));
442 break;
443 case 'm':
444 syslog(LOG_INFO, "#rsm_tsk(%d)", tskno);
445 SVC_PERROR(rsm_tsk(tskid));
446 break;
447 case 'x':
448 syslog(LOG_INFO, "#ras_tex(%d, 0x0001U)", tskno);
449 SVC_PERROR(ras_tex(tskid, 0x0001U));
450 break;
451 case 'X':
452 syslog(LOG_INFO, "#ras_tex(%d, 0x0002U)", tskno);
453 SVC_PERROR(ras_tex(tskid, 0x0002U));
454 break;
455 case 'r':
456 syslog(LOG_INFO, "#rot_rdq(three priorities)");
457 SVC_PERROR(rot_rdq(HIGH_PRIORITY));
458 SVC_PERROR(rot_rdq(MID_PRIORITY));
459 SVC_PERROR(rot_rdq(LOW_PRIORITY));
460 break;
461 case 'c':
462 syslog(LOG_INFO, "#sta_cyc(1)");
463 SVC_PERROR(sta_cyc(CYCHDR1));
464 break;
465 case 'C':
466 syslog(LOG_INFO, "#stp_cyc(1)");
467 SVC_PERROR(stp_cyc(CYCHDR1));
468 break;
469 case 'b':
470 syslog(LOG_INFO, "#sta_alm(1, 5000)");
471 SVC_PERROR(sta_alm(ALMHDR1, 5000));
472 break;
473 case 'B':
474 syslog(LOG_INFO, "#stp_alm(1)");
475 SVC_PERROR(stp_alm(ALMHDR1));
476 break;
477 case '@':
478 ctsk.tskatr = TA_NULL;
479 ctsk.exinf = 3;
480 ctsk.task = task;
481 ctsk.itskpri = MID_PRIORITY;
482 ctsk.stksz = STACK_SIZE;
483 ctsk.stk = NULL;
484 SVC_PERROR(TASK3 = acre_tsk(&ctsk));
485
486 dtex.texatr = TA_NULL;
487 dtex.texrtn = tex_routine;
488 SVC_PERROR(def_tex(TASK3, &dtex));
489
490 syslog(LOG_NOTICE, "task3 is created with tskid = %d.",
491 (int_t) TASK3);
492 break;
493 case '!':
494 syslog(LOG_INFO, "#del_tsk(%d)", tskno);
495 SVC_PERROR(del_tsk(tskid));
496 break;
497
498 case 'V':
499#ifdef TOPPERS_SUPPORT_GET_UTM
500 SVC_PERROR(get_utm(&utime1));
501 SVC_PERROR(get_utm(&utime2));
502 syslog(LOG_NOTICE, "utime1 = %ld, utime2 = %ld",
503 (ulong_t) utime1, (ulong_t) utime2);
504#else /* TOPPERS_SUPPORT_GET_UTM */
505 syslog(LOG_NOTICE, "get_utm is not supported.");
506#endif /* TOPPERS_SUPPORT_GET_UTM */
507 break;
508
509 case 'v':
510 SVC_PERROR(syslog_msk_log(LOG_UPTO(LOG_INFO),
511 LOG_UPTO(LOG_EMERG)));
512 break;
513 case 'q':
514 SVC_PERROR(syslog_msk_log(LOG_UPTO(LOG_NOTICE),
515 LOG_UPTO(LOG_EMERG)));
516 break;
517
518#ifdef BIT_KERNEL
519 case ' ':
520 SVC_PERROR(loc_cpu());
521 {
522 extern ER bit_kernel(void);
523
524 SVC_PERROR(ercd = bit_kernel());
525 if (ercd >= 0) {
526 syslog(LOG_NOTICE, "bit_kernel passed.");
527 }
528 }
529 SVC_PERROR(unl_cpu());
530 break;
531#endif /* BIT_KERNEL */
532
533 default:
534 break;
535 }
536 } while (c != '\003' && c != 'Q');
537
538 syslog(LOG_NOTICE, "Sample program ends.");
539 SVC_PERROR(ext_ker());
540 assert(0);
541}
Note: See TracBrowser for help on using the repository browser.