Jul 12, 1999 onl50t: Solaris 2.6 cc ドライバのデバッグ. cc ドライバのデバッグ#02(その1) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ (http://www-online.kek.jp/~inoue/CAMAC/ onl50t-sol2.6/Desktop/debug-step05.txt) 高エネルギー加速器研究機構 素粒子原子核研究所 物理、オンライングループ 井上 栄二 (1). 現状確認 (A). 株式会社ロジックハウスの白田様より SPARC CPU-50T を借用した。 (B). FORCE,CPU-50(UltraSPARC-IIi 300MHz)、に Solaris2.6 のシステムを インストールした。 (C). /etc の下の各設定、および /export/home の作成をやった。 (D). "Solaris2.6 Hardware: 5/98 SMCC Desktop 日本語版 SPARC版"では ディスクレス・クライアントを設定することはできないことを確認した。 (E). CPU-50T に Solaris2.6用の VMEドライバ、FRCvme-2.3.1 をインストール した。 (F). onl50t に ccドライバをインストールした。 (G). サンプル・プログラムを実行した。 (1). cam1、シングル・アクション 24ビット camac read/write の実行 NG. システムはパニックを起こしてリブートしてしまう。 (2). cam3、camac LAM割り込み処理の実行 NG. システムはパニックを起こしてリブートしてしまう。 (3). cam2、ブロック転送 16ビット read/write の実行 ok. 正常に実行できた。 (4). cam2、ブロック転送 24ビット read/write の実行 ok. 正常に実行できた。 (H). クラッシュ時の savecoreファイルを入手してデバッグを始めた。 (I). cam1プログラムのデバッグ、icc_ioctlルーチンを修正した。 ok. cam1プログラムは正常に実行できた。 (J). cam3プログラムのデバッグを始めた。 camac_s()ルーチンの中で "cc->k->dhr = *dat;" を実行したところでエラーになっている。 message構造体をcc_device構造体の中に入れてみたが改善されない。 (K). cam3プログラムは正常に動作できるようになった。 (L). cam3プログラムのデバッグ時に付加したゴミをはずして最終的な動作確認 をやった。 ok. (M). onl50t 上でデバッグしたcamacドライバをfrc7v-cl2 上で動作確認した。 ok. (N). onl50t 上でデバッグしたcamacドライバを onl7v2、スタンドアロン Solaris2.6 上で動作確認した。 ok. (O). onl50t 上でデバッグしたcamacドライバを frc8vt、ディスクレス・サーバ Solaris2.6 上で動作確認した。 ok. (P). onl50t 上でデバッグしたcamacドライバを onl8v1、スタンドアロン Solaris2.6 上で動作確認した。 ok. (Q). onl50t 上でデバッグしたcamacドライバを onl5v4、スタンドアロン Solaris2.6 上で動作確認した。 ok. (R). スタンドアロン Solaris2.6、onl50t 上で、シングルアクションの実行 速度を測定時に、camac_s()コールを連続実行すると不正割り込みが かかってしまった。 (2). ここでやるべきこと camac_s()コールを連続実行すると不正割り込みがかかる件について調べる。 (3). 症状確認 症状を確認するために camac例題プログラム、cam1.c から修正したテスト用の プログラムを使って症状を再現してみる。 (3-1). cam1.c から変更してテスト用のプログラムを用意する onl50t[42]% pwd /export/home/onl50t/inoue/CAMAC/Driver/FORCE-5V-sol2.5 onl50t[43]% vi cam1-1.c : /******************************************************************** * * * cam1.c 7-OCT-1991 Y.Takeuchi * * * * CAMAC single action test program * * SPARC SFVME-100 CES8216 | K2917 K3922 * ********************************************************************/ #include #include "camlib.h" main(argc, argv) int argc; char *argv[]; { int loop; int n, a, f, q, x, dat; loop = (argc > 1) ? atoi(argv[1]): 20; if (CAM_Open()) { perror("Open error: "); exit(1); } CSETCR(0); CGENC(); CGENZ(); CSETI(); CREMI(); while (loop-- > 0) { rewind(stdin); printf("Input n a f (data)>"); scanf("%d %d %d*", &n, &a, &f); if ((f & 0x1C) == 0x10) scanf("%d*", &dat); printf("cam1-1 program start\n"); CAMAC(NAF(n, a, f), &dat, &q, &x); CAMAC(NAF(n, a, f), &dat, &q, &x); CAMAC(NAF(n, a, f), &dat, &q, &x); CAMAC(NAF(n, a, f), &dat, &q, &x); CAMAC(NAF(n, a, f), &dat, &q, &x); CAMAC(NAF(n, a, f), &dat, &q, &x); CAMAC(NAF(n, a, f), &dat, &q, &x); CAMAC(NAF(n, a, f), &dat, &q, &x); CAMAC(NAF(n, a, f), &dat, &q, &x); CAMAC(NAF(n, a, f), &dat, &q, &x); printf("cam1-1 program end\n"); /* printf(" N=%d A=%d F=%d Q=%d X=%d Data:%06X(Hex) %08d(Dec)\n\n", n, a, f, q, x, dat, dat); */ } CAM_Close(); } onl50t[44]% onl50t[44]% vi Makefile : ########## for examples ########## cam1-1 : cam1-1.c $(CC) $(CFLAGS) cam1-1.c -o cam1-1 $(CLIB) cam1 : cam1.c $(CC) $(CFLAGS) cam1.c -o cam1 $(CLIB) : "Makefile" 79 lines, 2107 characters onl50t[45]% onl50t[45]% make cam1-1 cc -O cam1-1.c -o cam1-1 -I. -L. -lcamac onl50t[46]% (3-2). cam1-1プログラムを実行する onl50t[49]% cam1-1 Input n a f (data)>3 0 0 cam1-1 program start cam1-1 program end Input n a f (data)>3 0 0 cam1-1プログラムはここでフリーズした。 この時のコンソール上のメッセージは次のとおり。 onl50t console login: CAMAC device driver V1.3x, 1991-1993 by Y.TAKEUCHI (T.I.T. ) cc0 at vme0: vme16d16 0xff00 VME level 4 vector 0xff sparc ipl 7 WARNING: vme: no interrupt vector for VME IRQ 4 WARNING: vme: no interrupt vector for VME IRQ 4 : WARNING: vme: no interrupt vector for VME IRQ 4 W <---- ここで、CPU-50Tの ABORTボタンを押してシステムを落とした。 Watchdog Reset Externally Initiated Reset ok ok boot disk3 -r Resetting ... screen not found. Can't open input device. Keyboard not present. Using ttya for input and output. FORCE,CPU-50(UltraSPARC-IIi 300MHz), No Keyboard OpenBoot 3.10.6, 256 MB memory installed, Serial #9196200. Ethernet address 0:80:42:b:e2:a8, Host ID: 808c52a8. Executing last command: boot disk3 -r Boot device: /pci@1f,0/scsi@4/disk@3,0 File and args: -r SunOS Release 5.6 Version Generic_105181-05 [UNIX(R) System V Release 4.0] Copyright (c) 1983-1997, Sun Microsystems, Inc. configuring network interfaces: hme0. Hostname: onl50t The / file system (/dev/rdsk/c0t3d0s0) is being checked. /dev/rdsk/c0t3d0s0: 3975 files, 398690 used, 507170 free /dev/rdsk/c0t3d0s0: (378 frags, 63349 blocks, 0.0% fragmentation) The /usr file system (/dev/rdsk/c0t3d0s6) is being checked. /dev/rdsk/c0t3d0s6: 28673 files, 546572 used, 3798784 free /dev/rdsk/c0t3d0s6: (1904 frags, 474610 blocks, 0.0% fragmentation) Configuring the /devices directory FRCvme V2.3.1 VME Nexus ( Universe) NOTICE: VME: slavewin at vme=0x0, size=0x100000 space=0x302061f CAMAC device driver V1.3x, 1991-1993 by Y.TAKEUCHI (T.I.T.) cc0 at vme0: vme16d16 0xff00 VME level 4 vector 0xff sparc ipl 7 vmeplus0 at vme0: vme16d16 0x0 and vme24d16 0x0 and vme32d16 0x0 and vme16d32 0x 0 and vme24d32 0x0 and vme32d32 0x0 and space 0x2f offset 0x0 and space 0x6f offset 0x0 and space 0x10 offset 0x0 and space 0x11 offset 0x0 and space 0x50 offset 0x0 and space 0x51 offset 0x0 vmedma0 at vme0 vmefdma0 at vme0 vmedvma0 at vme0 vmectl0 at vme0 Configuring the /dev directory Configuring the /dev directory (compatibility devices) The system is coming up. Please wait. checking ufs filesystems /dev/rdsk/c0t3d0s5: is stable. /dev/rdsk/c0t3d0s4: is stable. /dev/rdsk/c0t3d0s7: is stable. /dev/rdsk/c0t3d0s3: 908 files, 32280 used, 639394 free /dev/rdsk/c0t3d0s3: (210 frags, 79898 blocks, 0.0% fragmentation) checking for crash dump... add net default: gateway ICCFP1 NIS domainname is kek.jp starting rpc services: rpcbind keyserv done. Setting netmask of hme0 to 255.255.248.0 Setting default interface for multicast: add net 224.0.0.0: gateway onl50t syslog service starting. Print services started. starting Kana-Kanji converters: cssd. volume management starting. Wnn6: Key License Server started.... Nihongo Multi Client Server (Wnn6 R2.30) Finished Reading Files The system is ready. onl50t console login: (3-3). cc.cプログラムを修正する cc.cファイルの camac_s()ルーチンにデバッグ用のメッセージ出力文を追加 する。 onl50t[41]% vi cc.c : static int camac_s(int unit, u_short mode, u_short naf, u_short *dat) { register struct cc_device *cc; /* register struct K_REG *k = cc->k; */ register int counter; /* E.Inoue: from cmn_err(CE_NOTE," camac_s: debug step01. --- enter camac_s()"); E.Inoue: end */ cc = ddi_get_soft_state(cc_state,unit); cc->status = 0; /* by E.Inoue */ /* k->csr = CC_RST; */ /* K2917 Reset */ cc->k->csr = CC_RST; /* K2917 Reset */ cc->k->cma = CC_CMA_INIT; /* Initialize memory pointer */ cc->k->cmr = mode | (cc->cur_crate << 8); /* Write command list */ cc->k->cmr = naf; cc->k->cmr = CC_HALT; cc->k->cma = CC_CMA_INIT; /* Reset memory pointer */ counter = 0; switch (naf & 0x0018) { case 0x0000: /* CAMAC read */ /* E.Inoue: from */ cmn_err(CE_NOTE," camac_s: debug step02. --- camac read"); /* E.Inoue: end */ cc->k->csr &= ~CC_WRITE; cc->k->csr |= CC_GO; /* Go! */ while ((cc->k->csr & (CC_RDY|CC_ERR)) == 0 && counter < CC_TIMEOUT_SINGL E) counter++; /* E.Inoue: from */ cmn_err(CE_NOTE," camac_s: debug step02-1. --- camac read: CC_RDY|CC_ERR is set to 1"); /* E.Inoue: end */ if ((cc->k->csr & CC_RDY) != 0) { /* E.Inoue: from */ cmn_err(CE_NOTE," camac_s: debug step02-1. --- camac read: (cc->k->csr & CC_ RDY) != 0)"); /* E.Inoue: end */ if ((mode & CC_BIT16) == 0) { /* E.Inoue: from */ cmn_err(CE_NOTE," camac_s: debug step02-1. --- camac read: (cc->k->csr & CC_ DY) != 0): (mode & CC_BIT16) == 0"); /* E.Inoue: end */ *dat = cc->k->dhr & 0x00FF; *(dat + 1) = cc->k->dlr; } else *dat = cc->k->dlr; } break; case 0x0010: /* CAMAC write */ : onl50t[42]% onl50t[42]% make ./script/cc_build.sh [Building for sun4u] rm -f cc.o onl50t[43]% onl50t# make unload ./script/cc_unload.sh [Removing CAMAC device driver] [Removing CAMAC device driver from system] [Deleting CAMAC device files] onl50t# make load ./script/cc_load.sh [Installing CAMAC device driver] [Adding CAMAC device driver to system] [Configuring CAMAC device driver] [Making CAMAC device files] sun4u onl50t# (3-4). cam1-1プログラムを実行する onl50t[48]% cam1-1 Input n a f (data)>3 0 0 cam1-1 program start cam1-1 program end Input n a f (data)>3 0 0 cam1-1 program start cam1-1 program end Input n a f (data)>3 0 0 cam1-1 program start cam1-1 program end Input n a f (data)>3 0 0 ここでフリーズしてしまった。 この時のコンソール上のメッセージは以下の通り。 NOTICE: camac_s: debug step02. --- camac read NOTICE: camac_s: debug step02-1. --- camac read: CC_RDY|CC_ERR is set to 1 NOTICE: camac_s: debug step02-1. --- camac read: (cc->k->csr & CC_RDY) != 0) NOTICE: camac_s: debug step02-1. --- camac read: (cc->k->csr & CC_DY) != 0): ( mode & CC_BIT16) == 0 NOTICE: camac_s: debug step02. --- camac read NOTICE: camac_s: debug step02-1. --- camac read: CC_RDY|CC_ERR is set to 1 NOTICE: camac_s: debug step02-1. --- camac read: (cc->k->csr & CC_RDY) != 0) NOTICE: camac_s: debug step02-1. --- camac read: (cc->k->csr & CC_DY) != 0): ( mode & CC_BIT16) == 0 NOTICE: camac_s: debug step02. --- camac read NOTICE: camac_s: debug step02-1. --- camac read: CC_RDY|CC_ERR is set to 1 NOTICE: camac_s: debug step02-1. --- camac read: (cc->k->csr & CC_RDY) != 0) NOTICE: camac_s: debug step02-1. --- camac read: (cc->k->csr & CC_DY) != 0): ( mode & CC_BIT16) == 0 NOTICE: camac_s: debug step02. --- camac read NOTICE: camac_s: debug step02-1. --- camac read: CC_RDY|CC_ERR is set to 1 NOTICE: camac_s: debug step02-1. --- camac read: (cc->k->csr & CC_RDY) != 0) NOTICE: camac_s: debug step02-1. --- camac read: (cc->k->csr & CC_DY) != 0): ( mode & CC_BIT16) == 0 NOTICE: camac_s: debug step02. --- camac read NOTICE: camac_s: debug step02-1. --- camac read: CC_RDY|CC_ERR is set to 1 NOTICE: camac_s: debug step02-1. --- camac read: (cc->k->csr & CC_RDY) != 0) NOTICE: camac_s: debug step02-1. --- camac read: (cc->k->csr & CC_DY) != 0): ( mode & CC_BIT16) == 0 NOTICE: camac_s: debug step02. --- camac read NOTICE: camac_s: debug step02-1. --- camac read: CC_RDY|CC_ERR is set to 1 NOTICE: camac_s: debug step02-1. --- camac read: (cc->k->csr & CC_RDY) != 0) NOTICE: camac_s: debug step02-1. --- camac read: (cc->k->csr & CC_DY) != 0): ( mode & CC_BIT16) == 0 NOTICE: camac_s: debug step02. --- camac read NOTICE: camac_s: debug step02-1. --- camac read: CC_RDY|CC_ERR is set to 1 NOTICE: camac_s: debug step02-1. --- camac read: (cc->k->csr & CC_RDY) != 0) NOTICE: camac_s: debug step02-1. --- camac read: (cc->k->csr & CC_DY) != 0): ( mode & CC_BIT16) == 0 NOTICE: camac_s: debug step02. --- camac read NOTICE: camac_s: debug step02-1. --- camac read: CC_RDY|CC_ERR is set to 1 NOTICE: camac_s: debug step02-1. --- camac read: (cc->k->csr & CC_RDY) != 0) NOTICE: camac_s: debug step02-1. --- camac read: (cc->k->csr & CC_DY) != 0): ( mode & CC_BIT16) == 0 NOTICE: camac_s: debug step02. --- camac read NOTICE: camac_s: debug step02-1. --- camac read: CC_RDY|CC_ERR is set to 1 NOTICE: camac_s: debug step02-1. --- camac read: (cc->k->csr & CC_RDY) != 0) NOTICE: camac_s: debug step02-1. --- camac read: (cc->k->csr & CC_DY) != 0): ( mode & CC_BIT16) == 0 NOTICE: camac_s: debug step02. --- camac read NOTICE: camac_s: debug step02-1. --- camac read: CC_RDY|CC_ERR is set to 1 NOTICE: camac_s: debug step02-1. --- camac read: (cc->k->csr & CC_RDY) != 0) NOTICE: camac_s: debug step02-1. --- camac read: (cc->k->csr & CC_DY) != 0): ( mode & CC_BIT16) == 0 NOTICE: camac_s: debug step02. --- camac read NOTICE: camac_s: debug step02-1. --- camac read: CC_RDY|CC_ERR is set to 1 NOTICE: camac_s: debug step02-1. --- camac read: (cc->k->csr & CC_RDY) != 0) NOTICE: camac_s: debug step02-1. --- camac read: (cc->k->csr & CC_DY) != 0): ( mode & CC_BIT16) == 0 NOTICE: camac_s: debug step02. --- camac read NOTICE: camac_s: debug step02-1. --- camac read: CC_RDY|CC_ERR is set to 1 NOTICE: camac_s: debug step02-1. --- camac read: (cc->k->csr & CC_RDY) != 0) NOTICE: camac_s: debug step02-1. --- camac read: (cc->k->csr & CC_DY) != 0): ( mode & CC_BIT16) == 0 NOTICE: camac_s: debug step02. --- camac read NOTICE: camac_s: debug step02-1. --- camac read: CC_RDY|CC_ERR is set to 1 NOTICE: camac_s: debug step02-1. --- camac read: (cc->k->csr & CC_RDY) != 0) NOTICE: camac_s: debug step02-1. --- camac read: (cc->k->csr & CC_DY) != 0): ( mode & CC_BIT16) == 0 NOTICE: camac_s: debug step02. --- camac read NOTICE: camac_s: debug step02-1. --- camac read: CC_RDY|CC_ERR is set to 1 NOTICE: camac_s: debug step02-1. --- camac read: (cc->k->csr & CC_RDY) != 0) NOTICE: camac_s: debug step02-1. --- camac read: (cc->k->csr & CC_DY) != 0): ( mode & CC_BIT16) == 0 NOTICE: camac_s: debug step02. --- camac read NOTICE: camac_s: debug step02-1. --- camac read: CC_RDY|CC_ERR is set to 1 NOTICE: camac_s: debug step02-1. --- camac read: (cc->k->csr & CC_RDY) != 0) NOTICE: camac_s: debug step02-1. --- camac read: (cc->k->csr & CC_DY) != 0): ( mode & CC_BIT16) == 0 NOTICE: camac_s: debug step02. --- camac read NOTICE: camac_s: debug step02-1. --- camac read: CC_RDY|CC_ERR is set to 1 NOTICE: camac_s: debug step02-1. --- camac read: (cc->k->csr & CC_RDY) != 0) NOTICE: camac_s: debug step02-1. --- camac read: (cc->k->csr & CC_DY) != 0): ( mode & CC_BIT16) == 0 NOTICE: camac_s: debug step02. --- camac read NOTICE: camac_s: debug step02-1. --- camac read: CC_RDY|CC_ERR is set to 1 NOTICE: camac_s: debug step02-1. --- camac read: (cc->k->csr & CC_RDY) != 0) NOTICE: camac_s: debug step02-1. --- camac read: (cc->k->csr & CC_DY) != 0): ( mode & CC_BIT16) == 0 NOTICE: camac_s: debug step02. --- camac read NOTICE: camac_s: debug step02-1. --- camac read: CC_RDY|CC_ERR is set to 1 NOTICE: camac_s: debug step02-1. --- camac read: (cc->k->csr & CC_RDY) != 0) NOTICE: camac_s: debug step02-1. --- camac read: (cc->k->csr & CC_DY) != 0): ( mode & CC_BIT16) == 0 NOTICE: camac_s: debug step02. --- camac read NOTICE: camac_s: debug step02-1. --- camac read: CC_RDY|CC_ERR is set to 1 NOTICE: camac_s: debug step02-1. --- camac read: (cc->k->csr & CC_RDY) != 0) NOTICE: camac_s: debug step02-1. --- camac read: (cc->k->csr & CC_DY) != 0): ( mode & CC_BIT16) == 0 NOTICE: camac_s: debug step02. --- camac read NOTICE: camac_s: debug step02-1. --- camac read: CC_RDY|CC_ERR is set to 1 NOTICE: camac_s: debug step02-1. --- camac read: (cc->k->csr & CC_RDY) != 0) NOTICE: camac_s: debug step02-1. --- camac read: (cc->k->csr & CC_DY) != 0): ( mode & CC_BIT16) == 0 NOTICE: camac_s: debug step02. --- camac read NOTICE: camac_s: debug step02-1. --- camac read: CC_RDY|CC_ERR is set to 1 NOTICE: camac_s: debug step02-1. --- camac read: (cc->k->csr & CC_RDY) != 0) NOTICE: camac_s: debug step02-1. --- camac read: (cc->k->csr & CC_DY) != 0): ( mode & CC_BIT16) == 0 NOTICE: camac_s: debug step02. --- camac read NOTICE: camac_s: debug step02-1. --- camac read: CC_RDY|CC_ERR is set to 1 NOTICE: camac_s: debug step02-1. --- camac read: (cc->k->csr & CC_RDY) != 0) NOTICE: camac_s: debug step02-1. --- camac read: (cc->k->csr & CC_DY) != 0): ( mode & CC_BIT16) == 0 NOTICE: camac_s: debug step02. --- camac read NOTICE: camac_s: debug step02-1. --- camac read: CC_RDY|CC_ERR is set to 1 NOTICE: camac_s: debug step02-1. --- camac read: (cc->k->csr & CC_RDY) != 0) NOTICE: camac_s: debug step02-1. --- camac read: (cc->k->csr & CC_DY) != 0): ( mode & CC_BIT16) == 0 NOTICE: camac_s: debug step02. --- camac read NOTICE: camac_s: debug step02-1. --- camac read: CC_RDY|CC_ERR is set to 1 NOTICE: camac_s: debug step02-1. --- camac read: (cc->k->csr & CC_RDY) != 0) NOTICE: camac_s: debug step02-1. --- camac read: (cc->k->csr & CC_DY) != 0): ( mode & CC_BIT16) == 0 NOTICE: camac_s: debug step02. --- camac read NOTICE: camac_s: debug step02-1. --- camac read: CC_RDY|CC_ERR is set to 1 NOTICE: camac_s: debug step02-1. --- camac read: (cc->k->csr & CC_RDY) != 0) NOTICE: camac_s: debug step02-1. --- camac read: (cc->k->csr & CC_DY) != 0): ( mode & CC_BIT16) == 0 NOTICE: camac_s: debug step02. --- camac read NOTICE: camac_s: debug step02-1. --- camac read: CC_RDY|CC_ERR is set to 1 NOTICE: camac_s: debug step02-1. --- camac read: (cc->k->csr & CC_RDY) != 0) NOTICE: camac_s: debug step02-1. --- camac read: (cc->k->csr & CC_DY) != 0): ( mode & CC_BIT16) == 0 NOTICE: camac_s: debug step02. --- camac read NOTICE: camac_s: debug step02-1. --- camac read: CC_RDY|CC_ERR is set to 1 NOTICE: camac_s: debug step02-1. --- camac read: (cc->k->csr & CC_RDY) != 0) NOTICE: camac_s: debug step02-1. --- camac read: (cc->k->csr & CC_DY) != 0): ( mode & CC_BIT16) == 0 NOTICE: camac_s: debug step02. --- camac read NOTICE: camac_s: debug step02-1. --- camac read: CC_RDY|CC_ERR is set to 1 NOTICE: camac_s: debug step02-1. --- camac read: (cc->k->csr & CC_RDY) != 0) NOTICE: camac_s: debug step02-1. --- camac read: (cc->k->csr & CC_DY) != 0): ( mode & CC_BIT16) == 0 NOTICE: camac_s: debug step02. --- camac read NOTICE: camac_s: debug step02-1. --- camac read: CC_RDY|CC_ERR is set to 1 NOTICE: camac_s: debug step02-1. --- camac read: (cc->k->csr & CC_RDY) != 0) NOTICE: camac_s: debug step02-1. --- camac read: (cc->k->csr & CC_DY) != 0): ( mode & CC_BIT16) == 0 NOTICE: camac_s: debug step02. --- camac read NOTICE: camac_s: debug step02-1. --- camac read: CC_RDY|CC_ERR is set to 1 NOTICE: camac_s: debug step02-1. --- camac read: (cc->k->csr & CC_RDY) != 0) NOTICE: camac_s: debug step02-1. --- camac read: (cc->k->csr & CC_DY) != 0): ( mode & CC_BIT16) == 0 NOTICE: camac_s: debug step02. --- camac read NOTICE: camac_s: debug step02-1. --- camac read: CC_RDY|CC_ERR is set to 1 NOTICE: camac_s: debug step02-1. --- camac read: (cc->k->csr & CC_RDY) != 0) NOTICE: camac_s: debug step02-1. --- camac read: (cc->k->csr & CC_DY) != 0): ( mode & CC_BIT16) == 0 NOTICE: camac_s: debug step02. --- camac read NOTICE: camac_s: debug step02-1. --- camac read: CC_RDY|CC_ERR is set to 1 NOTICE: camac_s: debug step02-1. --- camac read: (cc->k->csr & CC_RDY) != 0) NOTICE: camac_s: debug step02-1. --- camac read: (cc->k->csr & CC_DY) != 0): ( mode & CC_BIT16) == 0 NOTICE: camac_s: debug step02. --- camac read NOTICE: camac_s: debug step02-1. --- camac read: CC_RDY|CC_ERR is set to 1 NOTICE: camac_s: debug step02-1. --- camac read: (cc->k->csr & CC_RDY) != 0) NOTICE: camac_s: debug step02-1. --- camac read: (cc->k->csr & CC_DY) != 0): ( mode & CC_BIT16) == 0 NOTICE: camac_s: debug step02. --- camac read NOTICE: camac_s: debug step02-1. --- camac read: CC_RDY|CC_ERR is set to 1 NOTICE: camac_s: debug step02-1. --- camac read: (cc->k->csr & CC_RDY) != 0) NOTICE: camac_s: debug step02-1. --- camac read: (cc->k->csr & CC_DY) != 0): ( mode & CC_BIT16) == 0 NOTICE: camac_s: debug step02. --- camac read NOTICE: camac_s: debug step02-1. --- camac read: CC_RDY|CC_ERR is set to 1 RNING: vme: no interrupt vector for VME IRQ 4 WARNING: vme: no interrupt vector for VME IRQ 4 WARNING: vme: no interrupt vector for VME IRQ 4 WARNING: vme: no interrupt vector for VME IRQ 4 WARNING: vme: no interrupt vector for VME IRQ 4 WARNING: vme: no interrupt vector for VME IRQ 4 WARNING: vme: no interrupt vector for VME IRQ 4 : CSRレジスタの RDY もしくは ERR のビットがセットされたところで、不正割り 込みが起きて cam1-1プログラムの実行がフリーズしてしまっている。 (4). K2917 の割り込み信号について調べる --- BUS INTERRUPT REGISTERS The Model 2917 uses the MC68153 Bus Interrupter to generate four separate interrupts. The four conditions that can cauuse an interrupt are: 1) a LAM, 2) DONE bit in the CSR set, 3) DMA Buffer Empty and 4) List Abort condition. If any two or more interrupts are set to the same interrupt request level, MC68153 gives preference to the highest number requester; that is, List Abort has the highest priority and LAM has the lowest. Programming information on the Bus Interrupter can be found below in the register descriptions and also in the Technical Specifications included in APPENDIX B of this manual. Interrupt Control Registers The Interrupt Control Registers are used to enable and select the interrupt request level. A register layout and description of the Interrupt Control register is given below: Bit 4 INT ENA Interrupt Enable. Setting this bit to a one will enable interrupts. Bit3 INT Intrrupt Auot-Clear. Setting this bit to a one will AUTO-CLR clear bit #4 (INT ENA) during an interrupt acknowledge cycle responding to this request. To re-enable, bit #4 must be written with a one. Bit2-0 IRQ LEVEL Interrupt Request Level. This three bit field determines the interrupt level, one through seven, to be generated. A value of zero disables the interrupt. --- Command Memory Register The 2917 Command Memory is an 8K x 16-bit RAM memory. All CAMAC commands are executed from this memory. Data for one or more command lists is written or read as if the memory was a single register. The Memory Address is incremented automatically after each write or read operation. If multiple lists are present, the list to be executed is selected by first setting the Commnad Memory Address to that list. All lists must be CAMAC "Read" or "Write", with the following exceptions: 1. Read or write lists can contain dataless CAMAC commnads, using Function Codes F(8) through F(15) and F(24) through F(31). 2. Read lists can contain Inline Write operations. The instaructions for the Command List (written as MEM DATA) can be selected from the following: (a). Single CAMAC Transfer -- Read, Write, or Control Word 1 Bit0 AD Abort Disable. Data of zero will Abort a transfer on error (refer to the Operation Section of this manual for a descrition of error for each mode). Data of one disables Abort. --- Control Status Register The Control Status Register (CSR) is used to start the 2917 operations and monitor the results of those operations. A layout and description of the Control Status Register is given below: Bit 15 ERR ERROR. This is a read-only bit which is set when an operation is the Command List terminates with a error. See the Operations Section for a description of ERROR for each mode of opration. Bit 14 ABT ABORT. This is a read-only bit which is set when an operation terminates in error and the Abort Disable bit (AD) of the operation was not set. Bit 8 RDY DATA READY. This bit, when set to one, indicates that the DLR and DHR are ready to be written to or valid data is ready to be read. Bit 7 DONE DONE. This is a read-only bit which is set when the 2917 has completed or aborted a Commnand List. It is cleared while the 2917 is executing a list. Bit 5 DIR DIRECTION. This bit directs the flow of data between VMEbus and CAMAC bus. 0 = CAMAC to VME (CAMAC read) 1 = VME to CAMAC (CAMAC write) Note: This bit is don't care for a Inline Write command or a CAMAC Control command. Bit 2 NO-X NO-X. When set, indicates that a CAMAC operation results in a X-response of zero. Bit 1 NO-Q NO-Q. When set, indicates that a CAMAC operation results in a Q-response of zero. Bit 0 GO GO. when set instructs the 2917 to begin executing the Command List. This bit is reset by HALT command or Abort Command List. --- 2917 OPERATING MODES Slave Single Transfers The 2917 provides a programmed transfer mode of opration. Under program- ed transfer, all transfers to or from the 2917 are done via programed Short I/O. Programed transfers may be executed with either 16- or 24-bit CAMAC data words. The size of the data words transfered is determined by the setting of the Word Size bits (bits 2 and 1) in the Mode word in the command list. During a CAMAC write or read operation, the DONE bit in the CSR will not be set until data is written to or read from the data registers. For a 16-bit CAMAC operation, DHR doesn't need to be written or read. A Ready bit (RDY bit 8 in CSR) will indicate if read data is present or if the data registers, DLR and DHR, can be written to. The following describes the sequence necessary to execute CAMAC read, write and control functions using programmed transfers. Note: A write or read list can have one or more single write/read CAMAC commands. A CAMAC control command and/or Inline Write command can also be in a write/read list. Programmed Transfer Read Operation (F16=0: F8=0) 1. Load Command Memory with single CAMAC command list with the Mode word set to all the proper options. Refer to the CMR for more details. 2. Load the CMA Register to the beginning of the list. 3. Load the CSR with: a. DIR (bit 5) to 0. b. GO (bit 0) to 1. 4. Poll CSR for the RDY bit (bit 8) untill it is set to one or the ERR bit (bit 15) to be set. 5. Read only the DLR for 16-bit CAMAC reads. In 24-bit mode, DLR or the DHR, can be read first. 6. Check CSR for DONE to be set. If Done is not set, another read may be pending. Return to step four. The following are definitions for ERROR and ABORT when executing opera- tions in the programmed single command transfer mode. ERROR = NO-X + NO-Q ABORT = /AD * ERROR where NO-Q is bit 1 of CSR NO-X is bit 2 of CSR AD is bit 0 of Mode word in Command List. (5). cc.cファイルの修正、コンパイル、実行 上記の項目(4)の説明より、Command Memory Register の ADビットをセット することで、CAMAC からの不正な割り込み信号を押さえることができそうだ。 このビットをセットしてみる。 (5-1). cc.cファイルの修正 onl50t[49]% pwd /export/home/onl50t/inoue/CAMAC/Driver/FORCE-5V-sol2.5 onl50t[50]% grep AD *.h camlib.h:#define CamLisLOAD CLLOAD cc.h:#define CC_CMD_LOADLIST 3 cc.h:#define CC_CMD_LOADDOLIST 4 cc.h:#define CC_CMD_ADDKLIST 6 cc.h:#define CC_CMD_LOADKLIST 10 cc.h:#define CCIOC_READ_STATUS _IOR('c',8,int) k2917.h:#define CC_DMA_READ 0x0080 k2917.h:#define CC_AD 0x0001 onl50t[51]% onl50t[51]% vi cc.c : static int camac_s(int unit, u_short mode, u_short naf, u_short *dat) { register struct cc_device *cc; /* register struct K_REG *k = cc->k; */ register int counter; /* E.Inoue: from cmn_err(CE_NOTE," camac_s: debug step01. --- enter camac_s()"); E.Inoue: end */ cc = ddi_get_soft_state(cc_state,unit); cc->status = 0; /* by E.Inoue */ /* k->csr = CC_RST; */ /* K2917 Reset */ cc->k->csr = CC_RST; /* K2917 Reset */ cc->k->cma = CC_CMA_INIT; /* Initialize memory pointer */ /* cc->k->cmr = mode | (cc->cur_crate << 8); */ /* Write command list */ cc->k->cmr = mode | (cc->cur_crate << 8) | CC_AD; /* Write command list */ cc->k->cmr = naf; cc->k->cmr = CC_HALT; cc->k->cma = CC_CMA_INIT; /* Reset memory pointer */ : "cc.c" 3037 lines, 78729 characters onl50t[52]% (5-2). cc.cファイルのコンパイル、リロード onl50t[52]% pwd /export/home/onl50t/inoue/CAMAC/Driver/FORCE-5V-sol2.5 onl50t[53]% make ./script/cc_build.sh [Building for sun4u] rm -f cc.o onl50t[54]% onl50t# make unload ./script/cc_unload.sh [Removing CAMAC device driver] [Removing CAMAC device driver from system] [Deleting CAMAC device files] onl50t# make load ./script/cc_load.sh [Installing CAMAC device driver] [Adding CAMAC device driver to system] [Configuring CAMAC device driver] [Making CAMAC device files] sun4u onl50t# ls -l /dev/cc lrwxrwxrwx 1 root other 37 Jul 5 10:26 /dev/cc -> /devices/pci@1f,0/vme@5/cc@2d,ff00:cc onl50t# (5-3). cam1-1プログラムを実行する onl50t[44]% cam1-1 Input n a f (data)>3 0 0 cam1-1 はここでフリーズした。 コンソール上には WARNING が出ている。 NOTICE: camac_s: debug step02. --- camac read NOTICE: camac_s: debug step02-1. --- camac read: CC_RDY|CC_ERR is set to 1 NOTICE: camac_s: debug step02-1. --- camac read: (cc->k->csr & CC_RDY) != 0) NOTICE: camac_s: debug step02-1. --- camac read: (cc->k->csr & CC_DY) != 0): ( mode & CC_BIT16) == 0 NOTICE: camac_s: debug step02. --- camac read NOTICE: camac_s: debug step02-1. --- camac read: CC_RDY|CC_ERR is set to 1 NOTICE: camac_s: debug step02-1. --- camac read: (cc->k->csr & CC_RDY) != 0) NOTICE: camac_s: debug step02-1. --- camac read: (cc->k->csr & CC_DY) != 0): ( mode & CC_BIT16) == 0 NOTICE: camac_s: debug step02. --- camac read NOTICE: camac_s: debug step02-1. --- camac read: CC_RDY|CC_ERR is set to 1 NOTICE: camac_s: debug step02-1. --- camac read: (cc->k->csr & CC_RDY) != 0) NOTICE: camac_s: debug step02-1. --- camac read: (cc->k->csr & CC_DY) != 0): ( mode & CC_BIT16) == 0 NOTICE: camac_s: debug step02. --- camac read NOTICE: camac_s: debug step02-1. --- camac read: CC_RDY|CC_ERR is set to 1 NOTICE: camac_s: debug step02-1. --- camac read: (cc->k->csr & CC_RDY) != 0) NOTICE: camac_s: debug step02-1. --- camac read: (cc->k->csr & CC_DY) != 0): ( mode & CC_BIT16) == 0 WARNING: vme: no interrupt vector for VME IRQ 4 WARNING: vme: no interrupt vector for VME IRQ 4 WARNING: vme: no interrupt vector for VME IRQ 4 (6). cc.cファイルの修正、コンパイル、実行(その2) 上記の項目(4)の Interrupt Control Registers の説明より、Interrupt Control Registers のビット2-0 の IRQ LEVEL をゼロにすることで、割り込み をディセーブルにできるようだ。 このビットをセットしてみる。 (6-1). cc.cファイルの修正 onl50t[45]% vi cc.c : static int camac_s(int unit, u_short mode, u_short naf, u_short *dat) { register struct cc_device *cc; /* register struct K_REG *k = cc->k; */ register int counter; /* E.Inoue: from cmn_err(CE_NOTE," camac_s: debug step01. --- enter camac_s()"); E.Inoue: end */ cc = ddi_get_soft_state(cc_state,unit); cc->status = 0; /* by E.Inoue */ /* k->csr = CC_RST; */ /* K2917 Reset */ /* E.Inoue */ cc->k->lamc = (u_short)CC_INT_AUTO_CLEAR; cc->k->donc = (u_short)CC_INT_AUTO_CLEAR; cc->k->empc = (u_short)CC_INT_AUTO_CLEAR; cc->k->aboc = (u_short)CC_INT_AUTO_CLEAR; /* end */ cc->k->cma = CC_CMA_INIT; /* Initialize memory pointer */ cc->k->cmr = mode | (cc->cur_crate << 8); /* Write command list */ cc->k->cmr = naf; cc->k->cmr = CC_HALT; cc->k->cma = CC_CMA_INIT; /* Reset memory pointer */ : onl50t[46]% (6-2). cc.cファイルのコンパイル、リロード onl50t[46]% make ./script/cc_build.sh [Building for sun4u] rm -f cc.o onl50t[47]% onl50t# make unload ./script/cc_unload.sh [Removing CAMAC device driver] [Removing CAMAC device driver from system] [Deleting CAMAC device files] onl50t# make load ./script/cc_load.sh [Installing CAMAC device driver] [Adding CAMAC device driver to system] [Configuring CAMAC device driver] [Making CAMAC device files] sun4u onl50t# ls -l /dev/cc lrwxrwxrwx 1 root other 37 Jul 6 16:06 /dev/cc -> /devices/pci@1f,0/vme@5/cc@2d,ff00:cc onl50t# (6-3). cam1-1プログラムを実行する onl50t[103]% cam1-1 Input n a f (data)>3 0 0 cam1-1 program start cam1-1 program end Input n a f (data)>3 0 0 cam1-1 program start cam1-1 program end Input n a f (data)>3 0 0 cam1-1 program start cam1-1 program end Input n a f (data)>3 0 0 cam1-1 program start cam1-1 program end Input n a f (data)>3 0 0 cam1-1 program start cam1-1 program end Input n a f (data)>3 0 0 cam1-1 program start cam1-1 program end Input n a f (data)>3 0 0 cam1-1 program start cam1-1 program end Input n a f (data)>3 0 0 cam1-1 program start cam1-1 program end Input n a f (data)>3 0 0 cam1-1 program start cam1-1 program end Input n a f (data)>^Conl50t[104]% onl50t[104]% 正常に実行できている。 コンソール上にも WARNING は表示されていない。 (7). camac 実行時間測定プログラムを走らせてみる camacシングルアクション read を 10ループ繰り返す、cam1-1プログラムでは 不正割り込みによる WARNING は表示されない状態にできた。 次にcamac 実行 時間測定プログラムを走らせて確認する。 (7-1). camsingle.sh を実行する onl50t# pwd /export/home/onl50t/inoue/CAMAC/CAMAC-speed1/examples-Solaris2.x onl50t# ./camsingle.sh program execution : loop count = 1 elapsed time 0 sec, 7 microsec overhead time 1 microsec elapsed time 0 sec, 39368 microsec elapsed time 39 microsec CAMAC READ single action takes 38 microsec. program execution : loop count = 2 elapsed time 0 sec, 7 microsec overhead time 1 microsec elapsed time 0 sec, 39369 microsec elapsed time 39 microsec CAMAC READ single action takes 38 microsec. program execution : loop count = 3 elapsed time 0 sec, 7 microsec overhead time 1 microsec elapsed time 0 sec, 39359 microsec elapsed time 39 microsec CAMAC READ single action takes 38 microsec. program execution : loop count = 4 elapsed time 0 sec, 7 microsec overhead time 1 microsec elapsed time 0 sec, 39305 microsec elapsed time 39 microsec CAMAC READ single action takes 38 microsec. program execution : loop count = 5 elapsed time 0 sec, 7 microsec overhead time 1 microsec elapsed time 0 sec, 39417 microsec elapsed time 39 microsec CAMAC READ single action takes 38 microsec. program execution : loop count = 6 elapsed time 0 sec, 7 microsec overhead time 1 microsec elapsed time 0 sec, 39485 microsec elapsed time 39 microsec CAMAC READ single action takes 38 microsec. program execution : loop count = 7 elapsed time 0 sec, 6 microsec overhead time 1 microsec elapsed time 0 sec, 39376 microsec elapsed time 39 microsec CAMAC READ single action takes 38 microsec. program execution : loop count = 8 elapsed time 0 sec, 6 microsec overhead time 1 microsec elapsed time 0 sec, 39311 microsec elapsed time 39 microsec CAMAC READ single action takes 38 microsec. program execution : loop count = 9 elapsed time 0 sec, 6 microsec overhead time 1 microsec elapsed time 0 sec, 39384 microsec elapsed time 39 microsec CAMAC READ single action takes 38 microsec. program execution : loop count = 10 elapsed time 0 sec, 7 microsec overhead time 1 microsec elapsed time 0 sec, 39372 microsec elapsed time 39 microsec CAMAC READ single action takes 38 microsec. program execution : loop count = 11 elapsed time 0 sec, 7 microsec overhead time 1 microsec elapsed time 0 sec, 39359 microsec elapsed time 39 microsec CAMAC READ single action takes 38 microsec. program execution : loop count = 12 elapsed time 0 sec, 6 microsec overhead time 1 microsec elapsed time 0 sec, 39438 microsec elapsed time 39 microsec CAMAC READ single action takes 38 microsec. program execution : loop count = 13 elapsed time 0 sec, 7 microsec overhead time 1 microsec elapsed time 0 sec, 39406 microsec elapsed time 39 microsec CAMAC READ single action takes 38 microsec. program execution : loop count = 14 elapsed time 0 sec, 6 microsec overhead time 1 microsec elapsed time 0 sec, 39308 microsec elapsed time 39 microsec CAMAC READ single action takes 38 microsec. program execution : loop count = 15 elapsed time 0 sec, 7 microsec overhead time 1 microsec elapsed time 0 sec, 39365 microsec elapsed time 39 microsec CAMAC READ single action takes 38 microsec. program execution : loop count = 16 elapsed time 0 sec, 7 microsec overhead time 1 microsec elapsed time 0 sec, 39371 microsec elapsed time 39 microsec CAMAC READ single action takes 38 microsec. program execution : loop count = 17 elapsed time 0 sec, 7 microsec overhead time 1 microsec elapsed time 0 sec, 39367 microsec elapsed time 39 microsec CAMAC READ single action takes 38 microsec. program execution : loop count = 18 elapsed time 0 sec, 7 microsec overhead time 1 microsec elapsed time 0 sec, 39330 microsec elapsed time 39 microsec CAMAC READ single action takes 38 microsec. program execution : loop count = 19 elapsed time 0 sec, 7 microsec overhead time 1 microsec elapsed time 0 sec, 39340 microsec elapsed time 39 microsec CAMAC READ single action takes 38 microsec. program execution : loop count = 20 elapsed time 0 sec, 6 microsec overhead time 1 microsec elapsed time 0 sec, 39363 microsec elapsed time 39 microsec CAMAC READ single action takes 38 microsec. program execution : loop count = 21 elapsed time 0 sec, 7 microsec overhead time 1 microsec elapsed time 0 sec, 39349 microsec elapsed time 39 microsec CAMAC READ single action takes 38 microsec. program execution : loop count = 22 elapsed time 0 sec, 7 microsec overhead time 1 microsec elapsed time 0 sec, 39364 microsec elapsed time 39 microsec CAMAC READ single action takes 38 microsec. program execution : loop count = 23 elapsed time 0 sec, 6 microsec overhead time 1 microsec elapsed time 0 sec, 39424 microsec elapsed time 39 microsec CAMAC READ single action takes 38 microsec. program execution : loop count = 24 elapsed time 0 sec, 6 microsec overhead time 1 microsec elapsed time 0 sec, 39362 microsec elapsed time 39 microsec CAMAC READ single action takes 38 microsec. program execution : loop count = 25 elapsed time 0 sec, 7 microsec overhead time 1 microsec elapsed time 0 sec, 39382 microsec elapsed time 39 microsec CAMAC READ single action takes 38 microsec. program execution : loop count = 26 elapsed time 0 sec, 6 microsec overhead time 1 microsec elapsed time 0 sec, 39391 microsec elapsed time 39 microsec CAMAC READ single action takes 38 microsec. program execution : loop count = 27 elapsed time 0 sec, 7 microsec overhead time 1 microsec elapsed time 0 sec, 39311 microsec elapsed time 39 microsec CAMAC READ single action takes 38 microsec. program execution : loop count = 28 elapsed time 0 sec, 6 microsec overhead time 1 microsec elapsed time 0 sec, 39339 microsec elapsed time 39 microsec CAMAC READ single action takes 38 microsec. program execution : loop count = 29 elapsed time 0 sec, 7 microsec overhead time 1 microsec elapsed time 0 sec, 39373 microsec elapsed time 39 microsec CAMAC READ single action takes 38 microsec. program execution : loop count = 30 elapsed time 0 sec, 6 microsec overhead time 1 microsec elapsed time 0 sec, 39445 microsec elapsed time 39 microsec CAMAC READ single action takes 38 microsec. program execution : loop count = 31 elapsed time 0 sec, 7 microsec overhead time 1 microsec elapsed time 0 sec, 39366 microsec elapsed time 39 microsec CAMAC READ single action takes 38 microsec. program execution : loop count = 32 elapsed time 0 sec, 6 microsec overhead time 1 microsec elapsed time 0 sec, 39383 microsec elapsed time 39 microsec CAMAC READ single action takes 38 microsec. program execution : loop count = 33 elapsed time 0 sec, 6 microsec overhead time 1 microsec elapsed time 0 sec, 39359 microsec elapsed time 39 microsec CAMAC READ single action takes 38 microsec. program execution : loop count = 34 elapsed time 0 sec, 7 microsec overhead time 1 microsec elapsed time 0 sec, 39364 microsec elapsed time 39 microsec CAMAC READ single action takes 38 microsec. program execution : loop count = 35 elapsed time 0 sec, 6 microsec overhead time 1 microsec elapsed time 0 sec, 39353 microsec elapsed time 39 microsec CAMAC READ single action takes 38 microsec. program execution : loop count = 36 elapsed time 0 sec, 6 microsec overhead time 1 microsec elapsed time 0 sec, 39344 microsec elapsed time 39 microsec CAMAC READ single action takes 38 microsec. program execution : loop count = 37 elapsed time 0 sec, 7 microsec overhead time 1 microsec elapsed time 0 sec, 39317 microsec elapsed time 39 microsec CAMAC READ single action takes 38 microsec. program execution : loop count = 38 elapsed time 0 sec, 6 microsec overhead time 1 microsec elapsed time 0 sec, 39411 microsec elapsed time 39 microsec CAMAC READ single action takes 38 microsec. program execution : loop count = 39 elapsed time 0 sec, 7 microsec overhead time 1 microsec elapsed time 0 sec, 39376 microsec elapsed time 39 microsec CAMAC READ single action takes 38 microsec. program execution : loop count = 40 elapsed time 0 sec, 6 microsec overhead time 1 microsec elapsed time 0 sec, 39392 microsec elapsed time 39 microsec CAMAC READ single action takes 38 microsec. program execution : loop count = 41 elapsed time 0 sec, 6 microsec overhead time 1 microsec elapsed time 0 sec, 39338 microsec elapsed time 39 microsec CAMAC READ single action takes 38 microsec. program execution : loop count = 42 elapsed time 0 sec, 6 microsec overhead time 1 microsec elapsed time 0 sec, 39347 microsec elapsed time 39 microsec CAMAC READ single action takes 38 microsec. program execution : loop count = 43 elapsed time 0 sec, 7 microsec overhead time 1 microsec elapsed time 0 sec, 39397 microsec elapsed time 39 microsec CAMAC READ single action takes 38 microsec. program execution : loop count = 44 elapsed time 0 sec, 7 microsec overhead time 1 microsec elapsed time 0 sec, 39323 microsec elapsed time 39 microsec CAMAC READ single action takes 38 microsec. program execution : loop count = 45 elapsed time 0 sec, 7 microsec overhead time 1 microsec elapsed time 0 sec, 39371 microsec elapsed time 39 microsec CAMAC READ single action takes 38 microsec. program execution : loop count = 46 elapsed time 0 sec, 6 microsec overhead time 1 microsec elapsed time 0 sec, 39356 microsec elapsed time 39 microsec CAMAC READ single action takes 38 microsec. program execution : loop count = 47 elapsed time 0 sec, 7 microsec overhead time 1 microsec elapsed time 0 sec, 39387 microsec elapsed time 39 microsec CAMAC READ single action takes 38 microsec. program execution : loop count = 48 elapsed time 0 sec, 7 microsec overhead time 1 microsec elapsed time 0 sec, 39345 microsec elapsed time 39 microsec CAMAC READ single action takes 38 microsec. program execution : loop count = 49 elapsed time 0 sec, 7 microsec overhead time 1 microsec elapsed time 0 sec, 39381 microsec elapsed time 39 microsec CAMAC READ single action takes 38 microsec. program execution : loop count = 50 elapsed time 0 sec, 6 microsec overhead time 1 microsec elapsed time 0 sec, 39366 microsec elapsed time 39 microsec CAMAC READ single action takes 38 microsec. program execution : loop count = 51 elapsed time 0 sec, 6 microsec overhead time 1 microsec elapsed time 0 sec, 39443 microsec elapsed time 39 microsec CAMAC READ single action takes 38 microsec. program execution : loop count = 52 elapsed time 0 sec, 7 microsec overhead time 1 microsec elapsed time 0 sec, 39368 microsec elapsed time 39 microsec CAMAC READ single action takes 38 microsec. program execution : loop count = 53 elapsed time 0 sec, 6 microsec overhead time 1 microsec elapsed time 0 sec, 39366 microsec elapsed time 39 microsec CAMAC READ single action takes 38 microsec. program execution : loop count = 54 elapsed time 0 sec, 6 microsec overhead time 1 microsec elapsed time 0 sec, 39342 microsec elapsed time 39 microsec CAMAC READ single action takes 38 microsec. program execution : loop count = 55 elapsed time 0 sec, 7 microsec overhead time 1 microsec elapsed time 0 sec, 39352 microsec elapsed time 39 microsec CAMAC READ single action takes 38 microsec. program execution : loop count = 56 elapsed time 0 sec, 7 microsec overhead time 1 microsec elapsed time 0 sec, 39385 microsec elapsed time 39 microsec CAMAC READ single action takes 38 microsec. program execution : loop count = 57 elapsed time 0 sec, 7 microsec overhead time 1 microsec elapsed time 0 sec, 39382 microsec elapsed time 39 microsec CAMAC READ single action takes 38 microsec. program execution : loop count = 58 elapsed time 0 sec, 7 microsec overhead time 1 microsec elapsed time 0 sec, 39359 microsec elapsed time 39 microsec CAMAC READ single action takes 38 microsec. program execution : loop count = 59 elapsed time 0 sec, 6 microsec overhead time 1 microsec elapsed time 0 sec, 39348 microsec elapsed time 39 microsec CAMAC READ single action takes 38 microsec. program execution : loop count = 60 elapsed time 0 sec, 6 microsec overhead time 1 microsec elapsed time 0 sec, 39393 microsec elapsed time 39 microsec CAMAC READ single action takes 38 microsec. program execution : loop count = 61 elapsed time 0 sec, 7 microsec overhead time 1 microsec elapsed time 0 sec, 39336 microsec elapsed time 39 microsec CAMAC READ single action takes 38 microsec. program execution : loop count = 62 elapsed time 0 sec, 6 microsec overhead time 1 microsec elapsed time 0 sec, 39375 microsec elapsed time 39 microsec CAMAC READ single action takes 38 microsec. program execution : loop count = 63 elapsed time 0 sec, 7 microsec overhead time 1 microsec elapsed time 0 sec, 39383 microsec elapsed time 39 microsec CAMAC READ single action takes 38 microsec. program execution : loop count = 64 elapsed time 0 sec, 6 microsec overhead time 1 microsec elapsed time 0 sec, 39400 microsec elapsed time 39 microsec CAMAC READ single action takes 38 microsec. program execution : loop count = 65 elapsed time 0 sec, 7 microsec overhead time 1 microsec elapsed time 0 sec, 39356 microsec elapsed time 39 microsec CAMAC READ single action takes 38 microsec. program execution : loop count = 66 elapsed time 0 sec, 6 microsec overhead time 1 microsec elapsed time 0 sec, 39398 microsec elapsed time 39 microsec CAMAC READ single action takes 38 microsec. program execution : loop count = 67 elapsed time 0 sec, 7 microsec overhead time 1 microsec elapsed time 0 sec, 39375 microsec elapsed time 39 microsec CAMAC READ single action takes 38 microsec. program execution : loop count = 68 elapsed time 0 sec, 6 microsec overhead time 1 microsec elapsed time 0 sec, 39365 microsec elapsed time 39 microsec CAMAC READ single action takes 38 microsec. program execution : loop count = 69 elapsed time 0 sec, 6 microsec overhead time 1 microsec elapsed time 0 sec, 39325 microsec elapsed time 39 microsec CAMAC READ single action takes 38 microsec. program execution : loop count = 70 elapsed time 0 sec, 6 microsec overhead time 1 microsec elapsed time 0 sec, 39312 microsec elapsed time 39 microsec CAMAC READ single action takes 38 microsec. program execution : loop count = 71 elapsed time 0 sec, 7 microsec overhead time 1 microsec elapsed time 0 sec, 39341 microsec elapsed time 39 microsec CAMAC READ single action takes 38 microsec. program execution : loop count = 72 elapsed time 0 sec, 6 microsec overhead time 1 microsec elapsed time 0 sec, 39384 microsec elapsed time 39 microsec CAMAC READ single action takes 38 microsec. program execution : loop count = 73 elapsed time 0 sec, 6 microsec overhead time 1 microsec elapsed time 0 sec, 39440 microsec elapsed time 39 microsec CAMAC READ single action takes 38 microsec. program execution : loop count = 74 elapsed time 0 sec, 6 microsec overhead time 1 microsec elapsed time 0 sec, 39368 microsec elapsed time 39 microsec CAMAC READ single action takes 38 microsec. program execution : loop count = 75 elapsed time 0 sec, 6 microsec overhead time 1 microsec elapsed time 0 sec, 39333 microsec elapsed time 39 microsec CAMAC READ single action takes 38 microsec. program execution : loop count = 76 elapsed time 0 sec, 7 microsec overhead time 1 microsec elapsed time 0 sec, 39349 microsec elapsed time 39 microsec CAMAC READ single action takes 38 microsec. program execution : loop count = 77 elapsed time 0 sec, 7 microsec overhead time 1 microsec elapsed time 0 sec, 39402 microsec elapsed time 39 microsec CAMAC READ single action takes 38 microsec. program execution : loop count = 78 elapsed time 0 sec, 7 microsec overhead time 1 microsec elapsed time 0 sec, 39368 microsec elapsed time 39 microsec CAMAC READ single action takes 38 microsec. program execution : loop count = 79 elapsed time 0 sec, 6 microsec overhead time 1 microsec elapsed time 0 sec, 39419 microsec elapsed time 39 microsec CAMAC READ single action takes 38 microsec. program execution : loop count = 80 elapsed time 0 sec, 7 microsec overhead time 1 microsec elapsed time 0 sec, 39359 microsec elapsed time 39 microsec CAMAC READ single action takes 38 microsec. program execution : loop count = 81 elapsed time 0 sec, 6 microsec overhead time 1 microsec elapsed time 0 sec, 39380 microsec elapsed time 39 microsec CAMAC READ single action takes 38 microsec. program execution : loop count = 82 elapsed time 0 sec, 7 microsec overhead time 1 microsec elapsed time 0 sec, 39372 microsec elapsed time 39 microsec CAMAC READ single action takes 38 microsec. program execution : loop count = 83 elapsed time 0 sec, 6 microsec overhead time 1 microsec elapsed time 0 sec, 39349 microsec elapsed time 39 microsec CAMAC READ single action takes 38 microsec. program execution : loop count = 84 elapsed time 0 sec, 6 microsec overhead time 1 microsec elapsed time 0 sec, 39373 microsec elapsed time 39 microsec CAMAC READ single action takes 38 microsec. program execution : loop count = 85 elapsed time 0 sec, 7 microsec overhead time 1 microsec elapsed time 0 sec, 39315 microsec elapsed time 39 microsec CAMAC READ single action takes 38 microsec. program execution : loop count = 86 elapsed time 0 sec, 7 microsec overhead time 1 microsec elapsed time 0 sec, 39327 microsec elapsed time 39 microsec CAMAC READ single action takes 38 microsec. program execution : loop count = 87 elapsed time 0 sec, 6 microsec overhead time 1 microsec elapsed time 0 sec, 39377 microsec elapsed time 39 microsec CAMAC READ single action takes 38 microsec. program execution : loop count = 88 elapsed time 0 sec, 7 microsec overhead time 1 microsec elapsed time 0 sec, 39320 microsec elapsed time 39 microsec CAMAC READ single action takes 38 microsec. program execution : loop count = 89 elapsed time 0 sec, 6 microsec overhead time 1 microsec elapsed time 0 sec, 39461 microsec elapsed time 39 microsec CAMAC READ single action takes 38 microsec. program execution : loop count = 90 elapsed time 0 sec, 7 microsec overhead time 1 microsec elapsed time 0 sec, 39333 microsec elapsed time 39 microsec CAMAC READ single action takes 38 microsec. program execution : loop count = 91 elapsed time 0 sec, 7 microsec overhead time 1 microsec elapsed time 0 sec, 39390 microsec elapsed time 39 microsec CAMAC READ single action takes 38 microsec. program execution : loop count = 92 elapsed time 0 sec, 6 microsec overhead time 1 microsec elapsed time 0 sec, 39370 microsec elapsed time 39 microsec CAMAC READ single action takes 38 microsec. program execution : loop count = 93 elapsed time 0 sec, 6 microsec overhead time 1 microsec elapsed time 0 sec, 39347 microsec elapsed time 39 microsec CAMAC READ single action takes 38 microsec. program execution : loop count = 94 elapsed time 0 sec, 6 microsec overhead time 1 microsec elapsed time 0 sec, 39356 microsec elapsed time 39 microsec CAMAC READ single action takes 38 microsec. program execution : loop count = 95 elapsed time 0 sec, 7 microsec overhead time 1 microsec elapsed time 0 sec, 39361 microsec elapsed time 39 microsec CAMAC READ single action takes 38 microsec. program execution : loop count = 96 elapsed time 0 sec, 6 microsec overhead time 1 microsec elapsed time 0 sec, 39415 microsec elapsed time 39 microsec CAMAC READ single action takes 38 microsec. program execution : loop count = 97 elapsed time 0 sec, 6 microsec overhead time 1 microsec elapsed time 0 sec, 39385 microsec elapsed time 39 microsec CAMAC READ single action takes 38 microsec. program execution : loop count = 98 elapsed time 0 sec, 7 microsec overhead time 1 microsec elapsed time 0 sec, 39393 microsec elapsed time 39 microsec CAMAC READ single action takes 38 microsec. program execution : loop count = 99 elapsed time 0 sec, 7 microsec overhead time 1 microsec elapsed time 0 sec, 39385 microsec elapsed time 39 microsec CAMAC READ single action takes 38 microsec. program execution : loop count = 100 elapsed time 0 sec, 7 microsec overhead time 1 microsec elapsed time 0 sec, 39399 microsec elapsed time 39 microsec CAMAC READ single action takes 38 microsec. program stop onl50t# camacシングルアクション read の実行時間測定プログラムは正常に走った。 (7-1). camint_measure1 を実行する onl50t# priocntl -e -c RT -p 55 camint_measure1 ^Conl50t# 割り込みがかからない。 問題個所を特定するためのトレース文を付加する。 onl50t[97]% vi camint_measure1.c : /* E.Inoue */ printf("CAM_EnableLAM pass\n"); /* end */ for( i = 0; i < LOOP; i++ ) { status = CAMAC(NAF(INTREG,0,26), &dumy, &q, &x ); /* printf("child: loop count = %d\n", i+1); */ /* E.Inoue */ printf("NAF(INTREG,0,26) pass\n"); /* end */ kill(pid, SIGUSR1); if( status = CAM_WaitLAM(TIME_60_SEC) ) error_exit(status); get_time(&timevalue1[i]); /* E.Inoue */ printf("CAM_WaitLAM pass\n"); /* end */ status = CAMAC(NAF(INTREG,0,24), &dumy, &q, &x ); status = CAMAC(NAF(INTREG,0,9), &dumy, &q, &x ); : "camint_measure1.c" 211 lines, 5466 characters onl50t[98]% make camint_measure1 /usr/ucb/cc -DOSF1 -o camint_measure1 camint_measure1.c -I../includes -L../lib - lcamac onl50t[99]% onl50t# priocntl -e -c RT -p 55 camint_measure1 CAM_EnableLAM pass NAF(INTREG,0,26) pass ^Conl50t# LAMイネーブルの実行までは正常に実行されている。 その後の LAM待ち状態の ところで問題が起きている。 (7-1-1). camint_measure1プログラムの動作確認 camint_measure1プログラム中で割り込み信号を発生しているシグナル・ハンド ラの部分がうまく働いているかどうか調べる。 onl50t[125]% camint_measure1 CAM_EnableLAM pass NAF(INTREG,0,26) pass <--- ここで待ち状態になっている時に、killコマンドで kill(pid, SIGUSR1) pass シグナルを送ってみた。 received SIGUSR1 start received SIGUSR1 start received SIGUSR1 start received SIGUSR1 start received SIGUSR1 start received SIGUSR1 start ^Conl50t[126]% onl50t[95]% ps -ef UID PID PPID C STIME TTY TIME CMD root 0 0 0 16:50:33 ? 0:00 sched root 1 0 0 16:50:33 ? 0:00 /etc/init -r : root 786 161 0 17:56:15 ? 0:00 in.rlogind inoue 1596 342 0 15:55:58 pts/0 0:00 camint_measure1 onl50t[96]% onl50t[96]% kill -USR1 1596 onl50t[97]% !! kill -USR1 1596 onl50t[98]% !! kill -USR1 1596 onl50t[99]% !! kill -USR1 1596 onl50t[100]% !! kill -USR1 1596 onl50t[101]% !! kill -USR1 1596 onl50t[101]% camint_measure1プログラムが待ち状態になっている時に、killコマンドで シグナルを送ると割り込みがかかり正しく処理されるのが確認できた。 確認は k2917、および K3922モジュールの LED でおこなった。 以上のことから、問題は camint_measure1プログラムのシグナル処理の 部分にあることがわかった。 (7-1-2). camint_measure1ファイルを修正 onl50t[143]% vi make camint_measure1 : for( i = 0; i < LOOP; i++ ) { status = CAMAC(NAF(INTREG,0,26), &dumy, &q, &x ); /* printf("child: loop count = %d\n", i+1); */ /* E.Inoue */ printf("NAF(INTREG,0,26) pass\n"); /* end */ /* kill(pid, SIGUSR1); */ kill(getpid(), SIGUSR1); /* E.Inoue */ printf("kill(getpid(), SIGUSR1) pass\n"); /* end */ if( status = CAM_WaitLAM(TIME_60_SEC) ) : onl50t[144]% onl50t[144]% make camint_measure1 /usr/ucb/cc -DOSF1 -o camint_measure1 camint_measure1.c -I../includes -L../lib - lcamac onl50t[145]% (7-1-3). camint_measure1プログラムを実行 onl50t[145]% camint_measure1 CAM_EnableLAM pass NAF(INTREG,0,26) pass received SIGUSR1 start kill(getpid(), SIGUSR1) pass CAM_WaitLAM pass NAF(INTREG,0,26) pass received SIGUSR1 start kill(getpid(), SIGUSR1) pass CAM_WaitLAM pass NAF(INTREG,0,26) pass received SIGUSR1 start kill(getpid(), SIGUSR1) pass CAM_WaitLAM pass NAF(INTREG,0,26) pass received SIGUSR1 start kill(getpid(), SIGUSR1) pass CAM_WaitLAM pass NAF(INTREG,0,26) pass received SIGUSR1 start kill(getpid(), SIGUSR1) pass CAM_WaitLAM pass NAF(INTREG,0,26) pass received SIGUSR1 start kill(getpid(), SIGUSR1) pass CAM_WaitLAM pass NAF(INTREG,0,26) pass received SIGUSR1 start kill(getpid(), SIGUSR1) pass CAM_WaitLAM pass NAF(INTREG,0,26) pass received SIGUSR1 start kill(getpid(), SIGUSR1) pass CAM_WaitLAM pass NAF(INTREG,0,26) pass received SIGUSR1 start kill(getpid(), SIGUSR1) pass CAM_WaitLAM pass NAF(INTREG,0,26) pass received SIGUSR1 start kill(getpid(), SIGUSR1) pass CAM_WaitLAM pass CAM_WaitLAM takes 172 microsec. onl50t[146]% onl50t[146]% onl50t[146]% camint_measure1 CAM_EnableLAM pass NAF(INTREG,0,26) pass received SIGUSR1 start kill(getpid(), SIGUSR1) pass CAM_WaitLAM pass NAF(INTREG,0,26) pass received SIGUSR1 start kill(getpid(), SIGUSR1) pass CAM_WaitLAM pass NAF(INTREG,0,26) pass received SIGUSR1 start kill(getpid(), SIGUSR1) pass CAM_WaitLAM pass NAF(INTREG,0,26) pass received SIGUSR1 start kill(getpid(), SIGUSR1) pass CAM_WaitLAM pass NAF(INTREG,0,26) pass received SIGUSR1 start kill(getpid(), SIGUSR1) pass CAM_WaitLAM pass NAF(INTREG,0,26) pass received SIGUSR1 start kill(getpid(), SIGUSR1) pass CAM_WaitLAM pass NAF(INTREG,0,26) pass received SIGUSR1 start kill(getpid(), SIGUSR1) pass CAM_WaitLAM pass NAF(INTREG,0,26) pass received SIGUSR1 start kill(getpid(), SIGUSR1) pass CAM_WaitLAM pass NAF(INTREG,0,26) pass received SIGUSR1 start kill(getpid(), SIGUSR1) pass CAM_WaitLAM pass NAF(INTREG,0,26) pass received SIGUSR1 start kill(getpid(), SIGUSR1) pass CAM_WaitLAM pass CAM_WaitLAM takes 172 microsec. onl50t[147]% onl50t[147]% onl50t[147]% camint_measure1 CAM_EnableLAM pass NAF(INTREG,0,26) pass received SIGUSR1 start kill(getpid(), SIGUSR1) pass ^Conl50t[148]% わかりやすくするために、トレースのための文をもっと細かくしてみる。 onl50t[151]% camint_measure1 CAM_EnableLAM pass NAF(INTREG,0,26) pass received SIGUSR1 start get_time pass CAMAC(write_pulse, &dumy, &q, &x) pass return kill(getpid(), SIGUSR1) pass CAM_WaitLAM pass NAF(INTREG,0,26) pass received SIGUSR1 start get_time pass CAMAC(write_pulse, &dumy, &q, &x) pass return kill(getpid(), SIGUSR1) pass CAM_WaitLAM pass NAF(INTREG,0,26) pass received SIGUSR1 start get_time pass CAMAC(write_pulse, &dumy, &q, &x) pass return kill(getpid(), SIGUSR1) pass CAM_WaitLAM pass NAF(INTREG,0,26) pass received SIGUSR1 start get_time pass CAMAC(write_pulse, &dumy, &q, &x) pass return kill(getpid(), SIGUSR1) pass CAM_WaitLAM pass NAF(INTREG,0,26) pass received SIGUSR1 start get_time pass CAMAC(write_pulse, &dumy, &q, &x) pass return kill(getpid(), SIGUSR1) pass CAM_WaitLAM pass NAF(INTREG,0,26) pass received SIGUSR1 start get_time pass CAMAC(write_pulse, &dumy, &q, &x) pass return kill(getpid(), SIGUSR1) pass CAM_WaitLAM pass NAF(INTREG,0,26) pass received SIGUSR1 start get_time pass CAMAC(write_pulse, &dumy, &q, &x) pass return kill(getpid(), SIGUSR1) pass CAM_WaitLAM pass NAF(INTREG,0,26) pass received SIGUSR1 start get_time pass CAMAC(write_pulse, &dumy, &q, &x) pass return kill(getpid(), SIGUSR1) pass CAM_WaitLAM pass NAF(INTREG,0,26) pass received SIGUSR1 start get_time pass CAMAC(write_pulse, &dumy, &q, &x) pass return kill(getpid(), SIGUSR1) pass CAM_WaitLAM pass NAF(INTREG,0,26) pass received SIGUSR1 start get_time pass CAMAC(write_pulse, &dumy, &q, &x) pass return kill(getpid(), SIGUSR1) pass CAM_WaitLAM pass CAM_WaitLAM takes 300 microsec. onl50t[152]% onl50t[152]% onl50t[152]% camint_measure1 CAM_EnableLAM pass NAF(INTREG,0,26) pass received SIGUSR1 start get_time pass CAMAC(write_pulse, &dumy, &q, &x) pass return kill(getpid(), SIGUSR1) pass ^Conl50t[153]% camint_measure1プログラムの実行は最後まで実行できることもあるが、途中で CAM_WaitLAM のところで待ち状態になることもある。 この時、K2917 の LEDは LAM が点灯したままになっており、LAM割り込みがかかっているが CPU が 処理してくれない状態になっている。 その後のトライの結果から、 (1). camint_measure1プログラムを実行後、すぐにcamint_measure1プログラ ムを再実行すると、上記の待ち状態になる。 (2). 上記の待ち状態になって実行を中断した後数十秒後にcamint_measure1 プログラムをそのまま実行すると正常に実行できる。 ということを確認した。 (7-1-4). トレース用の文を追加して camint_measure1.cプログラムを実行 onl50t[198]% camint_measure1 main: CAM_EnableLAM pass main: NAF(INTREG,0,26) pass sig_pulse: received SIGUSR1 sig_pulse: start sig_pulse: get_time pass sig_pulse: CAMAC(write_pulse, &dumy, &q, &x) pass sig_pulse: return main: kill(getpid(), SIGUSR1) pass main: CAM_WaitLAM pass main: get_time(&timevalue1[i]) pass main: NAF(INTREG,0,24) pass main: NAF(INTREG,0,9) pass main: stop timevalue0[0].tv_usec = 0x2b2cf, timevalue1[0].tv_usec = 0x2b458 timevalue0[1].tv_usec = 0x0, timevalue1[1].tv_usec = 0x0 timevalue0[2].tv_usec = 0x0, timevalue1[2].tv_usec = 0x0 main: NAF(INTREG,0,26) pass sig_pulse: received SIGUSR1 sig_pulse: start sig_pulse: get_time pass sig_pulse: CAMAC(write_pulse, &dumy, &q, &x) pass sig_pulse: return main: kill(getpid(), SIGUSR1) pass main: CAM_WaitLAM pass main: get_time(&timevalue1[i]) pass main: NAF(INTREG,0,24) pass main: NAF(INTREG,0,9) pass main: stop timevalue0[0].tv_usec = 0x2b2cf, timevalue1[0].tv_usec = 0x2b458 timevalue0[1].tv_usec = 0x2b65a, timevalue1[1].tv_usec = 0x2b797 timevalue0[2].tv_usec = 0x0, timevalue1[2].tv_usec = 0x0 main: NAF(INTREG,0,26) pass sig_pulse: received SIGUSR1 sig_pulse: start sig_pulse: get_time pass sig_pulse: CAMAC(write_pulse, &dumy, &q, &x) pass sig_pulse: return main: kill(getpid(), SIGUSR1) pass main: CAM_WaitLAM pass main: get_time(&timevalue1[i]) pass main: NAF(INTREG,0,24) pass main: NAF(INTREG,0,9) pass main: stop timevalue0[0].tv_usec = 0x2b2cf, timevalue1[0].tv_usec = 0x2b458 timevalue0[1].tv_usec = 0x2b65a, timevalue1[1].tv_usec = 0x2b797 timevalue0[2].tv_usec = 0x2b98b, timevalue1[2].tv_usec = 0x2bac5 main: NAF(INTREG,0,26) pass sig_pulse: received SIGUSR1 sig_pulse: start sig_pulse: get_time pass sig_pulse: CAMAC(write_pulse, &dumy, &q, &x) pass sig_pulse: return main: kill(getpid(), SIGUSR1) pass main: CAM_WaitLAM pass main: get_time(&timevalue1[i]) pass main: NAF(INTREG,0,24) pass main: NAF(INTREG,0,9) pass main: stop timevalue0[0].tv_usec = 0x2b2cf, timevalue1[0].tv_usec = 0x2b458 timevalue0[1].tv_usec = 0x2b65a, timevalue1[1].tv_usec = 0x2b797 timevalue0[2].tv_usec = 0x2b98b, timevalue1[2].tv_usec = 0x2bac5 main: NAF(INTREG,0,26) pass sig_pulse: received SIGUSR1 sig_pulse: start sig_pulse: get_time pass sig_pulse: CAMAC(write_pulse, &dumy, &q, &x) pass sig_pulse: return main: kill(getpid(), SIGUSR1) pass main: CAM_WaitLAM pass main: get_time(&timevalue1[i]) pass main: NAF(INTREG,0,24) pass main: NAF(INTREG,0,9) pass main: stop timevalue0[0].tv_usec = 0x2b2cf, timevalue1[0].tv_usec = 0x2b458 timevalue0[1].tv_usec = 0x2b65a, timevalue1[1].tv_usec = 0x2b797 timevalue0[2].tv_usec = 0x2b98b, timevalue1[2].tv_usec = 0x2bac5 main: NAF(INTREG,0,26) pass sig_pulse: received SIGUSR1 sig_pulse: start sig_pulse: get_time pass sig_pulse: CAMAC(write_pulse, &dumy, &q, &x) pass sig_pulse: return main: kill(getpid(), SIGUSR1) pass main: CAM_WaitLAM pass main: get_time(&timevalue1[i]) pass main: NAF(INTREG,0,24) pass main: NAF(INTREG,0,9) pass main: stop timevalue0[0].tv_usec = 0x2b2cf, timevalue1[0].tv_usec = 0x2b458 timevalue0[1].tv_usec = 0x2b65a, timevalue1[1].tv_usec = 0x2b797 timevalue0[2].tv_usec = 0x2b98b, timevalue1[2].tv_usec = 0x2bac5 main: NAF(INTREG,0,26) pass sig_pulse: received SIGUSR1 sig_pulse: start sig_pulse: get_time pass sig_pulse: CAMAC(write_pulse, &dumy, &q, &x) pass sig_pulse: return main: kill(getpid(), SIGUSR1) pass main: CAM_WaitLAM pass main: get_time(&timevalue1[i]) pass main: NAF(INTREG,0,24) pass main: NAF(INTREG,0,9) pass main: stop timevalue0[0].tv_usec = 0x2b2cf, timevalue1[0].tv_usec = 0x2b458 timevalue0[1].tv_usec = 0x2b65a, timevalue1[1].tv_usec = 0x2b797 timevalue0[2].tv_usec = 0x2b98b, timevalue1[2].tv_usec = 0x2bac5 main: NAF(INTREG,0,26) pass sig_pulse: received SIGUSR1 sig_pulse: start sig_pulse: get_time pass sig_pulse: CAMAC(write_pulse, &dumy, &q, &x) pass sig_pulse: return main: kill(getpid(), SIGUSR1) pass main: CAM_WaitLAM pass main: get_time(&timevalue1[i]) pass main: NAF(INTREG,0,24) pass main: NAF(INTREG,0,9) pass main: stop timevalue0[0].tv_usec = 0x2b2cf, timevalue1[0].tv_usec = 0x2b458 timevalue0[1].tv_usec = 0x2b65a, timevalue1[1].tv_usec = 0x2b797 timevalue0[2].tv_usec = 0x2b98b, timevalue1[2].tv_usec = 0x2bac5 main: NAF(INTREG,0,26) pass sig_pulse: received SIGUSR1 sig_pulse: start sig_pulse: get_time pass sig_pulse: CAMAC(write_pulse, &dumy, &q, &x) pass sig_pulse: return main: kill(getpid(), SIGUSR1) pass main: CAM_WaitLAM pass main: get_time(&timevalue1[i]) pass main: NAF(INTREG,0,24) pass main: NAF(INTREG,0,9) pass main: stop timevalue0[0].tv_usec = 0x2b2cf, timevalue1[0].tv_usec = 0x2b458 timevalue0[1].tv_usec = 0x2b65a, timevalue1[1].tv_usec = 0x2b797 timevalue0[2].tv_usec = 0x2b98b, timevalue1[2].tv_usec = 0x2bac5 main: NAF(INTREG,0,26) pass sig_pulse: received SIGUSR1 sig_pulse: start sig_pulse: get_time pass sig_pulse: CAMAC(write_pulse, &dumy, &q, &x) pass sig_pulse: return main: kill(getpid(), SIGUSR1) pass main: CAM_WaitLAM pass main: get_time(&timevalue1[i]) pass main: NAF(INTREG,0,24) pass main: NAF(INTREG,0,9) pass main: stop timevalue0[0].tv_usec = 0x2b2cf, timevalue1[0].tv_usec = 0x2b458 timevalue0[1].tv_usec = 0x2b65a, timevalue1[1].tv_usec = 0x2b797 timevalue0[2].tv_usec = 0x2b98b, timevalue1[2].tv_usec = 0x2bac5 timevalue0[0].tv_usec = 0x2b2cf, timevalue1[0].tv_usec = 0x2b458 timevalue0[1].tv_usec = 0x2b65a, timevalue1[1].tv_usec = 0x2b797 timevalue0[2].tv_usec = 0x2b98b, timevalue1[2].tv_usec = 0x2bac5 CAM_WaitLAM takes 333 microsec. onl50t[199]% onl50t[199]% onl50t[199]% onl50t[199]% onl50t[199]% camint_measure1 main: CAM_EnableLAM pass main: NAF(INTREG,0,26) pass sig_pulse: received SIGUSR1 sig_pulse: start sig_pulse: get_time pass sig_pulse: CAMAC(write_pulse, &dumy, &q, &x) pass sig_pulse: return main: kill(getpid(), SIGUSR1) pass ^Conl50t[200]% (7-1-5). cc.cファイルを修正、リコンパイル、リロード onl50t[173]% vi cc.c : static int cc_ioctl(dev_t dev, int cmd, int arg, int flag, cred_t *cred_p, int *rval_p) { /* register struct cc_device *cc = &ccdevice[0]; */ register struct cc_device *cc; : cc->cur_crate = cc->data1; break; case CCIOC_WAIT_LAM : mutex_enter(&cc->mutex); /* start MUTEX */ cc->interrupt = 0; cc->k->lamc = CC_INT_AUTO_CLEAR | CC_INT_ENABLE | intrpri; /* lock out clock */ /* by E.Inoue s = spl5(); */ if (cc->interrupt & CC_INT_LAM) { cc->interrupt &= ~CC_INT_LAM; return 0; } /* mutex_enter(&cc->mutex); */ /* start MUTEX */ /* E.Inoue cc->timeout_id = timeout(cc_timeout, (caddr_t)&unit, data * hz); */ cc->timeout_id = timeout(cc_timeout, (caddr_t)&unit, cc->data1 * hz); /* mutex_enter(&cc->mutex); */ /* start MUTEX */ "cc.c" 3048 lines, 78849 characters onl50t[173]% make ./script/cc_build.sh [Building for sun4u] rm -f cc.o onl50t[174]% onl50t# source /.cshrc onl50t# make unload ./script/cc_unload.sh [Removing CAMAC device driver] [Removing CAMAC device driver from system] [Deleting CAMAC device files] onl50t# make load ./script/cc_load.sh [Installing CAMAC device driver] [Adding CAMAC device driver to system] [Configuring CAMAC device driver] [Making CAMAC device files] sun4u onl50t# (7-1-6). camint_measure1プログラムを実行 onl50t[294]% camint_measure1 main: CAM_EnableLAM pass main: NAF(INTREG,0,26) pass sig_pulse: received SIGUSR1 sig_pulse: start sig_pulse: get_time pass sig_pulse: CAMAC(write_pulse, &dumy, &q, &x) pass sig_pulse: return main: kill(getpid(), SIGUSR1) pass main: CAM_WaitLAM pass main: get_time(&timevalue1[i]) pass main: NAF(INTREG,0,24) pass main: NAF(INTREG,0,9) pass main: stop timevalue0[0].tv_usec = 0x6aae6, timevalue1[0].tv_usec = 0x6ac66 timevalue0[1].tv_usec = 0x0, timevalue1[1].tv_usec = 0x0 timevalue0[2].tv_usec = 0x0, timevalue1[2].tv_usec = 0x0 main: NAF(INTREG,0,26) pass sig_pulse: received SIGUSR1 sig_pulse: start sig_pulse: get_time pass sig_pulse: CAMAC(write_pulse, &dumy, &q, &x) pass sig_pulse: return main: kill(getpid(), SIGUSR1) pass main: CAM_WaitLAM pass main: get_time(&timevalue1[i]) pass main: NAF(INTREG,0,24) pass main: NAF(INTREG,0,9) pass main: stop timevalue0[0].tv_usec = 0x6aae6, timevalue1[0].tv_usec = 0x6ac66 timevalue0[1].tv_usec = 0x6ae65, timevalue1[1].tv_usec = 0x6afa0 timevalue0[2].tv_usec = 0x0, timevalue1[2].tv_usec = 0x0 main: NAF(INTREG,0,26) pass sig_pulse: received SIGUSR1 sig_pulse: start sig_pulse: get_time pass sig_pulse: CAMAC(write_pulse, &dumy, &q, &x) pass sig_pulse: return main: kill(getpid(), SIGUSR1) pass main: CAM_WaitLAM pass main: get_time(&timevalue1[i]) pass main: NAF(INTREG,0,24) pass main: NAF(INTREG,0,9) pass main: stop timevalue0[0].tv_usec = 0x6aae6, timevalue1[0].tv_usec = 0x6ac66 timevalue0[1].tv_usec = 0x6ae65, timevalue1[1].tv_usec = 0x6afa0 timevalue0[2].tv_usec = 0x6b192, timevalue1[2].tv_usec = 0x6b2cc main: NAF(INTREG,0,26) pass sig_pulse: received SIGUSR1 sig_pulse: start sig_pulse: get_time pass sig_pulse: CAMAC(write_pulse, &dumy, &q, &x) pass sig_pulse: return main: kill(getpid(), SIGUSR1) pass main: CAM_WaitLAM pass main: get_time(&timevalue1[i]) pass main: NAF(INTREG,0,24) pass main: NAF(INTREG,0,9) pass main: stop timevalue0[0].tv_usec = 0x6aae6, timevalue1[0].tv_usec = 0x6ac66 timevalue0[1].tv_usec = 0x6ae65, timevalue1[1].tv_usec = 0x6afa0 timevalue0[2].tv_usec = 0x6b192, timevalue1[2].tv_usec = 0x6b2cc main: NAF(INTREG,0,26) pass sig_pulse: received SIGUSR1 sig_pulse: start sig_pulse: get_time pass sig_pulse: CAMAC(write_pulse, &dumy, &q, &x) pass sig_pulse: return main: kill(getpid(), SIGUSR1) pass main: CAM_WaitLAM pass main: get_time(&timevalue1[i]) pass main: NAF(INTREG,0,24) pass main: NAF(INTREG,0,9) pass main: stop timevalue0[0].tv_usec = 0x6aae6, timevalue1[0].tv_usec = 0x6ac66 timevalue0[1].tv_usec = 0x6ae65, timevalue1[1].tv_usec = 0x6afa0 timevalue0[2].tv_usec = 0x6b192, timevalue1[2].tv_usec = 0x6b2cc main: NAF(INTREG,0,26) pass sig_pulse: received SIGUSR1 sig_pulse: start sig_pulse: get_time pass sig_pulse: CAMAC(write_pulse, &dumy, &q, &x) pass sig_pulse: return main: kill(getpid(), SIGUSR1) pass main: CAM_WaitLAM pass main: get_time(&timevalue1[i]) pass main: NAF(INTREG,0,24) pass main: NAF(INTREG,0,9) pass main: stop timevalue0[0].tv_usec = 0x6aae6, timevalue1[0].tv_usec = 0x6ac66 timevalue0[1].tv_usec = 0x6ae65, timevalue1[1].tv_usec = 0x6afa0 timevalue0[2].tv_usec = 0x6b192, timevalue1[2].tv_usec = 0x6b2cc main: NAF(INTREG,0,26) pass sig_pulse: received SIGUSR1 sig_pulse: start sig_pulse: get_time pass sig_pulse: CAMAC(write_pulse, &dumy, &q, &x) pass sig_pulse: return main: kill(getpid(), SIGUSR1) pass main: CAM_WaitLAM pass main: get_time(&timevalue1[i]) pass main: NAF(INTREG,0,24) pass main: NAF(INTREG,0,9) pass main: stop timevalue0[0].tv_usec = 0x6aae6, timevalue1[0].tv_usec = 0x6ac66 timevalue0[1].tv_usec = 0x6ae65, timevalue1[1].tv_usec = 0x6afa0 timevalue0[2].tv_usec = 0x6b192, timevalue1[2].tv_usec = 0x6b2cc main: NAF(INTREG,0,26) pass sig_pulse: received SIGUSR1 sig_pulse: start sig_pulse: get_time pass sig_pulse: CAMAC(write_pulse, &dumy, &q, &x) pass sig_pulse: return main: kill(getpid(), SIGUSR1) pass main: CAM_WaitLAM pass main: get_time(&timevalue1[i]) pass main: NAF(INTREG,0,24) pass main: NAF(INTREG,0,9) pass main: stop timevalue0[0].tv_usec = 0x6aae6, timevalue1[0].tv_usec = 0x6ac66 timevalue0[1].tv_usec = 0x6ae65, timevalue1[1].tv_usec = 0x6afa0 timevalue0[2].tv_usec = 0x6b192, timevalue1[2].tv_usec = 0x6b2cc main: NAF(INTREG,0,26) pass sig_pulse: received SIGUSR1 sig_pulse: start sig_pulse: get_time pass sig_pulse: CAMAC(write_pulse, &dumy, &q, &x) pass sig_pulse: return main: kill(getpid(), SIGUSR1) pass main: CAM_WaitLAM pass main: get_time(&timevalue1[i]) pass main: NAF(INTREG,0,24) pass main: NAF(INTREG,0,9) pass main: stop timevalue0[0].tv_usec = 0x6aae6, timevalue1[0].tv_usec = 0x6ac66 timevalue0[1].tv_usec = 0x6ae65, timevalue1[1].tv_usec = 0x6afa0 timevalue0[2].tv_usec = 0x6b192, timevalue1[2].tv_usec = 0x6b2cc main: NAF(INTREG,0,26) pass sig_pulse: received SIGUSR1 sig_pulse: start sig_pulse: get_time pass sig_pulse: CAMAC(write_pulse, &dumy, &q, &x) pass sig_pulse: return main: kill(getpid(), SIGUSR1) pass main: CAM_WaitLAM pass main: get_time(&timevalue1[i]) pass main: NAF(INTREG,0,24) pass main: NAF(INTREG,0,9) pass main: stop timevalue0[0].tv_usec = 0x6aae6, timevalue1[0].tv_usec = 0x6ac66 timevalue0[1].tv_usec = 0x6ae65, timevalue1[1].tv_usec = 0x6afa0 timevalue0[2].tv_usec = 0x6b192, timevalue1[2].tv_usec = 0x6b2cc timevalue0[0].tv_usec = 0x6aae6, timevalue1[0].tv_usec = 0x6ac66 timevalue0[1].tv_usec = 0x6ae65, timevalue1[1].tv_usec = 0x6afa0 timevalue0[2].tv_usec = 0x6b192, timevalue1[2].tv_usec = 0x6b2cc CAM_WaitLAM takes 350 microsec. onl50t[295]% onl50t[295]% onl50t[295]% onl50t[295]% onl50t[295]% camint_measure1 main: CAM_EnableLAM pass main: NAF(INTREG,0,26) pass sig_pulse: received SIGUSR1 sig_pulse: start sig_pulse: get_time pass sig_pulse: CAMAC(write_pulse, &dumy, &q, &x) pass sig_pulse: return main: kill(getpid(), SIGUSR1) pass main: CAM_WaitLAM pass main: get_time(&timevalue1[i]) pass main: NAF(INTREG,0,24) pass main: NAF(INTREG,0,9) pass main: stop timevalue0[0].tv_usec = 0x13fe2, timevalue1[0].tv_usec = 0x1416d timevalue0[1].tv_usec = 0x0, timevalue1[1].tv_usec = 0x0 timevalue0[2].tv_usec = 0x0, timevalue1[2].tv_usec = 0x0 main: NAF(INTREG,0,26) pass sig_pulse: received SIGUSR1 sig_pulse: start sig_pulse: get_time pass sig_pulse: CAMAC(write_pulse, &dumy, &q, &x) pass sig_pulse: return main: kill(getpid(), SIGUSR1) pass main: CAM_WaitLAM pass main: get_time(&timevalue1[i]) pass main: NAF(INTREG,0,24) pass main: NAF(INTREG,0,9) pass main: stop timevalue0[0].tv_usec = 0x13fe2, timevalue1[0].tv_usec = 0x1416d timevalue0[1].tv_usec = 0x14370, timevalue1[1].tv_usec = 0x144ab timevalue0[2].tv_usec = 0x0, timevalue1[2].tv_usec = 0x0 main: NAF(INTREG,0,26) pass sig_pulse: received SIGUSR1 sig_pulse: start sig_pulse: get_time pass sig_pulse: CAMAC(write_pulse, &dumy, &q, &x) pass sig_pulse: return main: kill(getpid(), SIGUSR1) pass main: CAM_WaitLAM pass main: get_time(&timevalue1[i]) pass main: NAF(INTREG,0,24) pass main: NAF(INTREG,0,9) pass main: stop timevalue0[0].tv_usec = 0x13fe2, timevalue1[0].tv_usec = 0x1416d timevalue0[1].tv_usec = 0x14370, timevalue1[1].tv_usec = 0x144ab timevalue0[2].tv_usec = 0x1469c, timevalue1[2].tv_usec = 0x147d5 main: NAF(INTREG,0,26) pass sig_pulse: received SIGUSR1 sig_pulse: start sig_pulse: get_time pass sig_pulse: CAMAC(write_pulse, &dumy, &q, &x) pass sig_pulse: return main: kill(getpid(), SIGUSR1) pass main: CAM_WaitLAM pass main: get_time(&timevalue1[i]) pass main: NAF(INTREG,0,24) pass main: NAF(INTREG,0,9) pass main: stop timevalue0[0].tv_usec = 0x13fe2, timevalue1[0].tv_usec = 0x1416d timevalue0[1].tv_usec = 0x14370, timevalue1[1].tv_usec = 0x144ab timevalue0[2].tv_usec = 0x1469c, timevalue1[2].tv_usec = 0x147d5 main: NAF(INTREG,0,26) pass sig_pulse: received SIGUSR1 sig_pulse: start sig_pulse: get_time pass sig_pulse: CAMAC(write_pulse, &dumy, &q, &x) pass sig_pulse: return main: kill(getpid(), SIGUSR1) pass main: CAM_WaitLAM pass main: get_time(&timevalue1[i]) pass main: NAF(INTREG,0,24) pass main: NAF(INTREG,0,9) pass main: stop timevalue0[0].tv_usec = 0x13fe2, timevalue1[0].tv_usec = 0x1416d timevalue0[1].tv_usec = 0x14370, timevalue1[1].tv_usec = 0x144ab timevalue0[2].tv_usec = 0x1469c, timevalue1[2].tv_usec = 0x147d5 main: NAF(INTREG,0,26) pass sig_pulse: received SIGUSR1 sig_pulse: start sig_pulse: get_time pass sig_pulse: CAMAC(write_pulse, &dumy, &q, &x) pass sig_pulse: return main: kill(getpid(), SIGUSR1) pass main: CAM_WaitLAM pass main: get_time(&timevalue1[i]) pass main: NAF(INTREG,0,24) pass main: NAF(INTREG,0,9) pass main: stop timevalue0[0].tv_usec = 0x13fe2, timevalue1[0].tv_usec = 0x1416d timevalue0[1].tv_usec = 0x14370, timevalue1[1].tv_usec = 0x144ab timevalue0[2].tv_usec = 0x1469c, timevalue1[2].tv_usec = 0x147d5 main: NAF(INTREG,0,26) pass sig_pulse: received SIGUSR1 sig_pulse: start sig_pulse: get_time pass sig_pulse: CAMAC(write_pulse, &dumy, &q, &x) pass sig_pulse: return main: kill(getpid(), SIGUSR1) pass main: CAM_WaitLAM pass main: get_time(&timevalue1[i]) pass main: NAF(INTREG,0,24) pass main: NAF(INTREG,0,9) pass main: stop timevalue0[0].tv_usec = 0x13fe2, timevalue1[0].tv_usec = 0x1416d timevalue0[1].tv_usec = 0x14370, timevalue1[1].tv_usec = 0x144ab timevalue0[2].tv_usec = 0x1469c, timevalue1[2].tv_usec = 0x147d5 main: NAF(INTREG,0,26) pass sig_pulse: received SIGUSR1 sig_pulse: start sig_pulse: get_time pass sig_pulse: CAMAC(write_pulse, &dumy, &q, &x) pass sig_pulse: return main: kill(getpid(), SIGUSR1) pass main: CAM_WaitLAM pass main: get_time(&timevalue1[i]) pass main: NAF(INTREG,0,24) pass main: NAF(INTREG,0,9) pass main: stop timevalue0[0].tv_usec = 0x13fe2, timevalue1[0].tv_usec = 0x1416d timevalue0[1].tv_usec = 0x14370, timevalue1[1].tv_usec = 0x144ab timevalue0[2].tv_usec = 0x1469c, timevalue1[2].tv_usec = 0x147d5 main: NAF(INTREG,0,26) pass sig_pulse: received SIGUSR1 sig_pulse: start sig_pulse: get_time pass sig_pulse: CAMAC(write_pulse, &dumy, &q, &x) pass sig_pulse: return main: kill(getpid(), SIGUSR1) pass main: CAM_WaitLAM pass main: get_time(&timevalue1[i]) pass main: NAF(INTREG,0,24) pass main: NAF(INTREG,0,9) pass main: stop timevalue0[0].tv_usec = 0x13fe2, timevalue1[0].tv_usec = 0x1416d timevalue0[1].tv_usec = 0x14370, timevalue1[1].tv_usec = 0x144ab timevalue0[2].tv_usec = 0x1469c, timevalue1[2].tv_usec = 0x147d5 main: NAF(INTREG,0,26) pass sig_pulse: received SIGUSR1 sig_pulse: start sig_pulse: get_time pass sig_pulse: CAMAC(write_pulse, &dumy, &q, &x) pass sig_pulse: return main: kill(getpid(), SIGUSR1) pass main: CAM_WaitLAM pass main: get_time(&timevalue1[i]) pass main: NAF(INTREG,0,24) pass main: NAF(INTREG,0,9) pass main: stop timevalue0[0].tv_usec = 0x13fe2, timevalue1[0].tv_usec = 0x1416d timevalue0[1].tv_usec = 0x14370, timevalue1[1].tv_usec = 0x144ab timevalue0[2].tv_usec = 0x1469c, timevalue1[2].tv_usec = 0x147d5 timevalue0[0].tv_usec = 0x13fe2, timevalue1[0].tv_usec = 0x1416d timevalue0[1].tv_usec = 0x14370, timevalue1[1].tv_usec = 0x144ab timevalue0[2].tv_usec = 0x1469c, timevalue1[2].tv_usec = 0x147d5 CAM_WaitLAM takes 345 microsec. onl50t[296]% onl50t[296]% onl50t[296]% onl50t[296]% onl50t[296]% camint_measure1 main: CAM_EnableLAM pass main: NAF(INTREG,0,26) pass sig_pulse: received SIGUSR1 sig_pulse: start sig_pulse: get_time pass sig_pulse: CAMAC(write_pulse, &dumy, &q, &x) pass sig_pulse: return main: kill(getpid(), SIGUSR1) pass main: CAM_WaitLAM pass main: get_time(&timevalue1[i]) pass main: NAF(INTREG,0,24) pass main: NAF(INTREG,0,9) pass main: stop timevalue0[0].tv_usec = 0x6f657, timevalue1[0].tv_usec = 0x6f7dd timevalue0[1].tv_usec = 0x0, timevalue1[1].tv_usec = 0x0 timevalue0[2].tv_usec = 0x0, timevalue1[2].tv_usec = 0x0 main: NAF(INTREG,0,26) pass sig_pulse: received SIGUSR1 sig_pulse: start sig_pulse: get_time pass sig_pulse: CAMAC(write_pulse, &dumy, &q, &x) pass sig_pulse: return main: kill(getpid(), SIGUSR1) pass main: CAM_WaitLAM pass main: get_time(&timevalue1[i]) pass main: NAF(INTREG,0,24) pass main: NAF(INTREG,0,9) pass main: stop timevalue0[0].tv_usec = 0x6f657, timevalue1[0].tv_usec = 0x6f7dd timevalue0[1].tv_usec = 0x6f9d5, timevalue1[1].tv_usec = 0x6fb0f timevalue0[2].tv_usec = 0x0, timevalue1[2].tv_usec = 0x0 main: NAF(INTREG,0,26) pass sig_pulse: received SIGUSR1 sig_pulse: start sig_pulse: get_time pass sig_pulse: CAMAC(write_pulse, &dumy, &q, &x) pass sig_pulse: return main: kill(getpid(), SIGUSR1) pass main: CAM_WaitLAM pass main: get_time(&timevalue1[i]) pass main: NAF(INTREG,0,24) pass main: NAF(INTREG,0,9) pass main: stop timevalue0[0].tv_usec = 0x6f657, timevalue1[0].tv_usec = 0x6f7dd timevalue0[1].tv_usec = 0x6f9d5, timevalue1[1].tv_usec = 0x6fb0f timevalue0[2].tv_usec = 0x6fcff, timevalue1[2].tv_usec = 0x6fe37 main: NAF(INTREG,0,26) pass sig_pulse: received SIGUSR1 sig_pulse: start sig_pulse: get_time pass sig_pulse: CAMAC(write_pulse, &dumy, &q, &x) pass sig_pulse: return main: kill(getpid(), SIGUSR1) pass main: CAM_WaitLAM pass main: get_time(&timevalue1[i]) pass main: NAF(INTREG,0,24) pass main: NAF(INTREG,0,9) pass main: stop timevalue0[0].tv_usec = 0x6f657, timevalue1[0].tv_usec = 0x6f7dd timevalue0[1].tv_usec = 0x6f9d5, timevalue1[1].tv_usec = 0x6fb0f timevalue0[2].tv_usec = 0x6fcff, timevalue1[2].tv_usec = 0x6fe37 main: NAF(INTREG,0,26) pass sig_pulse: received SIGUSR1 sig_pulse: start sig_pulse: get_time pass sig_pulse: CAMAC(write_pulse, &dumy, &q, &x) pass sig_pulse: return main: kill(getpid(), SIGUSR1) pass main: CAM_WaitLAM pass main: get_time(&timevalue1[i]) pass main: NAF(INTREG,0,24) pass main: NAF(INTREG,0,9) pass main: stop timevalue0[0].tv_usec = 0x6f657, timevalue1[0].tv_usec = 0x6f7dd timevalue0[1].tv_usec = 0x6f9d5, timevalue1[1].tv_usec = 0x6fb0f timevalue0[2].tv_usec = 0x6fcff, timevalue1[2].tv_usec = 0x6fe37 main: NAF(INTREG,0,26) pass sig_pulse: received SIGUSR1 sig_pulse: start sig_pulse: get_time pass sig_pulse: CAMAC(write_pulse, &dumy, &q, &x) pass sig_pulse: return main: kill(getpid(), SIGUSR1) pass main: CAM_WaitLAM pass main: get_time(&timevalue1[i]) pass main: NAF(INTREG,0,24) pass main: NAF(INTREG,0,9) pass main: stop timevalue0[0].tv_usec = 0x6f657, timevalue1[0].tv_usec = 0x6f7dd timevalue0[1].tv_usec = 0x6f9d5, timevalue1[1].tv_usec = 0x6fb0f timevalue0[2].tv_usec = 0x6fcff, timevalue1[2].tv_usec = 0x6fe37 main: NAF(INTREG,0,26) pass sig_pulse: received SIGUSR1 sig_pulse: start sig_pulse: get_time pass sig_pulse: CAMAC(write_pulse, &dumy, &q, &x) pass sig_pulse: return main: kill(getpid(), SIGUSR1) pass main: CAM_WaitLAM pass main: get_time(&timevalue1[i]) pass main: NAF(INTREG,0,24) pass main: NAF(INTREG,0,9) pass main: stop timevalue0[0].tv_usec = 0x6f657, timevalue1[0].tv_usec = 0x6f7dd timevalue0[1].tv_usec = 0x6f9d5, timevalue1[1].tv_usec = 0x6fb0f timevalue0[2].tv_usec = 0x6fcff, timevalue1[2].tv_usec = 0x6fe37 main: NAF(INTREG,0,26) pass sig_pulse: received SIGUSR1 sig_pulse: start sig_pulse: get_time pass sig_pulse: CAMAC(write_pulse, &dumy, &q, &x) pass sig_pulse: return main: kill(getpid(), SIGUSR1) pass main: CAM_WaitLAM pass main: get_time(&timevalue1[i]) pass main: NAF(INTREG,0,24) pass main: NAF(INTREG,0,9) pass main: stop timevalue0[0].tv_usec = 0x6f657, timevalue1[0].tv_usec = 0x6f7dd timevalue0[1].tv_usec = 0x6f9d5, timevalue1[1].tv_usec = 0x6fb0f timevalue0[2].tv_usec = 0x6fcff, timevalue1[2].tv_usec = 0x6fe37 main: NAF(INTREG,0,26) pass sig_pulse: received SIGUSR1 sig_pulse: start sig_pulse: get_time pass sig_pulse: CAMAC(write_pulse, &dumy, &q, &x) pass sig_pulse: return main: kill(getpid(), SIGUSR1) pass main: CAM_WaitLAM pass main: get_time(&timevalue1[i]) pass main: NAF(INTREG,0,24) pass main: NAF(INTREG,0,9) pass main: stop timevalue0[0].tv_usec = 0x6f657, timevalue1[0].tv_usec = 0x6f7dd timevalue0[1].tv_usec = 0x6f9d5, timevalue1[1].tv_usec = 0x6fb0f timevalue0[2].tv_usec = 0x6fcff, timevalue1[2].tv_usec = 0x6fe37 main: NAF(INTREG,0,26) pass sig_pulse: received SIGUSR1 sig_pulse: start sig_pulse: get_time pass sig_pulse: CAMAC(write_pulse, &dumy, &q, &x) pass sig_pulse: return main: kill(getpid(), SIGUSR1) pass main: CAM_WaitLAM pass main: get_time(&timevalue1[i]) pass main: NAF(INTREG,0,24) pass main: NAF(INTREG,0,9) pass main: stop timevalue0[0].tv_usec = 0x6f657, timevalue1[0].tv_usec = 0x6f7dd timevalue0[1].tv_usec = 0x6f9d5, timevalue1[1].tv_usec = 0x6fb0f timevalue0[2].tv_usec = 0x6fcff, timevalue1[2].tv_usec = 0x6fe37 timevalue0[0].tv_usec = 0x6f657, timevalue1[0].tv_usec = 0x6f7dd timevalue0[1].tv_usec = 0x6f9d5, timevalue1[1].tv_usec = 0x6fb0f timevalue0[2].tv_usec = 0x6fcff, timevalue1[2].tv_usec = 0x6fe37 CAM_WaitLAM takes 342 microsec. onl50t[297]% onl50t[297]% onl50t[297]% onl50t[297]% onl50t[297]% camint_measure1 main: CAM_EnableLAM pass main: NAF(INTREG,0,26) pass sig_pulse: received SIGUSR1 sig_pulse: start sig_pulse: get_time pass sig_pulse: CAMAC(write_pulse, &dumy, &q, &x) pass sig_pulse: return main: kill(getpid(), SIGUSR1) pass main: CAM_WaitLAM pass main: get_time(&timevalue1[i]) pass main: NAF(INTREG,0,24) pass main: NAF(INTREG,0,9) pass main: stop timevalue0[0].tv_usec = 0xaff0f, timevalue1[0].tv_usec = 0xb008e timevalue0[1].tv_usec = 0x0, timevalue1[1].tv_usec = 0x0 timevalue0[2].tv_usec = 0x0, timevalue1[2].tv_usec = 0x0 main: NAF(INTREG,0,26) pass sig_pulse: received SIGUSR1 sig_pulse: start sig_pulse: get_time pass sig_pulse: CAMAC(write_pulse, &dumy, &q, &x) pass sig_pulse: return main: kill(getpid(), SIGUSR1) pass main: CAM_WaitLAM pass main: get_time(&timevalue1[i]) pass main: NAF(INTREG,0,24) pass main: NAF(INTREG,0,9) pass main: stop timevalue0[0].tv_usec = 0xaff0f, timevalue1[0].tv_usec = 0xb008e timevalue0[1].tv_usec = 0xb028a, timevalue1[1].tv_usec = 0xb03c3 timevalue0[2].tv_usec = 0x0, timevalue1[2].tv_usec = 0x0 main: NAF(INTREG,0,26) pass sig_pulse: received SIGUSR1 sig_pulse: start sig_pulse: get_time pass sig_pulse: CAMAC(write_pulse, &dumy, &q, &x) pass sig_pulse: return main: kill(getpid(), SIGUSR1) pass main: CAM_WaitLAM pass main: get_time(&timevalue1[i]) pass main: NAF(INTREG,0,24) pass main: NAF(INTREG,0,9) pass main: stop timevalue0[0].tv_usec = 0xaff0f, timevalue1[0].tv_usec = 0xb008e timevalue0[1].tv_usec = 0xb028a, timevalue1[1].tv_usec = 0xb03c3 timevalue0[2].tv_usec = 0xb05b4, timevalue1[2].tv_usec = 0xb06ed main: NAF(INTREG,0,26) pass sig_pulse: received SIGUSR1 sig_pulse: start sig_pulse: get_time pass sig_pulse: CAMAC(write_pulse, &dumy, &q, &x) pass sig_pulse: return main: kill(getpid(), SIGUSR1) pass main: CAM_WaitLAM pass main: get_time(&timevalue1[i]) pass main: NAF(INTREG,0,24) pass main: NAF(INTREG,0,9) pass main: stop timevalue0[0].tv_usec = 0xaff0f, timevalue1[0].tv_usec = 0xb008e timevalue0[1].tv_usec = 0xb028a, timevalue1[1].tv_usec = 0xb03c3 timevalue0[2].tv_usec = 0xb05b4, timevalue1[2].tv_usec = 0xb06ed main: NAF(INTREG,0,26) pass sig_pulse: received SIGUSR1 sig_pulse: start sig_pulse: get_time pass sig_pulse: CAMAC(write_pulse, &dumy, &q, &x) pass sig_pulse: return main: kill(getpid(), SIGUSR1) pass main: CAM_WaitLAM pass main: get_time(&timevalue1[i]) pass main: NAF(INTREG,0,24) pass main: NAF(INTREG,0,9) pass main: stop timevalue0[0].tv_usec = 0xaff0f, timevalue1[0].tv_usec = 0xb008e timevalue0[1].tv_usec = 0xb028a, timevalue1[1].tv_usec = 0xb03c3 timevalue0[2].tv_usec = 0xb05b4, timevalue1[2].tv_usec = 0xb06ed main: NAF(INTREG,0,26) pass sig_pulse: received SIGUSR1 sig_pulse: start sig_pulse: get_time pass sig_pulse: CAMAC(write_pulse, &dumy, &q, &x) pass sig_pulse: return main: kill(getpid(), SIGUSR1) pass main: CAM_WaitLAM pass main: get_time(&timevalue1[i]) pass main: NAF(INTREG,0,24) pass main: NAF(INTREG,0,9) pass main: stop timevalue0[0].tv_usec = 0xaff0f, timevalue1[0].tv_usec = 0xb008e timevalue0[1].tv_usec = 0xb028a, timevalue1[1].tv_usec = 0xb03c3 timevalue0[2].tv_usec = 0xb05b4, timevalue1[2].tv_usec = 0xb06ed main: NAF(INTREG,0,26) pass sig_pulse: received SIGUSR1 sig_pulse: start sig_pulse: get_time pass sig_pulse: CAMAC(write_pulse, &dumy, &q, &x) pass sig_pulse: return main: kill(getpid(), SIGUSR1) pass main: CAM_WaitLAM pass main: get_time(&timevalue1[i]) pass main: NAF(INTREG,0,24) pass main: NAF(INTREG,0,9) pass main: stop timevalue0[0].tv_usec = 0xaff0f, timevalue1[0].tv_usec = 0xb008e timevalue0[1].tv_usec = 0xb028a, timevalue1[1].tv_usec = 0xb03c3 timevalue0[2].tv_usec = 0xb05b4, timevalue1[2].tv_usec = 0xb06ed main: NAF(INTREG,0,26) pass sig_pulse: received SIGUSR1 sig_pulse: start sig_pulse: get_time pass sig_pulse: CAMAC(write_pulse, &dumy, &q, &x) pass sig_pulse: return main: kill(getpid(), SIGUSR1) pass main: CAM_WaitLAM pass main: get_time(&timevalue1[i]) pass main: NAF(INTREG,0,24) pass main: NAF(INTREG,0,9) pass main: stop timevalue0[0].tv_usec = 0xaff0f, timevalue1[0].tv_usec = 0xb008e timevalue0[1].tv_usec = 0xb028a, timevalue1[1].tv_usec = 0xb03c3 timevalue0[2].tv_usec = 0xb05b4, timevalue1[2].tv_usec = 0xb06ed main: NAF(INTREG,0,26) pass sig_pulse: received SIGUSR1 sig_pulse: start sig_pulse: get_time pass sig_pulse: CAMAC(write_pulse, &dumy, &q, &x) pass sig_pulse: return main: kill(getpid(), SIGUSR1) pass main: CAM_WaitLAM pass main: get_time(&timevalue1[i]) pass main: NAF(INTREG,0,24) pass main: NAF(INTREG,0,9) pass main: stop timevalue0[0].tv_usec = 0xaff0f, timevalue1[0].tv_usec = 0xb008e timevalue0[1].tv_usec = 0xb028a, timevalue1[1].tv_usec = 0xb03c3 timevalue0[2].tv_usec = 0xb05b4, timevalue1[2].tv_usec = 0xb06ed main: NAF(INTREG,0,26) pass sig_pulse: received SIGUSR1 sig_pulse: start sig_pulse: get_time pass sig_pulse: CAMAC(write_pulse, &dumy, &q, &x) pass sig_pulse: return main: kill(getpid(), SIGUSR1) pass main: CAM_WaitLAM pass main: get_time(&timevalue1[i]) pass main: NAF(INTREG,0,24) pass main: NAF(INTREG,0,9) pass main: stop timevalue0[0].tv_usec = 0xaff0f, timevalue1[0].tv_usec = 0xb008e timevalue0[1].tv_usec = 0xb028a, timevalue1[1].tv_usec = 0xb03c3 timevalue0[2].tv_usec = 0xb05b4, timevalue1[2].tv_usec = 0xb06ed timevalue0[0].tv_usec = 0xaff0f, timevalue1[0].tv_usec = 0xb008e timevalue0[1].tv_usec = 0xb028a, timevalue1[1].tv_usec = 0xb03c3 timevalue0[2].tv_usec = 0xb05b4, timevalue1[2].tv_usec = 0xb06ed CAM_WaitLAM takes 335 microsec. onl50t[298]% onl50t[298]% onl50t[298]% onl50t[298]% onl50t[298]% camint_measure1 main: CAM_EnableLAM pass main: NAF(INTREG,0,26) pass sig_pulse: received SIGUSR1 sig_pulse: start sig_pulse: get_time pass sig_pulse: CAMAC(write_pulse, &dumy, &q, &x) pass sig_pulse: return main: kill(getpid(), SIGUSR1) pass main: CAM_WaitLAM pass main: get_time(&timevalue1[i]) pass main: NAF(INTREG,0,24) pass main: NAF(INTREG,0,9) pass main: stop timevalue0[0].tv_usec = 0xde8b7, timevalue1[0].tv_usec = 0xdea3a timevalue0[1].tv_usec = 0x0, timevalue1[1].tv_usec = 0x0 timevalue0[2].tv_usec = 0x0, timevalue1[2].tv_usec = 0x0 main: NAF(INTREG,0,26) pass sig_pulse: received SIGUSR1 sig_pulse: start sig_pulse: get_time pass sig_pulse: CAMAC(write_pulse, &dumy, &q, &x) pass sig_pulse: return main: kill(getpid(), SIGUSR1) pass main: CAM_WaitLAM pass main: get_time(&timevalue1[i]) pass main: NAF(INTREG,0,24) pass main: NAF(INTREG,0,9) pass main: stop timevalue0[0].tv_usec = 0xde8b7, timevalue1[0].tv_usec = 0xdea3a timevalue0[1].tv_usec = 0xdec33, timevalue1[1].tv_usec = 0xded6b timevalue0[2].tv_usec = 0x0, timevalue1[2].tv_usec = 0x0 main: NAF(INTREG,0,26) pass sig_pulse: received SIGUSR1 sig_pulse: start sig_pulse: get_time pass sig_pulse: CAMAC(write_pulse, &dumy, &q, &x) pass sig_pulse: return main: kill(getpid(), SIGUSR1) pass main: CAM_WaitLAM pass main: get_time(&timevalue1[i]) pass main: NAF(INTREG,0,24) pass main: NAF(INTREG,0,9) pass main: stop timevalue0[0].tv_usec = 0xde8b7, timevalue1[0].tv_usec = 0xdea3a timevalue0[1].tv_usec = 0xdec33, timevalue1[1].tv_usec = 0xded6b timevalue0[2].tv_usec = 0xdef5a, timevalue1[2].tv_usec = 0xdf093 main: NAF(INTREG,0,26) pass sig_pulse: received SIGUSR1 sig_pulse: start sig_pulse: get_time pass sig_pulse: CAMAC(write_pulse, &dumy, &q, &x) pass sig_pulse: return main: kill(getpid(), SIGUSR1) pass main: CAM_WaitLAM pass main: get_time(&timevalue1[i]) pass main: NAF(INTREG,0,24) pass main: NAF(INTREG,0,9) pass main: stop timevalue0[0].tv_usec = 0xde8b7, timevalue1[0].tv_usec = 0xdea3a timevalue0[1].tv_usec = 0xdec33, timevalue1[1].tv_usec = 0xded6b timevalue0[2].tv_usec = 0xdef5a, timevalue1[2].tv_usec = 0xdf093 main: NAF(INTREG,0,26) pass sig_pulse: received SIGUSR1 sig_pulse: start sig_pulse: get_time pass sig_pulse: CAMAC(write_pulse, &dumy, &q, &x) pass sig_pulse: return main: kill(getpid(), SIGUSR1) pass main: CAM_WaitLAM pass main: get_time(&timevalue1[i]) pass main: NAF(INTREG,0,24) pass main: NAF(INTREG,0,9) pass main: stop timevalue0[0].tv_usec = 0xde8b7, timevalue1[0].tv_usec = 0xdea3a timevalue0[1].tv_usec = 0xdec33, timevalue1[1].tv_usec = 0xded6b timevalue0[2].tv_usec = 0xdef5a, timevalue1[2].tv_usec = 0xdf093 main: NAF(INTREG,0,26) pass sig_pulse: received SIGUSR1 sig_pulse: start sig_pulse: get_time pass sig_pulse: CAMAC(write_pulse, &dumy, &q, &x) pass sig_pulse: return main: kill(getpid(), SIGUSR1) pass main: CAM_WaitLAM pass main: get_time(&timevalue1[i]) pass main: NAF(INTREG,0,24) pass main: NAF(INTREG,0,9) pass main: stop timevalue0[0].tv_usec = 0xde8b7, timevalue1[0].tv_usec = 0xdea3a timevalue0[1].tv_usec = 0xdec33, timevalue1[1].tv_usec = 0xded6b timevalue0[2].tv_usec = 0xdef5a, timevalue1[2].tv_usec = 0xdf093 main: NAF(INTREG,0,26) pass sig_pulse: received SIGUSR1 sig_pulse: start sig_pulse: get_time pass sig_pulse: CAMAC(write_pulse, &dumy, &q, &x) pass sig_pulse: return main: kill(getpid(), SIGUSR1) pass main: CAM_WaitLAM pass main: get_time(&timevalue1[i]) pass main: NAF(INTREG,0,24) pass main: NAF(INTREG,0,9) pass main: stop timevalue0[0].tv_usec = 0xde8b7, timevalue1[0].tv_usec = 0xdea3a timevalue0[1].tv_usec = 0xdec33, timevalue1[1].tv_usec = 0xded6b timevalue0[2].tv_usec = 0xdef5a, timevalue1[2].tv_usec = 0xdf093 main: NAF(INTREG,0,26) pass sig_pulse: received SIGUSR1 sig_pulse: start sig_pulse: get_time pass sig_pulse: CAMAC(write_pulse, &dumy, &q, &x) pass sig_pulse: return main: kill(getpid(), SIGUSR1) pass main: CAM_WaitLAM pass main: get_time(&timevalue1[i]) pass main: NAF(INTREG,0,24) pass main: NAF(INTREG,0,9) pass main: stop timevalue0[0].tv_usec = 0xde8b7, timevalue1[0].tv_usec = 0xdea3a timevalue0[1].tv_usec = 0xdec33, timevalue1[1].tv_usec = 0xded6b timevalue0[2].tv_usec = 0xdef5a, timevalue1[2].tv_usec = 0xdf093 main: NAF(INTREG,0,26) pass sig_pulse: received SIGUSR1 sig_pulse: start sig_pulse: get_time pass sig_pulse: CAMAC(write_pulse, &dumy, &q, &x) pass sig_pulse: return main: kill(getpid(), SIGUSR1) pass main: CAM_WaitLAM pass main: get_time(&timevalue1[i]) pass main: NAF(INTREG,0,24) pass main: NAF(INTREG,0,9) pass main: stop timevalue0[0].tv_usec = 0xde8b7, timevalue1[0].tv_usec = 0xdea3a timevalue0[1].tv_usec = 0xdec33, timevalue1[1].tv_usec = 0xded6b timevalue0[2].tv_usec = 0xdef5a, timevalue1[2].tv_usec = 0xdf093 main: NAF(INTREG,0,26) pass sig_pulse: received SIGUSR1 sig_pulse: start sig_pulse: get_time pass sig_pulse: CAMAC(write_pulse, &dumy, &q, &x) pass sig_pulse: return main: kill(getpid(), SIGUSR1) pass main: CAM_WaitLAM pass main: get_time(&timevalue1[i]) pass main: NAF(INTREG,0,24) pass main: NAF(INTREG,0,9) pass main: stop timevalue0[0].tv_usec = 0xde8b7, timevalue1[0].tv_usec = 0xdea3a timevalue0[1].tv_usec = 0xdec33, timevalue1[1].tv_usec = 0xded6b timevalue0[2].tv_usec = 0xdef5a, timevalue1[2].tv_usec = 0xdf093 timevalue0[0].tv_usec = 0xde8b7, timevalue1[0].tv_usec = 0xdea3a timevalue0[1].tv_usec = 0xdec33, timevalue1[1].tv_usec = 0xded6b timevalue0[2].tv_usec = 0xdef5a, timevalue1[2].tv_usec = 0xdf093 CAM_WaitLAM takes 331 microsec. onl50t[299]% onl50t[299]% onl50t[299]% onl50t[299]% onl50t[299]% camint_measure1 main: CAM_EnableLAM pass main: NAF(INTREG,0,26) pass sig_pulse: received SIGUSR1 sig_pulse: start sig_pulse: get_time pass sig_pulse: CAMAC(write_pulse, &dumy, &q, &x) pass sig_pulse: return main: kill(getpid(), SIGUSR1) pass main: CAM_WaitLAM pass main: get_time(&timevalue1[i]) pass main: NAF(INTREG,0,24) pass main: NAF(INTREG,0,9) pass main: stop timevalue0[0].tv_usec = 0x604ca, timevalue1[0].tv_usec = 0x60654 timevalue0[1].tv_usec = 0x0, timevalue1[1].tv_usec = 0x0 timevalue0[2].tv_usec = 0x0, timevalue1[2].tv_usec = 0x0 main: NAF(INTREG,0,26) pass sig_pulse: received SIGUSR1 sig_pulse: start sig_pulse: get_time pass sig_pulse: CAMAC(write_pulse, &dumy, &q, &x) pass sig_pulse: return main: kill(getpid(), SIGUSR1) pass main: CAM_WaitLAM pass main: get_time(&timevalue1[i]) pass main: NAF(INTREG,0,24) pass main: NAF(INTREG,0,9) pass main: stop timevalue0[0].tv_usec = 0x604ca, timevalue1[0].tv_usec = 0x60654 timevalue0[1].tv_usec = 0x608a2, timevalue1[1].tv_usec = 0x609db timevalue0[2].tv_usec = 0x0, timevalue1[2].tv_usec = 0x0 main: NAF(INTREG,0,26) pass sig_pulse: received SIGUSR1 sig_pulse: start sig_pulse: get_time pass sig_pulse: CAMAC(write_pulse, &dumy, &q, &x) pass sig_pulse: return main: kill(getpid(), SIGUSR1) pass main: CAM_WaitLAM pass main: get_time(&timevalue1[i]) pass main: NAF(INTREG,0,24) pass main: NAF(INTREG,0,9) pass main: stop timevalue0[0].tv_usec = 0x604ca, timevalue1[0].tv_usec = 0x60654 timevalue0[1].tv_usec = 0x608a2, timevalue1[1].tv_usec = 0x609db timevalue0[2].tv_usec = 0x60bcf, timevalue1[2].tv_usec = 0x60d08 main: NAF(INTREG,0,26) pass sig_pulse: received SIGUSR1 sig_pulse: start sig_pulse: get_time pass sig_pulse: CAMAC(write_pulse, &dumy, &q, &x) pass sig_pulse: return main: kill(getpid(), SIGUSR1) pass main: CAM_WaitLAM pass main: get_time(&timevalue1[i]) pass main: NAF(INTREG,0,24) pass main: NAF(INTREG,0,9) pass main: stop timevalue0[0].tv_usec = 0x604ca, timevalue1[0].tv_usec = 0x60654 timevalue0[1].tv_usec = 0x608a2, timevalue1[1].tv_usec = 0x609db timevalue0[2].tv_usec = 0x60bcf, timevalue1[2].tv_usec = 0x60d08 main: NAF(INTREG,0,26) pass sig_pulse: received SIGUSR1 sig_pulse: start sig_pulse: get_time pass sig_pulse: CAMAC(write_pulse, &dumy, &q, &x) pass sig_pulse: return main: kill(getpid(), SIGUSR1) pass main: CAM_WaitLAM pass main: get_time(&timevalue1[i]) pass main: NAF(INTREG,0,24) pass main: NAF(INTREG,0,9) pass main: stop timevalue0[0].tv_usec = 0x604ca, timevalue1[0].tv_usec = 0x60654 timevalue0[1].tv_usec = 0x608a2, timevalue1[1].tv_usec = 0x609db timevalue0[2].tv_usec = 0x60bcf, timevalue1[2].tv_usec = 0x60d08 main: NAF(INTREG,0,26) pass sig_pulse: received SIGUSR1 sig_pulse: start sig_pulse: get_time pass sig_pulse: CAMAC(write_pulse, &dumy, &q, &x) pass sig_pulse: return main: kill(getpid(), SIGUSR1) pass main: CAM_WaitLAM pass main: get_time(&timevalue1[i]) pass main: NAF(INTREG,0,24) pass main: NAF(INTREG,0,9) pass main: stop timevalue0[0].tv_usec = 0x604ca, timevalue1[0].tv_usec = 0x60654 timevalue0[1].tv_usec = 0x608a2, timevalue1[1].tv_usec = 0x609db timevalue0[2].tv_usec = 0x60bcf, timevalue1[2].tv_usec = 0x60d08 main: NAF(INTREG,0,26) pass sig_pulse: received SIGUSR1 sig_pulse: start sig_pulse: get_time pass sig_pulse: CAMAC(write_pulse, &dumy, &q, &x) pass sig_pulse: return main: kill(getpid(), SIGUSR1) pass main: CAM_WaitLAM pass main: get_time(&timevalue1[i]) pass main: NAF(INTREG,0,24) pass main: NAF(INTREG,0,9) pass main: stop timevalue0[0].tv_usec = 0x604ca, timevalue1[0].tv_usec = 0x60654 timevalue0[1].tv_usec = 0x608a2, timevalue1[1].tv_usec = 0x609db timevalue0[2].tv_usec = 0x60bcf, timevalue1[2].tv_usec = 0x60d08 main: NAF(INTREG,0,26) pass sig_pulse: received SIGUSR1 sig_pulse: start sig_pulse: get_time pass sig_pulse: CAMAC(write_pulse, &dumy, &q, &x) pass sig_pulse: return main: kill(getpid(), SIGUSR1) pass main: CAM_WaitLAM pass main: get_time(&timevalue1[i]) pass main: NAF(INTREG,0,24) pass main: NAF(INTREG,0,9) pass main: stop timevalue0[0].tv_usec = 0x604ca, timevalue1[0].tv_usec = 0x60654 timevalue0[1].tv_usec = 0x608a2, timevalue1[1].tv_usec = 0x609db timevalue0[2].tv_usec = 0x60bcf, timevalue1[2].tv_usec = 0x60d08 main: NAF(INTREG,0,26) pass sig_pulse: received SIGUSR1 sig_pulse: start sig_pulse: get_time pass sig_pulse: CAMAC(write_pulse, &dumy, &q, &x) pass sig_pulse: return main: kill(getpid(), SIGUSR1) pass main: CAM_WaitLAM pass main: get_time(&timevalue1[i]) pass main: NAF(INTREG,0,24) pass main: NAF(INTREG,0,9) pass main: stop timevalue0[0].tv_usec = 0x604ca, timevalue1[0].tv_usec = 0x60654 timevalue0[1].tv_usec = 0x608a2, timevalue1[1].tv_usec = 0x609db timevalue0[2].tv_usec = 0x60bcf, timevalue1[2].tv_usec = 0x60d08 main: NAF(INTREG,0,26) pass sig_pulse: received SIGUSR1 sig_pulse: start sig_pulse: get_time pass sig_pulse: CAMAC(write_pulse, &dumy, &q, &x) pass sig_pulse: return main: kill(getpid(), SIGUSR1) pass main: CAM_WaitLAM pass main: get_time(&timevalue1[i]) pass main: NAF(INTREG,0,24) pass main: NAF(INTREG,0,9) pass main: stop timevalue0[0].tv_usec = 0x604ca, timevalue1[0].tv_usec = 0x60654 timevalue0[1].tv_usec = 0x608a2, timevalue1[1].tv_usec = 0x609db timevalue0[2].tv_usec = 0x60bcf, timevalue1[2].tv_usec = 0x60d08 timevalue0[0].tv_usec = 0x604ca, timevalue1[0].tv_usec = 0x60654 timevalue0[1].tv_usec = 0x608a2, timevalue1[1].tv_usec = 0x609db timevalue0[2].tv_usec = 0x60bcf, timevalue1[2].tv_usec = 0x60d08 CAM_WaitLAM takes 336 microsec. onl50t[300]% camint_measure1プログラムを連続して数回実行してみた。 途中で止まる症状は なくなった。 デバッグように付加した文をはずして再度実行してみる。 (7-1-7). camint_measure1.cファイルの修正、リコンパイル onl50t[87]% vi camint_measure1.c : /* By E.Inoue */ if (signal(SIGUSR1, sig_pulse) == SIG_ERR) printf("can't catch SIGUSR1"); /* Generate Interrupt Pulse */ if( status = CAM_EnableLAM(ENABLE_INTREG) ) error_exit(status); for( i = 0; i < LOOP; i++ ) { status = CAMAC(NAF(INTREG,0,26), &dumy, &q, &x ); /* printf("child: loop count = %d\n", i+1); */ kill(getpid(), SIGUSR1); if( status = CAM_WaitLAM(TIME_60_SEC) ) error_exit(status); get_time(&timevalue1[i]); status = CAMAC(NAF(INTREG,0,24), &dumy, &q, &x ); status = CAMAC(NAF(INTREG,0,9), &dumy, &q, &x ); : onl50t[88]% onl50t[88]% make camint_measure1 /usr/ucb/cc -DOSF1 -o camint_measure1 camint_measure1.c -I../includes -L../lib -lcamac onl50t[89]% (7-1-8). camint_measure1プログラムの実行 onl50t[301]% camint_measure1 timevalue0[0].tv_usec = 0xd72ec, timevalue1[0].tv_usec = 0xd73a3 timevalue0[1].tv_usec = 0x0, timevalue1[1].tv_usec = 0x0 timevalue0[2].tv_usec = 0x0, timevalue1[2].tv_usec = 0x0 timevalue0[0].tv_usec = 0xd72ec, timevalue1[0].tv_usec = 0xd73a3 timevalue0[1].tv_usec = 0xd76a8, timevalue1[1].tv_usec = 0xd7733 timevalue0[2].tv_usec = 0x0, timevalue1[2].tv_usec = 0x0 timevalue0[0].tv_usec = 0xd72ec, timevalue1[0].tv_usec = 0xd73a3 timevalue0[1].tv_usec = 0xd76a8, timevalue1[1].tv_usec = 0xd7733 timevalue0[2].tv_usec = 0xd7847, timevalue1[2].tv_usec = 0xd78ca timevalue0[0].tv_usec = 0xd72ec, timevalue1[0].tv_usec = 0xd73a3 timevalue0[1].tv_usec = 0xd76a8, timevalue1[1].tv_usec = 0xd7733 timevalue0[2].tv_usec = 0xd7847, timevalue1[2].tv_usec = 0xd78ca timevalue0[0].tv_usec = 0xd72ec, timevalue1[0].tv_usec = 0xd73a3 timevalue0[1].tv_usec = 0xd76a8, timevalue1[1].tv_usec = 0xd7733 timevalue0[2].tv_usec = 0xd7847, timevalue1[2].tv_usec = 0xd78ca timevalue0[0].tv_usec = 0xd72ec, timevalue1[0].tv_usec = 0xd73a3 timevalue0[1].tv_usec = 0xd76a8, timevalue1[1].tv_usec = 0xd7733 timevalue0[2].tv_usec = 0xd7847, timevalue1[2].tv_usec = 0xd78ca timevalue0[0].tv_usec = 0xd72ec, timevalue1[0].tv_usec = 0xd73a3 timevalue0[1].tv_usec = 0xd76a8, timevalue1[1].tv_usec = 0xd7733 timevalue0[2].tv_usec = 0xd7847, timevalue1[2].tv_usec = 0xd78ca timevalue0[0].tv_usec = 0xd72ec, timevalue1[0].tv_usec = 0xd73a3 timevalue0[1].tv_usec = 0xd76a8, timevalue1[1].tv_usec = 0xd7733 timevalue0[2].tv_usec = 0xd7847, timevalue1[2].tv_usec = 0xd78ca timevalue0[0].tv_usec = 0xd72ec, timevalue1[0].tv_usec = 0xd73a3 timevalue0[1].tv_usec = 0xd76a8, timevalue1[1].tv_usec = 0xd7733 timevalue0[2].tv_usec = 0xd7847, timevalue1[2].tv_usec = 0xd78ca timevalue0[0].tv_usec = 0xd72ec, timevalue1[0].tv_usec = 0xd73a3 timevalue0[1].tv_usec = 0xd76a8, timevalue1[1].tv_usec = 0xd7733 timevalue0[2].tv_usec = 0xd7847, timevalue1[2].tv_usec = 0xd78ca timevalue0[0].tv_usec = 0xd72ec, timevalue1[0].tv_usec = 0xd73a3 timevalue0[1].tv_usec = 0xd76a8, timevalue1[1].tv_usec = 0xd7733 timevalue0[2].tv_usec = 0xd7847, timevalue1[2].tv_usec = 0xd78ca CAM_WaitLAM takes 130 microsec. onl50t[302]% onl50t[302]% onl50t[302]% camint_measure1 timevalue0[0].tv_usec = 0xa2cc4, timevalue1[0].tv_usec = 0xa2d6a timevalue0[1].tv_usec = 0x0, timevalue1[1].tv_usec = 0x0 timevalue0[2].tv_usec = 0x0, timevalue1[2].tv_usec = 0x0 timevalue0[0].tv_usec = 0xa2cc4, timevalue1[0].tv_usec = 0xa2d6a timevalue0[1].tv_usec = 0xa3033, timevalue1[1].tv_usec = 0xa30b9 timevalue0[2].tv_usec = 0x0, timevalue1[2].tv_usec = 0x0 timevalue0[0].tv_usec = 0xa2cc4, timevalue1[0].tv_usec = 0xa2d6a timevalue0[1].tv_usec = 0xa3033, timevalue1[1].tv_usec = 0xa30b9 timevalue0[2].tv_usec = 0xa31ce, timevalue1[2].tv_usec = 0xa3250 timevalue0[0].tv_usec = 0xa2cc4, timevalue1[0].tv_usec = 0xa2d6a timevalue0[1].tv_usec = 0xa3033, timevalue1[1].tv_usec = 0xa30b9 timevalue0[2].tv_usec = 0xa31ce, timevalue1[2].tv_usec = 0xa3250 timevalue0[0].tv_usec = 0xa2cc4, timevalue1[0].tv_usec = 0xa2d6a timevalue0[1].tv_usec = 0xa3033, timevalue1[1].tv_usec = 0xa30b9 timevalue0[2].tv_usec = 0xa31ce, timevalue1[2].tv_usec = 0xa3250 timevalue0[0].tv_usec = 0xa2cc4, timevalue1[0].tv_usec = 0xa2d6a timevalue0[1].tv_usec = 0xa3033, timevalue1[1].tv_usec = 0xa30b9 timevalue0[2].tv_usec = 0xa31ce, timevalue1[2].tv_usec = 0xa3250 timevalue0[0].tv_usec = 0xa2cc4, timevalue1[0].tv_usec = 0xa2d6a timevalue0[1].tv_usec = 0xa3033, timevalue1[1].tv_usec = 0xa30b9 timevalue0[2].tv_usec = 0xa31ce, timevalue1[2].tv_usec = 0xa3250 timevalue0[0].tv_usec = 0xa2cc4, timevalue1[0].tv_usec = 0xa2d6a timevalue0[1].tv_usec = 0xa3033, timevalue1[1].tv_usec = 0xa30b9 timevalue0[2].tv_usec = 0xa31ce, timevalue1[2].tv_usec = 0xa3250 timevalue0[0].tv_usec = 0xa2cc4, timevalue1[0].tv_usec = 0xa2d6a timevalue0[1].tv_usec = 0xa3033, timevalue1[1].tv_usec = 0xa30b9 timevalue0[2].tv_usec = 0xa31ce, timevalue1[2].tv_usec = 0xa3250 timevalue0[0].tv_usec = 0xa2cc4, timevalue1[0].tv_usec = 0xa2d6a timevalue0[1].tv_usec = 0xa3033, timevalue1[1].tv_usec = 0xa30b9 timevalue0[2].tv_usec = 0xa31ce, timevalue1[2].tv_usec = 0xa3250 timevalue0[0].tv_usec = 0xa2cc4, timevalue1[0].tv_usec = 0xa2d6a timevalue0[1].tv_usec = 0xa3033, timevalue1[1].tv_usec = 0xa30b9 timevalue0[2].tv_usec = 0xa31ce, timevalue1[2].tv_usec = 0xa3250 CAM_WaitLAM takes 151 microsec. onl50t[303]% onl50t[303]% onl50t[303]% camint_measure1 timevalue0[0].tv_usec = 0x1af66, timevalue1[0].tv_usec = 0x1b00c timevalue0[1].tv_usec = 0x0, timevalue1[1].tv_usec = 0x0 timevalue0[2].tv_usec = 0x0, timevalue1[2].tv_usec = 0x0 timevalue0[0].tv_usec = 0x1af66, timevalue1[0].tv_usec = 0x1b00c timevalue0[1].tv_usec = 0x1b2d6, timevalue1[1].tv_usec = 0x1b35d timevalue0[2].tv_usec = 0x0, timevalue1[2].tv_usec = 0x0 timevalue0[0].tv_usec = 0x1af66, timevalue1[0].tv_usec = 0x1b00c timevalue0[1].tv_usec = 0x1b2d6, timevalue1[1].tv_usec = 0x1b35d timevalue0[2].tv_usec = 0x1b470, timevalue1[2].tv_usec = 0x1b4f3 timevalue0[0].tv_usec = 0x1af66, timevalue1[0].tv_usec = 0x1b00c timevalue0[1].tv_usec = 0x1b2d6, timevalue1[1].tv_usec = 0x1b35d timevalue0[2].tv_usec = 0x1b470, timevalue1[2].tv_usec = 0x1b4f3 timevalue0[0].tv_usec = 0x1af66, timevalue1[0].tv_usec = 0x1b00c timevalue0[1].tv_usec = 0x1b2d6, timevalue1[1].tv_usec = 0x1b35d timevalue0[2].tv_usec = 0x1b470, timevalue1[2].tv_usec = 0x1b4f3 timevalue0[0].tv_usec = 0x1af66, timevalue1[0].tv_usec = 0x1b00c timevalue0[1].tv_usec = 0x1b2d6, timevalue1[1].tv_usec = 0x1b35d timevalue0[2].tv_usec = 0x1b470, timevalue1[2].tv_usec = 0x1b4f3 timevalue0[0].tv_usec = 0x1af66, timevalue1[0].tv_usec = 0x1b00c timevalue0[1].tv_usec = 0x1b2d6, timevalue1[1].tv_usec = 0x1b35d timevalue0[2].tv_usec = 0x1b470, timevalue1[2].tv_usec = 0x1b4f3 timevalue0[0].tv_usec = 0x1af66, timevalue1[0].tv_usec = 0x1b00c timevalue0[1].tv_usec = 0x1b2d6, timevalue1[1].tv_usec = 0x1b35d timevalue0[2].tv_usec = 0x1b470, timevalue1[2].tv_usec = 0x1b4f3 timevalue0[0].tv_usec = 0x1af66, timevalue1[0].tv_usec = 0x1b00c timevalue0[1].tv_usec = 0x1b2d6, timevalue1[1].tv_usec = 0x1b35d timevalue0[2].tv_usec = 0x1b470, timevalue1[2].tv_usec = 0x1b4f3 timevalue0[0].tv_usec = 0x1af66, timevalue1[0].tv_usec = 0x1b00c timevalue0[1].tv_usec = 0x1b2d6, timevalue1[1].tv_usec = 0x1b35d timevalue0[2].tv_usec = 0x1b470, timevalue1[2].tv_usec = 0x1b4f3 timevalue0[0].tv_usec = 0x1af66, timevalue1[0].tv_usec = 0x1b00c timevalue0[1].tv_usec = 0x1b2d6, timevalue1[1].tv_usec = 0x1b35d timevalue0[2].tv_usec = 0x1b470, timevalue1[2].tv_usec = 0x1b4f3 CAM_WaitLAM takes 131 microsec. onl50t[304]% onl50t[304]% onl50t[304]% camint_measure1 timevalue0[0].tv_usec = 0x1bcaa, timevalue1[0].tv_usec = 0x1bd4c timevalue0[1].tv_usec = 0x0, timevalue1[1].tv_usec = 0x0 timevalue0[2].tv_usec = 0x0, timevalue1[2].tv_usec = 0x0 timevalue0[0].tv_usec = 0x1bcaa, timevalue1[0].tv_usec = 0x1bd4c timevalue0[1].tv_usec = 0x1c006, timevalue1[1].tv_usec = 0x1c08c timevalue0[2].tv_usec = 0x0, timevalue1[2].tv_usec = 0x0 timevalue0[0].tv_usec = 0x1bcaa, timevalue1[0].tv_usec = 0x1bd4c timevalue0[1].tv_usec = 0x1c006, timevalue1[1].tv_usec = 0x1c08c timevalue0[2].tv_usec = 0x1c19f, timevalue1[2].tv_usec = 0x1c221 timevalue0[0].tv_usec = 0x1bcaa, timevalue1[0].tv_usec = 0x1bd4c timevalue0[1].tv_usec = 0x1c006, timevalue1[1].tv_usec = 0x1c08c timevalue0[2].tv_usec = 0x1c19f, timevalue1[2].tv_usec = 0x1c221 timevalue0[0].tv_usec = 0x1bcaa, timevalue1[0].tv_usec = 0x1bd4c timevalue0[1].tv_usec = 0x1c006, timevalue1[1].tv_usec = 0x1c08c timevalue0[2].tv_usec = 0x1c19f, timevalue1[2].tv_usec = 0x1c221 timevalue0[0].tv_usec = 0x1bcaa, timevalue1[0].tv_usec = 0x1bd4c timevalue0[1].tv_usec = 0x1c006, timevalue1[1].tv_usec = 0x1c08c timevalue0[2].tv_usec = 0x1c19f, timevalue1[2].tv_usec = 0x1c221 timevalue0[0].tv_usec = 0x1bcaa, timevalue1[0].tv_usec = 0x1bd4c timevalue0[1].tv_usec = 0x1c006, timevalue1[1].tv_usec = 0x1c08c timevalue0[2].tv_usec = 0x1c19f, timevalue1[2].tv_usec = 0x1c221 timevalue0[0].tv_usec = 0x1bcaa, timevalue1[0].tv_usec = 0x1bd4c timevalue0[1].tv_usec = 0x1c006, timevalue1[1].tv_usec = 0x1c08c timevalue0[2].tv_usec = 0x1c19f, timevalue1[2].tv_usec = 0x1c221 timevalue0[0].tv_usec = 0x1bcaa, timevalue1[0].tv_usec = 0x1bd4c timevalue0[1].tv_usec = 0x1c006, timevalue1[1].tv_usec = 0x1c08c timevalue0[2].tv_usec = 0x1c19f, timevalue1[2].tv_usec = 0x1c221 timevalue0[0].tv_usec = 0x1bcaa, timevalue1[0].tv_usec = 0x1bd4c timevalue0[1].tv_usec = 0x1c006, timevalue1[1].tv_usec = 0x1c08c timevalue0[2].tv_usec = 0x1c19f, timevalue1[2].tv_usec = 0x1c221 timevalue0[0].tv_usec = 0x1bcaa, timevalue1[0].tv_usec = 0x1bd4c timevalue0[1].tv_usec = 0x1c006, timevalue1[1].tv_usec = 0x1c08c timevalue0[2].tv_usec = 0x1c19f, timevalue1[2].tv_usec = 0x1c221 CAM_WaitLAM takes 130 microsec. onl50t[305]% onl50t[305]% onl50t[305]% camint_measure1 timevalue0[0].tv_usec = 0x1baea, timevalue1[0].tv_usec = 0x1bba0 timevalue0[1].tv_usec = 0x0, timevalue1[1].tv_usec = 0x0 timevalue0[2].tv_usec = 0x0, timevalue1[2].tv_usec = 0x0 timevalue0[0].tv_usec = 0x1baea, timevalue1[0].tv_usec = 0x1bba0 timevalue0[1].tv_usec = 0x1bebc, timevalue1[1].tv_usec = 0x1bf45 timevalue0[2].tv_usec = 0x0, timevalue1[2].tv_usec = 0x0 timevalue0[0].tv_usec = 0x1baea, timevalue1[0].tv_usec = 0x1bba0 timevalue0[1].tv_usec = 0x1bebc, timevalue1[1].tv_usec = 0x1bf45 timevalue0[2].tv_usec = 0x1c057, timevalue1[2].tv_usec = 0x1c0da timevalue0[0].tv_usec = 0x1baea, timevalue1[0].tv_usec = 0x1bba0 timevalue0[1].tv_usec = 0x1bebc, timevalue1[1].tv_usec = 0x1bf45 timevalue0[2].tv_usec = 0x1c057, timevalue1[2].tv_usec = 0x1c0da timevalue0[0].tv_usec = 0x1baea, timevalue1[0].tv_usec = 0x1bba0 timevalue0[1].tv_usec = 0x1bebc, timevalue1[1].tv_usec = 0x1bf45 timevalue0[2].tv_usec = 0x1c057, timevalue1[2].tv_usec = 0x1c0da timevalue0[0].tv_usec = 0x1baea, timevalue1[0].tv_usec = 0x1bba0 timevalue0[1].tv_usec = 0x1bebc, timevalue1[1].tv_usec = 0x1bf45 timevalue0[2].tv_usec = 0x1c057, timevalue1[2].tv_usec = 0x1c0da timevalue0[0].tv_usec = 0x1baea, timevalue1[0].tv_usec = 0x1bba0 timevalue0[1].tv_usec = 0x1bebc, timevalue1[1].tv_usec = 0x1bf45 timevalue0[2].tv_usec = 0x1c057, timevalue1[2].tv_usec = 0x1c0da timevalue0[0].tv_usec = 0x1baea, timevalue1[0].tv_usec = 0x1bba0 timevalue0[1].tv_usec = 0x1bebc, timevalue1[1].tv_usec = 0x1bf45 timevalue0[2].tv_usec = 0x1c057, timevalue1[2].tv_usec = 0x1c0da timevalue0[0].tv_usec = 0x1baea, timevalue1[0].tv_usec = 0x1bba0 timevalue0[1].tv_usec = 0x1bebc, timevalue1[1].tv_usec = 0x1bf45 timevalue0[2].tv_usec = 0x1c057, timevalue1[2].tv_usec = 0x1c0da timevalue0[0].tv_usec = 0x1baea, timevalue1[0].tv_usec = 0x1bba0 timevalue0[1].tv_usec = 0x1bebc, timevalue1[1].tv_usec = 0x1bf45 timevalue0[2].tv_usec = 0x1c057, timevalue1[2].tv_usec = 0x1c0da timevalue0[0].tv_usec = 0x1baea, timevalue1[0].tv_usec = 0x1bba0 timevalue0[1].tv_usec = 0x1bebc, timevalue1[1].tv_usec = 0x1bf45 timevalue0[2].tv_usec = 0x1c057, timevalue1[2].tv_usec = 0x1c0da CAM_WaitLAM takes 130 microsec. onl50t[306]% (7-1-9). camint_measure1.cファイルの修正、リコンパイル(その2) onl50t[91]% vi camint_measure1.c : status = CAMAC(NAF(INTREG,0,24), &dumy, &q, &x ); status = CAMAC(NAF(INTREG,0,9), &dumy, &q, &x ); /* printf("timevalue0[0].tv_usec = 0x%x, timevalue1[0].tv_usec = 0x%x\n" , timevalue0[0].tv_usec, timevalue1[0].tv_usec); printf("timevalue0[1].tv_usec = 0x%x, timevalue1[1].tv_usec = 0x%x\n" , timevalue0[1].tv_usec, timevalue1[1].tv_usec); printf("timevalue0[2].tv_usec = 0x%x, timevalue1[2].tv_usec = 0x%x\n" , timevalue0[2].tv_usec, timevalue1[2].tv_usec); */ } /* printf("timevalue0[0].tv_usec = 0x%x, timevalue1[0].tv_usec = 0x%x\n", timevalue0[0].tv_usec, timevalue1[0].tv_usec); printf("timevalue0[1].tv_usec = 0x%x, timevalue1[1].tv_usec = 0x%x\n", timevalue0[1].tv_usec, timevalue1[1].tv_usec); printf("timevalue0[2].tv_usec = 0x%x, timevalue1[2].tv_usec = 0x%x\n", timevalue0[2].tv_usec, timevalue1[2].tv_usec); */ average = 0; : "camint_measure1.c" 202 lines, 5249 characters onl50t[92]% onl50t[307]% make camint_measure1 /usr/ucb/cc -DOSF1 -o camint_measure1 camint_measure1.c -I../includes -L../lib - lcamac onl50t[308]% onl50t[308]% camint_measure1 CAM_WaitLAM takes 115 microsec. onl50t[309]% camint_measure1 CAM_WaitLAM takes 114 microsec. onl50t[310]% (7-1-10). camint_measure1プログラムの実行(その2) onl50t# priocntl -e -c RT -p 55 camint_measure1 CAM_WaitLAM takes 117 microsec. onl50t# !! priocntl -e -c RT -p 55 camint_measure1 CAM_WaitLAM takes 116 microsec. onl50t# !! priocntl -e -c RT -p 55 camint_measure1 CAM_WaitLAM takes 116 microsec. onl50t# !! priocntl -e -c RT -p 55 camint_measure1 CAM_WaitLAM takes 117 microsec. onl50t# !! priocntl -e -c RT -p 55 camint_measure1 CAM_WaitLAM takes 117 microsec. onl50t# !! priocntl -e -c RT -p 55 camint_measure1 CAM_WaitLAM takes 116 microsec. onl50t# !! priocntl -e -c RT -p 55 camint_measure1 CAM_WaitLAM takes 116 microsec. onl50t# !! priocntl -e -c RT -p 55 camint_measure1 CAM_WaitLAM takes 117 microsec. onl50t# !! priocntl -e -c RT -p 55 camint_measure1 CAM_WaitLAM takes 116 microsec. onl50t# !! priocntl -e -c RT -p 55 camint_measure1 CAM_WaitLAM takes 116 microsec. onl50t# !! priocntl -e -c RT -p 55 camint_measure1 CAM_WaitLAM takes 116 microsec. onl50t# !! priocntl -e -c RT -p 55 camint_measure1 CAM_WaitLAM takes 117 microsec. onl50t# ok. camac LAM割り込み処理実行時間測定プログラムは正常に実行できた。 (8). 16 ビット camacブロック転送実行時間測定プログラムを走らせてみる onl50t# priocntl -e -c RT -p 55 camblock_measure1 CAMAC READ block action with 1word takes 97 microsec. CAMAC READ block action with 8Kwords takes 14975 microsec. transfer speed is 1075 KB/S onl50t# !! priocntl -e -c RT -p 55 camblock_measure1 CAMAC READ block action with 1word takes 94 microsec. CAMAC READ block action with 8Kwords takes 14968 microsec. transfer speed is 1076 KB/S onl50t# !! priocntl -e -c RT -p 55 camblock_measure1 CAMAC READ block action with 1word takes 95 microsec. CAMAC READ block action with 8Kwords takes 14960 microsec. transfer speed is 1076 KB/S onl50t# !! priocntl -e -c RT -p 55 camblock_measure1 CAMAC READ block action with 1word takes 95 microsec. CAMAC READ block action with 8Kwords takes 14978 microsec. transfer speed is 1075 KB/S onl50t# !! priocntl -e -c RT -p 55 camblock_measure1 CAMAC READ block action with 1word takes 94 microsec. CAMAC READ block action with 8Kwords takes 14971 microsec. transfer speed is 1075 KB/S onl50t# !! priocntl -e -c RT -p 55 camblock_measure1 CAMAC READ block action with 1word takes 96 microsec. CAMAC READ block action with 8Kwords takes 14973 microsec. transfer speed is 1075 KB/S onl50t# !! priocntl -e -c RT -p 55 camblock_measure1 CAMAC READ block action with 1word takes 95 microsec. CAMAC READ block action with 8Kwords takes 14970 microsec. transfer speed is 1076 KB/S onl50t# !! priocntl -e -c RT -p 55 camblock_measure1 CAMAC READ block action with 1word takes 96 microsec. CAMAC READ block action with 8Kwords takes 14972 microsec. transfer speed is 1076 KB/S onl50t# !! priocntl -e -c RT -p 55 camblock_measure1 CAMAC READ block action with 1word takes 94 microsec. CAMAC READ block action with 8Kwords takes 14981 microsec. transfer speed is 1075 KB/S onl50t# !! priocntl -e -c RT -p 55 camblock_measure1 CAMAC READ block action with 1word takes 95 microsec. CAMAC READ block action with 8Kwords takes 14965 microsec. transfer speed is 1076 KB/S onl50t# !! priocntl -e -c RT -p 55 camblock_measure1 CAMAC READ block action with 1word takes 95 microsec. CAMAC READ block action with 8Kwords takes 14968 microsec. transfer speed is 1076 KB/S onl50t# !! priocntl -e -c RT -p 55 camblock_measure1 CAMAC READ block action with 1word takes 96 microsec. CAMAC READ block action with 8Kwords takes 14974 microsec. transfer speed is 1075 KB/S onl50t# ok. 16 ビット camacブロック転送実行時間測定プログラムは正常に実行 できた。 これでcamac実行時間測定プログラムはすべて正しく実行できることを確認 した。 ---xxxx ここまでやった(継続中) --- (6). セクション (6-1). サブセクション (6-1-1). サブサブセクション