osCreateLog.htm
2.2 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
<HTML>
<HEAD>
<TITLE>HTML 文書</TITLE>
<META NAME="GENERATOR" CONTENT="Internet Assistant for Microsoft Word 2.0j">
</HEAD>
<BODY>
<P>
<B><FONT FACE="Arial">osCreateLog(3P) <BR>
</FONT></B>
<P>
<B>関数名<BR>
</B>
<P>
osCreateLog, osLogEvent, osFlushLog
<P>
→ ログをとるためのユーティリティ<BR>
<P>
<B>構文<BR>
</B>
<P>
#include <ultra64.h>
<P>
<B>void osCreateLog(OSLog *log, u32 *base, s32 len);</B>
<P>
void osLogEvent(OSLog *log, s16 code, s16 numArgs,
....);
<P>
void osFlushLog(OSLog *log); <BR>
<P>
<B>説明<BR>
</B>
<P>
ロギングはパフォーマンスに対する影響がもっとも小さいフォーマットされたキャラクタ列の出力のために<A HREF="../tool/osSyncPrintf.htm" >osSyncPrintf</A>(3P)に交互メカニズムを供給します。ロギングは相対的にホストによるフォーマットへの高価な転送です。逆にosSyncPrintfはターゲット上に与えられたキャラクタ列をフォーマットし、その呼出ですぐにホストにそのキャラクタ列をフラッシュバックします。ロギングは問題点のリアルタイムデバッグやパフォーマンス解析に有効です。
<BR>
<P>
OSLogデータストラクチャは個々のlogがロギングルーチンで参照されることによってハンドルのように振る舞います。
<P>
<B>osCreateLog</B>関数はこのストラクチャをイニシャライズします。引数baseは実際のログデータを保持するlen(32bit
word)のメモリ領域へのポインタです。<BR>
<P>
osLogEventルーチンは与えられたlogへのエントリを加えます。logエントリは16bitのcodeで始まり、numArgs数の付加引数が続きます。そして最後にそれら自身の付加引数が記述されます。付加引数はOS_LOG_MAXS_ARGSあるいは16以下です。引数は32bit数に限られ、アドレスポインタではなく、キャラクタ列を含みます。
<BR>
<P>
osFlushLogルーチンは<A HREF="../tool/gload.htm" >gload</A>(1P)プログラムが解釈し、ログをプリントするホストにログデータを転送します。gloadプログラムはフォーマットファイル中のロギングコードを検索し、残りの引数にフォーマット列を割り当てます。例えば、以下の行のフォーマットファイルを仮定すると、
<BR>
<P>
10 "The hexadecimal equivalent of %d is 0x%x"<BR>
<P>
続くコールは<BR>
<P>
osLogEvent(log, 10, 2, 16, 16);<BR>
<P>
gloadによって以下の出力が得られます。 <BR>
<P>
0xXXXXXXX (0010): The hexadecimal equivalent of 16 is 0x10<BR>
<P>
<B>参照<BR>
</B>
<P>
<A HREF="../tool/gload.htm">gload</A>(1P)<BR>
</BODY>
</HTML>