Version 1 (modified by obina, 7 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)
とかやっても良いです(後で適切なマスクにした方が幸せになれます)。