source: atk2-sc3_fl850f1l/arch/logtrace/trace_config.c@ 117

Last change on this file since 117 was 117, checked in by ertl-ishikawa, 9 years ago

ATK2-SC3 1.3.2 FL850F1L(RH850F1L)依存部(GCC/GHS/CCRH)を追加

File size: 6.9 KB
Line 
1/*
2 * TOPPERS ATK2
3 * Toyohashi Open Platform for Embedded Real-Time Systems
4 * Automotive Kernel Version 2
5 *
6 * Copyright (C) 2000-2003 by Embedded and Real-Time Systems Laboratory
7 * Toyohashi Univ. of Technology, JAPAN
8 * Copyright (C) 2005-2014 by Center for Embedded Computing Systems
9 * Graduate School of Information Science, Nagoya Univ., JAPAN
10 * Copyright (C) 2011-2014 by FUJI SOFT INCORPORATED, JAPAN
11 * Copyright (C) 2011-2013 by Spansion LLC, USA
12 * Copyright (C) 2011-2013 by NEC Communication Systems, Ltd., JAPAN
13 * Copyright (C) 2011-2014 by Panasonic Advanced Technology Development Co., Ltd., JAPAN
14 * Copyright (C) 2011-2014 by Renesas Electronics Corporation, JAPAN
15 * Copyright (C) 2011-2014 by Sunny Giken Inc., JAPAN
16 * Copyright (C) 2011-2014 by TOSHIBA CORPORATION, JAPAN
17 * Copyright (C) 2011-2014 by Witz Corporation, JAPAN
18 *
19 * 上記著作権者は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ
20 * ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
21 * 変・再配布(以下,利用と呼ぶ)することを無償で許諾する.
22 * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
23 * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー
24 * スコード中に含まれていること.
25 * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
26 * 用できる形で再配布する場合には,再配布に伴うドキュメント(利用
27 * 者マニュアルなど)に,上記の著作権表示,この利用条件および下記
28 * の無保証規定を掲載すること.
29 * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
30 * 用できない形で再配布する場合には,次のいずれかの条件を満たすこ
31 * と.
32 * (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
33 * 作権表示,この利用条件および下記の無保証規定を掲載すること.
34 * (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
35 * 報告すること.
36 * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
37 * 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
38 * また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
39 * 由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを
40 * 免責すること.
41 *
42 * 本ソフトウェアは,AUTOSAR(AUTomotive Open System ARchitecture)仕
43 * 様に基づいている.上記の許諾は,AUTOSARの知的財産権を許諾するもので
44 * はない.AUTOSARは,AUTOSAR仕様に基づいたソフトウェアを商用目的で利
45 * 用する者に対して,AUTOSARパートナーになることを求めている.
46 *
47 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お
48 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
49 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
50 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
51 * の責任を負わない.
52 *
53 * $Id: trace_config.c 115 2014-12-10 01:33:17Z t_ishikawa $
54 */
55
56/*
57 * トレースログ機能
58 */
59
60#include "kernel_impl.h"
61#include "task.h"
62
63#include "target_timer.h"
64
65/*
66 * 本来はtrace_config.hにプロトタイプ宣言を置くべきだが,TCBが
67 * 定義される前なので,コンパイルが通らないためここに置く
68 */
69extern void log_dsp_enter(const TCB *p_tcb);
70extern void log_dsp_leave(const TCB *p_tcb);
71
72/*
73 * 内部関数プロトタイプ宣言
74 */
75static StatusType trace_wri_log(TRACE *p_trace);
76
77/*
78 * トレースログバッファとそれにアクセスするためのポインタ
79 */
80static TRACE trace_buffer[TCNT_TRACE_BUFFER]; /* トレースログバッファ */
81static uint32 trace_count; /* トレースログバッファ中のログの数 */
82static uint32 trace_head; /* 先頭のトレースログの格納位置 */
83static uint32 trace_tail; /* 次のトレースログの格納位置 */
84static TraceModeType trace_mode = TRACE_AUTOSTOP; /* トレースモード */
85
86/*
87 * トレースログ機能の初期化
88 */
89void
90trace_initialize(uintptr exinf)
91{
92 TraceModeType mode = ((TraceModeType) exinf);
93
94 trace_count = 0U;
95 trace_head = 0U;
96 trace_tail = 0U;
97 trace_mode = mode;
98}
99
100/*
101 * トレースログの開始
102 */
103StatusType
104trace_sta_log(TraceModeType mode)
105{
106 if ((mode & TRACE_CLEAR) != 0U) {
107 trace_count = 0U;
108 trace_head = 0U;
109 trace_tail = 0U;
110 }
111 trace_mode = mode;
112 return(E_OK);
113}
114
115/*
116 * トレースログの書込み
117 */
118static StatusType
119trace_wri_log(TRACE *p_trace)
120{
121 SIL_PRE_LOC;
122
123 if (trace_mode != TRACE_STOP) {
124 SIL_LOC_INT();
125
126 /*
127 * トレース時刻の設定
128 *
129 * LOG_WRI_LOG_ENTERから呼ばれた場合にp_trace->logtimを書き換
130 * えてしまうのは気持ちが悪いが,wri_logの方で上書きするため問
131 * 題はない
132 */
133 p_trace->logtim = GET_UTIM();
134
135 /*
136 * トレースバッファに記録
137 */
138 trace_buffer[trace_tail] = *p_trace;
139 trace_tail++;
140 if (trace_tail >= TCNT_TRACE_BUFFER) {
141 trace_tail = 0U;
142 }
143 if (trace_count < TCNT_TRACE_BUFFER) {
144 trace_count++;
145 if ((trace_count >= TCNT_TRACE_BUFFER)
146 && ((trace_mode & TRACE_AUTOSTOP) != 0U)) {
147 trace_mode = TRACE_STOP;
148 }
149 }
150 else {
151 trace_head = trace_tail;
152 }
153
154 SIL_UNL_INT();
155 }
156 return(E_OK);
157}
158
159/*
160 * トレースログの読出し
161 */
162StatusType
163trace_rea_log(TRACE *p_trace)
164{
165 StatusType ercd;
166 SIL_PRE_LOC;
167
168 SIL_LOC_INT();
169
170 /*
171 * トレースログバッファからの取出し
172 */
173 if (trace_count > 0U) {
174 *p_trace = trace_buffer[trace_head];
175 trace_count--;
176 trace_head++;
177 if (trace_head >= TCNT_TRACE_BUFFER) {
178 trace_head = 0U;
179 }
180 ercd = E_OK;
181 }
182 else {
183 ercd = E_NOT_OK;
184 }
185
186 SIL_UNL_INT();
187 return(ercd);
188}
189
190/*
191 * トレースログを出力するためのライブラリ関数
192 */
193
194void
195trace_write_0(uint32 type)
196{
197 TRACE trace;
198
199 trace.logtype = type;
200 (void) trace_wri_log(&trace);
201}
202
203void
204trace_write_1(uint32 type, const uintptr arg1)
205{
206 TRACE trace;
207
208 trace.logtype = type;
209 trace.loginfo[0] = arg1;
210 (void) trace_wri_log(&trace);
211}
212
213void
214trace_write_2(uint32 type, uintptr arg1, uintptr arg2)
215{
216 TRACE trace;
217
218 trace.logtype = type;
219 trace.loginfo[0] = arg1;
220 trace.loginfo[1] = arg2;
221 (void) trace_wri_log(&trace);
222}
223
224void
225trace_write_3(uint32 type, uintptr arg1, uintptr arg2, uintptr arg3)
226{
227 TRACE trace;
228
229 trace.logtype = type;
230 trace.loginfo[0] = arg1;
231 trace.loginfo[1] = arg2;
232 trace.loginfo[2] = arg3;
233 (void) trace_wri_log(&trace);
234}
235
236void
237trace_write_4(uint32 type, uintptr arg1, uintptr arg2, uintptr arg3,
238 uintptr arg4)
239{
240 TRACE trace;
241
242 trace.logtype = type;
243 trace.loginfo[0] = arg1;
244 trace.loginfo[1] = arg2;
245 trace.loginfo[2] = arg3;
246 trace.loginfo[3] = arg4;
247 (void) trace_wri_log(&trace);
248}
249
250void
251trace_write_5(uint32 type, uintptr arg1, uintptr arg2, uintptr arg3,
252 uintptr arg4, uintptr arg5)
253{
254 TRACE trace;
255
256 trace.logtype = type;
257 trace.loginfo[0] = arg1;
258 trace.loginfo[1] = arg2;
259 trace.loginfo[2] = arg3;
260 trace.loginfo[3] = arg4;
261 trace.loginfo[4] = arg5;
262 (void) trace_wri_log(&trace);
263}
264
265/*
266 * アセンブリ言語で記述されるコードからトレースログを出力するための関
267 * 数
268 */
269void
270log_dsp_enter(const TCB *p_tcb)
271{
272 trace_1(LOG_TYPE_DSP | LOG_ENTER, (const uintptr) p_tcb);
273}
274
275void
276log_dsp_leave(const TCB *p_tcb)
277{
278 trace_1(LOG_TYPE_DSP | LOG_LEAVE, (const uintptr) p_tcb);
279}
Note: See TracBrowser for help on using the repository browser.