source: rtos_arduino/trunk/asp_1.9.2/arch/logtrace/trace_config.c@ 136

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

ライブラリとOS及びベーシックなサンプルの追加.

File size: 6.2 KB
Line 
1/*
2 * TOPPERS Software
3 * Toyohashi Open Platform for Embedded Real-Time Systems
4 *
5 * Copyright (C) 2000-2003 by Embedded and Real-Time Systems Laboratory
6 * Toyohashi Univ. of Technology, JAPAN
7 * Copyright (C) 2005-2011 by Embedded and Real-Time Systems Laboratory
8 * Graduate School of Information Science, Nagoya Univ., JAPAN
9 *
10 * 上記著作権者
11は,以下の(1)~(4)の条件を満たす場合に限り,本ソフトウェ
12 * ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
13 * 変・再é…
14å¸ƒï¼ˆä»¥ä¸‹ï¼Œåˆ©ç”¨ã¨å‘¼ã¶ï¼‰ã™ã‚‹ã“とを無償で許諾する.
15 * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
16 * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー
17 * スコード中に含まれていること.
18 * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
19 * 用できる形で再é…
20å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œå†é…
21å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨
22 * 者
23マニュアルなど)に,上記の著作権表示,この利用条件および下記
24 * の無保証規定を掲載すること.
25 * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
26 * 用できない形で再é…
27å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œæ¬¡ã®ã„ずれかの条件を満たすこ
28 * と.
29 * (a) 再é…
30å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨è€…
31マニュアルなど)に,上記の著
32 * 作権表示,この利用条件および下記の無保証規定を掲載すること.
33 * (b) 再é…
34å¸ƒã®å½¢æ…
35‹ã‚’,別に定める方法によって,TOPPERSプロジェクトに
36 * 報告すること.
37 * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
38 * 害からも,上記著作権者
39およびTOPPERSプロジェクトをå…
40è²¬ã™ã‚‹ã“と.
41 * また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
42 * 由に基づく請求からも,上記著作権者
43およびTOPPERSプロジェクトを
44 * å…
45è²¬ã™ã‚‹ã“と.
46 *
47 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者
48お
49 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
50 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
51 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
52 * の責任を負わない.
53 *
54 * $Id: trace_config.c 2420 2012-11-11 06:34:11Z ertl-hiro $
55 */
56
57/*
58 * トレースログ機能
59 */
60
61#include "kernel_impl.h"
62#include "task.h"
63#include "time_event.h"
64#include <sil.h>
65
66/*
67 * トレースログバッファとそれにアクセスするためのポインタ
68 */
69SYSLOG trace_buffer[TCNT_TRACE_BUFFER]; /* トレースログバッファ */
70uint_t trace_count; /* トレースログバッファ中のログの数 */
71uint_t trace_head; /* å…
72ˆé ­ã®ãƒˆãƒ¬ãƒ¼ã‚¹ãƒ­ã‚°ã®æ ¼ç´ä½ç½® */
73uint_t trace_tail; /* 次のトレースログの格納位置 */
74MODE trace_mode; /* トレースモード */
75
76/*
77 * トレースログ機能の初期化
78 */
79void
80trace_initialize(intptr_t exinf)
81{
82 MODE mode = ((MODE) exinf);
83
84 trace_count = 0U;
85 trace_head = 0U;
86 trace_tail = 0U;
87 trace_mode = mode;
88}
89
90/*
91 * トレースログの開始
92 */
93ER
94trace_sta_log(MODE mode)
95{
96 if ((mode & TRACE_CLEAR) != 0U) {
97 trace_count = 0U;
98 trace_head = 0U;
99 trace_tail = 0U;
100 }
101 trace_mode = mode;
102 return(E_OK);
103}
104
105/*
106 * トレースログの書込み
107 */
108ER
109trace_wri_log(TRACE *p_trace)
110{
111 SIL_PRE_LOC;
112
113 if (trace_mode != TRACE_STOP) {
114 SIL_LOC_INT();
115
116 /*
117 * トレース時刻の設定
118 *
119 * LOG_WRI_LOG_ENTERから呼ばれた場合にp_trace->logtimを書き換
120 * えてしまうのは気持ちが悪いが,wri_logの方で上書きするため問
121 * 題はない.
122 */
123 p_trace->logtim = TRACE_GET_TIM();
124
125 /*
126 * トレースバッファに記録
127 */
128 trace_buffer[trace_tail] = *p_trace;
129 trace_tail++;
130 if (trace_tail >= TCNT_TRACE_BUFFER) {
131 trace_tail = 0U;
132 }
133 if (trace_count < TCNT_TRACE_BUFFER) {
134 trace_count++;
135 if (trace_count >= TCNT_TRACE_BUFFER
136 && (trace_mode & TRACE_AUTOSTOP) != 0U) {
137 trace_mode = TRACE_STOP;
138 }
139 }
140 else {
141 trace_head = trace_tail;
142 }
143
144 SIL_UNL_INT();
145 }
146 return(E_OK);
147}
148
149/*
150 * トレースログの読出し
151 */
152ER
153trace_rea_log(TRACE *p_trace)
154{
155 ER_UINT ercd;
156 SIL_PRE_LOC;
157
158 SIL_LOC_INT();
159
160 /*
161 * トレースログバッファからの取出し
162 */
163 if (trace_count > 0U) {
164 *p_trace = trace_buffer[trace_head];
165 trace_count--;
166 trace_head++;
167 if (trace_head >= TCNT_TRACE_BUFFER) {
168 trace_head = 0U;
169 }
170 ercd = E_OK;
171 }
172 else {
173 ercd = E_OBJ;
174 }
175
176 SIL_UNL_INT();
177 return(ercd);
178}
179
180/*
181 * トレースログを出力するためのライブラリ関数
182 */
183
184void
185trace_write_0(uint_t type)
186{
187 TRACE trace;
188
189 trace.logtype = type;
190 (void) trace_wri_log(&trace);
191}
192
193void
194trace_write_1(uint_t type, intptr_t arg1)
195{
196 TRACE trace;
197
198 trace.logtype = type;
199 trace.loginfo[0] = arg1;
200 (void) trace_wri_log(&trace);
201}
202
203void
204trace_write_2(uint_t type, intptr_t arg1, intptr_t arg2)
205{
206 TRACE trace;
207
208 trace.logtype = type;
209 trace.loginfo[0] = arg1;
210 trace.loginfo[1] = arg2;
211 (void) trace_wri_log(&trace);
212}
213
214void
215trace_write_3(uint_t type, intptr_t arg1, intptr_t arg2, intptr_t arg3)
216{
217 TRACE trace;
218
219 trace.logtype = type;
220 trace.loginfo[0] = arg1;
221 trace.loginfo[1] = arg2;
222 trace.loginfo[2] = arg3;
223 (void) trace_wri_log(&trace);
224}
225
226/*
227 * アセンブリ言語で記述されるコードからトレースログを出力するための関
228 * 数
229 */
230
231void
232log_dsp_enter(TCB *p_tcb)
233{
234 trace_1(LOG_TYPE_DSP|LOG_ENTER, p_tcb);
235}
236
237void
238log_dsp_leave(TCB *p_tcb)
239{
240 trace_1(LOG_TYPE_DSP|LOG_LEAVE, p_tcb);
241}
242
243void
244log_inh_enter(INHNO inhno)
245{
246 trace_1(LOG_TYPE_INH|LOG_ENTER, inhno);
247}
248
249void
250log_inh_leave(INHNO inhno)
251{
252 trace_1(LOG_TYPE_INH|LOG_LEAVE, inhno);
253}
254
255void
256log_exc_enter(EXCNO excno)
257{
258 trace_1(LOG_TYPE_EXC|LOG_ENTER, excno);
259}
260
261void
262log_exc_leave(EXCNO excno)
263{
264 trace_1(LOG_TYPE_EXC|LOG_LEAVE, excno);
265}
Note: See TracBrowser for help on using the repository browser.