wiki:epics/streamdevice/tracemask

Version 1 (modified by obina, 2 years ago) (diff)

--

asynSetTracemask の指定について

PDF文書にも記載していますが、ioc shell 上でデバッグする際に どのようなメッセージが行き来しているかをみることは重要です。

正式なドキュメントは本家のサイト http://www.aps.anl.gov/epics/modules/soft/asyn/ からasynDriverへのリンクを参照してください。

書式

asynSetTraceMask(portName,addr,mask)
asynSetTraceIOMask(portName,addr,mask)

asynGetTraceMask などで現在の値を取得することもできます。

定義は公式ドキュメントのTrace Interfaceの項か、ソース ${EPICS_BASE}/../modules/soft/asyn/[ver]/asyn/asynDriver/asynDriver.h を参照。 (バージョンによって違いがあり、下の例はR4-31)

Trace Interface

/*asynTrace is implemented by asynManager*/
/*All asynTrace methods can be called from any thread*/
/* traceMask definitions*/
#define ASYN_TRACE_ERROR     0x0001
#define ASYN_TRACEIO_DEVICE  0x0002
#define ASYN_TRACEIO_FILTER  0x0004
#define ASYN_TRACEIO_DRIVER  0x0008
#define ASYN_TRACE_FLOW      0x0010
#define ASYN_TRACE_WARNING   0x0020

/* traceIO mask definitions*/
#define ASYN_TRACEIO_NODATA 0x0000
#define ASYN_TRACEIO_ASCII  0x0001
#define ASYN_TRACEIO_ESCAPE 0x0002
#define ASYN_TRACEIO_HEX    0x0004

デフォルトでは TraceMask が 0x1, TraceIOMask が 0x0 になっているので、 エラーが出たときのみログが表示されるようになっている。

使用例

お勧めは

  • 通常時はデフォルトのまま
    asynSetTraceMask(PS1, 0, 0x1)
    asynSetTraceIOMask(PS1, 0, 0x0)
    
  • デバッグ時には traceError と traceIODriver を有効にして
    asynSetTraceMask(PS1, 0, 0x9)
    asynSetTraceIOMask(PS1, 0, 0x4)
    

としておけば、バイナリ列がどのように行き来しているか分かる。(ASCIIで読みたいときにはIOMaskを0x1に)

とにかく全部見たい場合、まずは

asynSetTraceMask(PS1, 0, -1)
asynSetTraceIOMask(PS1, 0, -1)

とかやっても良いです(後で適切なマスクにした方が幸せになれます)。