source: UsbWattMeter/trunk/asp_dcre/arch/logtrace/trace_config.c@ 167

Last change on this file since 167 was 167, checked in by coas-nagasima, 8 years ago

MIMEにSJISを設定

  • Property svn:eol-style set to native
  • Property svn:keywords set to Id
  • Property svn:mime-type set to text/x-csrc; charset=SHIFT_JIS
File size: 5.2 KB
RevLine 
[164]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 * 上記著作権者は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ
11 * ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
12 * 変・再配布(以下,利用と呼ぶ)することを無償で許諾する.
13 * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
14 * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー
15 * スコード中に含まれていること.
16 * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
17 * 用できる形で再配布する場合には,再配布に伴うドキュメント(利用
18 * 者マニュアルなど)に,上記の著作権表示,この利用条件および下記
19 * の無保証規定を掲載すること.
20 * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
21 * 用できない形で再配布する場合には,次のいずれかの条件を満たすこ
22 * と.
23 * (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
24 * 作権表示,この利用条件および下記の無保証規定を掲載すること.
25 * (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
26 * 報告すること.
27 * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
28 * 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
29 * また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
30 * 由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを
31 * 免責すること.
32 *
33 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お
34 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
35 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
36 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
37 * の責任を負わない.
38 *
39 * $Id: trace_config.c 167 2016-03-08 11:37:45Z coas-nagasima $
40 */
41
42/*
43 * トレースログ機能
44 */
45
46#include "kernel_impl.h"
47#include "task.h"
48#include "time_event.h"
49#include <sil.h>
50
51/*
52 * トレースログバッファとそれにアクセスするためのポインタ
53 */
54SYSLOG trace_buffer[TCNT_TRACE_BUFFER]; /* トレースログバッファ */
55uint_t trace_count; /* トレースログバッファ中のログの数 */
56uint_t trace_head; /* 先頭のトレースログの格納位置 */
57uint_t trace_tail; /* 次のトレースログの格納位置 */
58MODE trace_mode; /* トレースモード */
59
60/*
61 * トレースログ機能の初期化
62 */
63void
64trace_initialize(intptr_t exinf)
65{
66 MODE mode = ((MODE) exinf);
67
68 trace_count = 0U;
69 trace_head = 0U;
70 trace_tail = 0U;
71 trace_mode = mode;
72}
73
74/*
75 * トレースログの開始
76 */
77ER
78trace_sta_log(MODE mode)
79{
80 if ((mode & TRACE_CLEAR) != 0U) {
81 trace_count = 0U;
82 trace_head = 0U;
83 trace_tail = 0U;
84 }
85 trace_mode = mode;
86 return(E_OK);
87}
88
89/*
90 * トレースログの書込み
91 */
92ER
93trace_wri_log(TRACE *p_trace)
94{
95 SIL_PRE_LOC;
96
97 if (trace_mode != TRACE_STOP) {
98 SIL_LOC_INT();
99
100 /*
101 * トレース時刻の設定
102 *
103 * LOG_WRI_LOG_ENTERから呼ばれた場合にp_trace->logtimを書き換
104 * えてしまうのは気持ちが悪いが,wri_logの方で上書きするため問
105 * 題はない.
106 */
107 p_trace->logtim = TRACE_GET_TIM();
108
109 /*
110 * トレースバッファに記録
111 */
112 trace_buffer[trace_tail] = *p_trace;
113 trace_tail++;
114 if (trace_tail >= TCNT_TRACE_BUFFER) {
115 trace_tail = 0U;
116 }
117 if (trace_count < TCNT_TRACE_BUFFER) {
118 trace_count++;
119 if (trace_count >= TCNT_TRACE_BUFFER
120 && (trace_mode & TRACE_AUTOSTOP) != 0U) {
121 trace_mode = TRACE_STOP;
122 }
123 }
124 else {
125 trace_head = trace_tail;
126 }
127
128 SIL_UNL_INT();
129 }
130 return(E_OK);
131}
132
133/*
134 * トレースログの読出し
135 */
136ER
137trace_rea_log(TRACE *p_trace)
138{
139 ER_UINT ercd;
140 SIL_PRE_LOC;
141
142 SIL_LOC_INT();
143
144 /*
145 * トレースログバッファからの取出し
146 */
147 if (trace_count > 0U) {
148 *p_trace = trace_buffer[trace_head];
149 trace_count--;
150 trace_head++;
151 if (trace_head >= TCNT_TRACE_BUFFER) {
152 trace_head = 0U;
153 }
154 ercd = E_OK;
155 }
156 else {
157 ercd = E_OBJ;
158 }
159
160 SIL_UNL_INT();
161 return(ercd);
162}
163
164/*
165 * トレースログを出力するためのライブラリ関数
166 */
167
168void
169trace_write_0(uint_t type)
170{
171 TRACE trace;
172
173 trace.logtype = type;
174 (void) trace_wri_log(&trace);
175}
176
177void
178trace_write_1(uint_t type, intptr_t arg1)
179{
180 TRACE trace;
181
182 trace.logtype = type;
183 trace.loginfo[0] = arg1;
184 (void) trace_wri_log(&trace);
185}
186
187void
188trace_write_2(uint_t type, intptr_t arg1, intptr_t arg2)
189{
190 TRACE trace;
191
192 trace.logtype = type;
193 trace.loginfo[0] = arg1;
194 trace.loginfo[1] = arg2;
195 (void) trace_wri_log(&trace);
196}
197
198void
199trace_write_3(uint_t type, intptr_t arg1, intptr_t arg2, intptr_t arg3)
200{
201 TRACE trace;
202
203 trace.logtype = type;
204 trace.loginfo[0] = arg1;
205 trace.loginfo[1] = arg2;
206 trace.loginfo[2] = arg3;
207 (void) trace_wri_log(&trace);
208}
209
210/*
211 * アセンブリ言語で記述されるコードからトレースログを出力するための関
212 * 数
213 */
214
215void
216log_dsp_enter(TCB *p_tcb)
217{
218 trace_1(LOG_TYPE_DSP|LOG_ENTER, p_tcb);
219}
220
221void
222log_dsp_leave(TCB *p_tcb)
223{
224 trace_1(LOG_TYPE_DSP|LOG_LEAVE, p_tcb);
225}
226
227void
228log_inh_enter(INHNO inhno)
229{
230 trace_1(LOG_TYPE_INH|LOG_ENTER, inhno);
231}
232
233void
234log_inh_leave(INHNO inhno)
235{
236 trace_1(LOG_TYPE_INH|LOG_LEAVE, inhno);
237}
238
239void
240log_exc_enter(EXCNO excno)
241{
242 trace_1(LOG_TYPE_EXC|LOG_ENTER, excno);
243}
244
245void
246log_exc_leave(EXCNO excno)
247{
248 trace_1(LOG_TYPE_EXC|LOG_LEAVE, excno);
249}
Note: See TracBrowser for help on using the repository browser.