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