Mar 28,1997 onl5v4: Solaris 2.5 cc ドライバのデバッグ. ioctl, リスト処理のデバッグ、その5 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ (http://www-online.kek.jp/~inoue/CAMAC/onl5v4-sol2.5/debug-step14-log.txt) June 5,1997 修正 高エネルギー加速器研究機構 素粒子原子核研究所 物理、オンライングループ 井上 栄二 (1). 現状確認およびテストすべき事項。 (A). 16ビットDMA転送は、read/write とも正しく実行できている。 (B). 24ビットDMA転送は、read/write とも正しく実行できている。 (C). cc_ioctlの"CCIOC_REG_DUMP処理"、"CCIOC_READ_STATUS処理"、および "CCIOC_RESET処理"部でk2917のリセット命令が実行されている。 リセッ ト命令をどう処理するか検討せよ。 (D). リスト処理の動作確認をせよ。 (2). 5V用のメモリボードをさらにもう1枚、onl5v4に差した。 これで、onl5v4のメモ リは全部で48Mバイトになった。 onl5v4[40]% date Wed Mar 19 09:31:06 JST 1997 onl5v4[41]% sysinfo GENERAL INFORMATION Host Name : onl5v4 Host Aliases : Host Address(es) : 130.87.153.49 Host ID : 808b9d5c Serial Number : 9149788 Manufacturer : Sun (Sun Microsystems) System Model : CPU 5V Main Memory : 48 MB Virtual Memory : 69 MB ROM Version : 2.15 CPU Type : sparc Number of CPUs : 1 App Architecture : sparc Kernel Architecture : sun4m OS Name : SunOS OS Version : 5.5 Kernel Version : SunOS Release 5.5 Version Generic [UNIX(R) System V Release 4.0] DEVICE INFORMATION SPARC,CPU-5V is a "SPARC CPU-5V/48-110-X" openprom is a "Open Boot PROM" pseudo device iommu0 is a "I/O Memory Management Unit" system bus sbus0 is a "SBus" system bus espdma is a "SCSI DMA" pseudo device esp0 is a "Generic SCSI interface" disk controller c0t3d0 (sd3) is a "SDX4300" 4.0 GB disk drive ledma is a "LANCE Ethernet DMA" pseudo device le0 is a "AMD Lance Am7990" 10Mb/sec Ethernet network interface VME0 is a "VME Bus (SPARC FGA-5000)" system bus obio0 is a "On Board I/O" system bus zs0 is a "Zilog 8530" serial communications chip zs1 is a "Zilog 8530" serial communications chip cpu0 is a "110 MHz FMI,MB86904" CPU onl5v4[42]% (3). 項目(1)の(D)について。 (a). リスト処理の動作確認 リスト処理は、CAMACシングル・アクションread/write、およびCAMACブロッ ク転送read/write を使ってCAMACアクセスをやっている。 項目(1)で述べた ように、すでにこれら2つの動作は正しく動作できることを確認している。 したがって、リスト処理の動作の内、今問題にしているCAMACアクセスの部分 はクリアしているので、ここではテストはしないことにする。 (4). 項目(1)の(C)について。 (a). cc_ioctlの"CCIOC_REG_DUMP処理" この部分は、"k->csr = CC_RST;" をはずすことにする。 onl5v4[69]% vi cc.c : static int cc_ioctl(dev_t dev, int cmd, int arg, int flag, cred_t *cred_p, int *rval_p) { : case CCIOC_REG_DUMP : /* data[0] = k->cser; data[1] = k->docr; data[2] = k->sccr; data[3] = k->mtc; data[4] = k->machi; data[5] = k->maclo; data[6] = k->lamc; data[7] = k->donc; data[8] = k->empc; data[9] = k->aboc; data[10] = k->lamv; data[11] = k->donv; data[12] = k->empv; data[13] = k->abov; data[14] = k->amr; data[15] = k->cma; data[16] = k->cwc; data[17] = k->srr; data[18] = k->csr; */ /* k->csr = CC_RST; */ break; : onl5v4[70]% [コメント] ioctl は、デバイスの働きをコントロールするのに使用するためのドライバ ルーチンである。 したがって、CCIOC_REG_DUMP処理とか、次に述べるCCIOC_ READ_STATUS処理ように、ドライバ・プログラムからユーザ・プログラムへ データの受け渡しを伴うような処理には適切ではない。 むしろ、ユーザ・ プログラムからドライバ・プログラムへいくらかのパラメータを渡して、そ れに応じた処理を行なうような使い方をする。 ccドライバの製作者もこの点 を考慮して、READ_STATUS処理の内容をコメントアウトし、k->csr = CC_RST のみを残したものと思う。 しかし、このk2917のリセット処理も不注意に 実行すると、以降の動作が保証できなくなるので、ここではk->csr = CC_RST の部分もコメントアウトすることにした。 (b). cc_ioctlの"CCIOC_READ_STATUS処理" onl5v4[106]% vi cc.c : static int cc_ioctl(dev_t dev, int cmd, int arg, int flag, cred_t *cred_p, int *rval_p) { : case CCIOC_READ_STATUS : /* data[0] = k->cser; data[1] = k->docr; data[2] = k->sccr; data[3] = k->mtc; data[4] = k->machi; data[5] = k->maclo; data[6] = k->lamc; data[7] = k->donc; data[8] = k->empc; data[9] = k->aboc; data[10] = k->lamv; data[11] = k->donv; data[12] = k->empv; data[13] = k->abov; data[14] = k->amr; data[15] = k->cma; data[16] = k->cwc; data[17] = k->srr; data[18] = k->csr; */ /* k->csr = CC_RST; */ break; : onl5v4[107]% [コメント] 上記の、CCIOC_REG_DUMP処理のコメントで述べたのと同じ理由で、k2917のリ セット処理をコメントアウトすることにした。 (c). cc_ioctlの"CCIOC_RESET処理" k->csr = CC_RST命令を実行すると、k2917はパワーオンリセットされたのと 同じ状態にされてしまい、cc_open時にインタラプト・ベクタ・レジスタ等に 設定した値がクリアされる。 そこでこの命令を実行した後に再度、これらの レジスタに値をセットし直すことにする。 onl5v4[108]% vi cc.c : static int cc_ioctl(dev_t dev, int cmd, int arg, int flag, cred_t *cred_p, int *rval_p) { : case CCIOC_RESET : k->csr = CC_RST; /* by E.Inoue from >>> */ /* set interrupt registers of K2917 */ cc->k->lamc = (u_short)(CC_INT_AUTO_CLEAR | intrpri); cc->k->donc = (u_short)(CC_INT_AUTO_CLEAR | intrpri); cc->k->empc = (u_short)(CC_INT_AUTO_CLEAR | intrpri); cc->k->aboc = (u_short)(CC_INT_AUTO_CLEAR | intrpri); cc->k->lamv = (u_short)intrvec; cc->k->donv = (u_short)intrvec; cc->k->empv = (u_short)intrvec; cc->k->abov = (u_short)intrvec; /* to <<< */ break; : onl5v4[109]% (5). ccドライバをコンパイル、ロードする。 cc_ioctlでCCIOC_RESETを実行した後で camacシングル・アクションread/write、camac割り込み、やcamacブロック転送 read/writeをやってみる。 onl5v4[40]% make ./script/cc_build.sh [Building for sun4m] "cc.c", line 1088: warning: semantics of ">>" change in ANSI C; use explicit cast "cc.c", line 1334: warning: semantics of "<" change in ANSI C; use explicit cast "cc.c", line 1336: warning: semantics of ">=" change in ANSI C; use explicit cast "cc.c", line 2043: warning: semantics of ">" change in ANSI C; use explicit cast "cc.c", line 2053: warning: semantics of ">=" change in ANSI C; use explicit cast "cc.c", line 2063: warning: semantics of "<" change in ANSI C; use explicit cast "cc.c", line 2073: warning: semantics of "<=" change in ANSI C; use explicit cast "cc.c", line 2135: warning: semantics of ">=" change in ANSI C; use explicit cast "cc.c", line 2242: warning: semantics of "<=" change in ANSI C; use explicit cast rm -f cc.o onl5v4[41]% onl5v4# make unload ./script/cc_unload.sh [Removing CAMAC device driver] [Removing CAMAC device driver from system] [Deleting CAMAC device files] onl5v4# make load ./script/cc_load.sh [Installing CAMAC device driver] [Adding CAMAC device driver to system] [Configuring CAMAC device driver] [Making CAMAC device files] onl5v4# onl5v4[78]% vi cam1-reset.c : CSETI(); CREMI(); /* test for camac action after k2917 reset */ CRESET(); /* by E.Inoue. k2917 reset */ while (loop-- > 0) { rewind(stdin); : onl5v4[79]% onl5v4[80]% vi cam3-reset.c : status += CGENZ(); status += CREMI(); if (status != 0) { printf("INIT. ERROR!\n"); exit(1); } /* test for camac action after k2917 reset */ CRESET(); /* by E.Inoue. k2917 reset */ /* Enable LAM */ status = 0; : onl5v4[81]% onl5v4[82]% vi cam2new-reset.f : call CGENC() call CREMI() CCC by E.Inoue. test for camac action after k2917 reset call CRESET() do 100 i = 1, loop print 10 : onl5v4[83]% onl5v4[83]% vi Makefile : # by E.Inoue all : cc libcamac.a cam1 cam3 cam2 cam2new cam1-reset cam2new-reset cam3-res et # : # by E.Inoue cam2 : cam2.f $(FC) $(FFLAGS) cam2.f -o cam2 $(CLIB) cam2new : cam2new.f $(FC) $(FFLAGS) cam2new.f -o cam2new $(CLIB) cam1-reset : cam1-reset.c $(CC) $(CFLAGS) cam1-reset.c -o cam1-reset $(CLIB) cam2new-reset : cam2new-reset.f $(FC) $(FFLAGS) cam2new-reset.f -o cam2new-reset $(CLIB) cam3-reset : cam3-reset.c $(CC) $(CFLAGS) cam3-reset.c -o cam3-reset $(CLIB) : onl5v4[84]% onl5v4[86]% make cam1-reset cam2new-reset cam3-reset cc -O cam1-reset.c -o cam1-reset -I. -L. -lcamac f77 -fast -O3 -u cam2new-reset.f -o cam2new-reset -I. -L. -lcamac f77: Warning: -O3 overwrites previously set optimization level of -O2 cam2new-reset.f: MAIN: Undefined first referenced symbol in file creset_ cam2new-reset.o ld: fatal: Symbol referencing errors. No output written to cam2new-reset *** Error code 1 make: Fatal error: Command failed for target `cam2new-reset' onl5v4[87]% make cam3-reset cc -O cam3-reset.c -o cam3-reset -I. -L. -lcamac onl5v4[88]% f77用のcamacライブラリにはcreset_がないようだ。 cam2new-reset(cc_ioctl でCCIOC_RESETを実行した後のcamacブロック転送)のテストはやらないことにす る。 (a). cam1-reset を実行する。 onl5v4[37]% cam1-reset Open error: : No such file or directory onl5v4[38]% ls -l /dev/cc lrwxrwxrwx 1 root other 3 Mar 25 10:55 /dev/cc -> :cc onl5v4[39]% /dev/cc が正しく作られていないようだ。 シャットダウンしてから、 "boot -r" をやり直す。 # /usr/sbin/shutdown -i0 -g0 Shutdown started. Wed Mar 26 10:08:37 JST 1997 Do you want to continue? (y or n): y Broadcast Message from root (console) on onl5v4 Wed Mar 26 10:08:39... THE SYSTEM IS BEING SHUT DOWN NOW ! ! ! Log off now or risk your files being damaged Changing to init state 0 - please wait # INIT: New run level: 0 The system is coming down. Please wait. System services are now being stopped. Print services stopped. Stopping the syslog service. Mar 26 10:08:46 onl5v4 syslogd: going down on signal 15 umount: /net busy nfs umount: /vol: not mounted Mar 26 10:08:56 cssd: Got sig#15, sending it to all CSes and exit Mar 26 10:08:56 /usr/sbin/vold[3976]: problem unmounting /vol; No such file or d irectory umount: /net busy The system is down. syncing file systems... [9] [6] done Program terminated Type help for more information ok boot -r Resetting ... screen not found. Can't open input device. Keyboard not present. Using tty for input and output. SPARC CPU-5V, No Keyboard ROM Rev. 2.15.3, 48 MB memory installed, Serial #9149788. Ethernet address 0:80:42:b:2d:5c, Host ID: 808b9d5c. Rebooting with command: -r Boot device: /iommu/sbus/espdma@5,8400000/esp@5,8800000/sd@3,0 File and args: - r SunOS Release 5.5 Version Generic [UNIX(R) System V Release 4.0] Copyright (c) 1983-1995, Sun Microsystems, Inc. NOTICE: VME SYSFAIL (clr) not handled. NOTICE: VME: slavewin at vme=0x0, size=0x100000 space=0x2c020017 configuring network interfaces: le0. Hostname: onl5v4 Configuring the /devices directory vmeplus0 at VME0: vme16d16 0x0 and vme24d16 0x0 and vme32d16 0x0 and vme16d32 0x 0 and vme24d32 0x0 and vme32d32 0x0 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 vmemem0 at VME0: vme32d16 0x0 vmemem1 at VME0: vme16d16 0x0 vmemem2 at VME0: vme24d16 0x0 vmemem3 at VME0: vme32d32 0x0 vmemem4 at VME0: vme16d32 0x0 vmemem5 at VME0: vme24d32 0x0 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 clean. /dev/rdsk/c0t3d0s7: is clean. Flushing routing table: add net default: gateway ICCFG0 NIS domainname is kek.jp starting rpc services: rpcbind keyserv kerbd done. Setting netmask of le0 to 255.255.252.0 Setting default interface for multicast: add net 224.0.0.0: gateway onl5v4 syslog service starting. Print services started. starting Kana-Kanji converters: cssd. Loading /kernel/strmod/jconv7. Loading /kernel/strmod/jconv8. Loading /kernel/strmod/jconvs. volume management starting. The system is ready. onl5v4 console login: onl5v4# make unload ./script/cc_unload.sh [Removing CAMAC device driver] [Removing CAMAC device driver from system] [Deleting CAMAC device files] onl5v4# make load ./script/cc_load.sh [Installing CAMAC device driver] [Adding CAMAC device driver to system] [Configuring CAMAC device driver] [Making CAMAC device files] onl5v4# ls -l /dev/cc lrwxrwxrwx 1 root other 54 Mar 26 10:20 /dev/cc -> /devices/iommu@0,10000000/VME@0,7ffffe00/cc@2d,ff00:cc onl5v4# ok. デバイス・ファイルは正しく作られた。 ここで、再度 cam1-reset を実行を試みる。 onl5v4[48]% cam1-reset 5 Input n a f (data)>3 0 0 N=3 A=0 F=0 Q=1 X=1 Data:000000(Hex) 00000000(Dec) Input n a f (data)>3 0 16 555 N=3 A=0 F=16 Q=1 X=1 Data:00022B(Hex) 00000555(Dec) Input n a f (data)>3 0 0 N=3 A=0 F=0 Q=1 X=1 Data:00022B(Hex) 00000555(Dec) Input n a f (data)>3 0 16 0 N=3 A=0 F=16 Q=1 X=1 Data:000000(Hex) 00000000(Dec) Input n a f (data)>3 0 0 N=3 A=0 F=0 Q=1 X=1 Data:000000(Hex) 00000000(Dec) onl5v4[49]% ok. camacシングル・アクションread/writeを実行する前にk2917のリセット 命令をやっても影響はない。 (b). 次にcam3-reset を実行する。 onl5v4[38]% cam3-reset *** Now waiting LAM ... N=3 Loop=10 Timeout=0 sec Interrupted !! count=1 Interrupted !! count=2 Interrupted !! count=3 Interrupted !! count=4 Interrupted !! count=5 Interrupted !! count=6 Interrupted !! count=7 Interrupted !! count=8 Interrupted !! count=9 Interrupted !! count=10 *** cam3 nomal end. onl5v4[39]% cam3-reset *** Now waiting LAM ... N=3 Loop=10 Timeout=0 sec Interrupted !! count=1 Interrupted !! count=2 Timeout !! count=3 Interrupted !! count=4 Interrupted !! count=5 Interrupted !! count=6 Timeout !! count=7 Interrupted !! count=8 Interrupted !! count=9 Interrupted !! count=10 *** cam3 nomal end. onl5v4[40]% ok. 3回目と7回目の割り込み処理で、わざとタイムアウトを起こさせてみた。 正常に実行できている。 (6). これで、デバッグのための uprintf文が入った状態での camac動作は一通り 正しく実行できることを確認した。 次にこれらのものをはずして動作を確認 する。 onl5v4[57]% vi cc.c : static int cc_strategy(struct buf *bp) { register struct cc_device *cc = &ccdevice[0]; : register u_int flags; /* by E.Inoue uprintf("cc_strategy: debug: naf = 0x%x\n", naf); */ /* check DMA mode and set flags */ : /* count = cc->dma_cookie.dmac_size; */ /* uprintf("count in 32bit=%d\n", cc->dma_cookie.dmac_size); */ cc->retlen = 0; : if (cc->klist == CC_KLIST_NO) { k->cma = CC_CMA_INIT; /* Initialize memory pointer */ /* by E.Inoue uprintf("cc_strategy: debug: mode = 0x%x\n", mode); uprintf("cc_strategy: debug: cc->cur_crate = 0x%x\n", cc->cur_crate); uprintf("cc_strategy: debug: cc->len = 0x%x\n", cc->len); uprintf("cc_strategy: debug: CC_HALT = 0x%x\n", CC_HALT); */ k->cmr = mode | (cc->cur_crate << 8); : static int camac_b(struct cc_device *cc, u_short mode, u_short naf, int len, int *retlen) { register dev_t dev = cc->dev; : cc->len = len; /* by E.Inoue uprintf("camac_b: debug: "); uprintf("before setting uio for DMA\n"); uprintf("uio->uio_iov->iov_len = %d(dec), 0x%x\n", uio->uio_iov->iov_le n, uio->uio_iov->iov_len); uprintf("uio->uio_iovcnt = %d(dec), 0x%x\n", uio->uio_iovcnt, uio->uio_i ovcnt); uprintf("uio->uio_resid = %d(dec), 0x%x\n", uio->uio_resid, uio->uio_res id); uprintf("uio->uio_segflg = %d(dec), 0x%x\n", uio->uio_segflg, uio->uio_s egflg); uprintf("uio->uio_offset = %d(dec), 0x%x\n", uio->uio_offset, uio->uio_o ffset); */ /* set uio for DMA */ : uio->uio_offset = 0; /* by E.Inoue uprintf("camac_bedebug: "); uprintf("after setting uio for DMA\n"); */ /* uprintf(" in: %d %d %d %d %d\n", uio->uio_iov->iov_len, uio->uio_iovcnt, uio->uio_resid, uio->uio_segflg, uio->uio_offset); */ : return cc->status; } /* uprintf("out: %d %d %d %d %d\n", uio->uio_iov->iov_len, uio->uio_iovcnt, uio->uio_resid, uio->uio_segflg, uio->uio_offset); */ /* Q-STOP mode or no error */ : onl5v4[63]% コンパイル、実行をやる。 onl5v4[70]% make clean \rm -f cc *.o libcamac.a cam1 cam3 *~ core cam2 cam2new cam1-reset cam3-reset onl5v4[71]% make ./script/cc_build.sh [Building for sun4m] "cc.c", line 1088: warning: semantics of ">>" change in ANSI C; use explicit cast "cc.c", line 1334: warning: semantics of "<" change in ANSI C; use explicit cast "cc.c", line 1336: warning: semantics of ">=" change in ANSI C; use explicit cast "cc.c", line 2043: warning: semantics of ">" change in ANSI C; use explicit cast "cc.c", line 2053: warning: semantics of ">=" change in ANSI C; use explicit cast "cc.c", line 2063: warning: semantics of "<" change in ANSI C; use explicit cast "cc.c", line 2073: warning: semantics of "<=" change in ANSI C; use explicit cast "cc.c", line 2135: warning: semantics of ">=" change in ANSI C; use explicit cast "cc.c", line 2242: warning: semantics of "<=" change in ANSI C; use explicit cast rm -f cc.o cc -O -c camlib.c -o camlib.o -I. cc -O -c forlib.c -o forlib.o -I. rm -f libcamac.a ar rcv libcamac.a camlib.o forlib.o a - camlib.o a - forlib.o ar: writing libcamac.a cc -O cam1.c -o cam1 -I. -L. -lcamac cc -O cam3.c -o cam3 -I. -L. -lcamac f77 -fast -O3 -u cam2.f -o cam2 -I. -L. -lcamac f77: Warning: -O3 overwrites previously set optimization level of -O2 cam2.f: MAIN: f77 -fast -O3 -u cam2new.f -o cam2new -I. -L. -lcamac f77: Warning: -O3 overwrites previously set optimization level of -O2 cam2new.f: MAIN: cc -O cam1-reset.c -o cam1-reset -I. -L. -lcamac cc -O cam3-reset.c -o cam3-reset -I. -L. -lcamac onl5v4[72]% nl5v4# make unload ./script/cc_unload.sh [Removing CAMAC device driver] [Removing CAMAC device driver from system] [Deleting CAMAC device files] onl5v4# make load ./script/cc_load.sh [Installing CAMAC device driver] [Adding CAMAC device driver to system] [Configuring CAMAC device driver] [Making CAMAC device files] onl5v4# (a). cam1 を実行する。 onl5v4[84]% cam1 6 Input n a f (data)>3 0 0 N=3 A=0 F=0 Q=1 X=1 Data:000000(Hex) 00000000(Dec) Input n a f (data)>3 0 16 555 N=3 A=0 F=16 Q=1 X=1 Data:00022B(Hex) 00000555(Dec) Input n a f (data)>3 0 0 N=3 A=0 F=0 Q=1 X=1 Data:00022B(Hex) 00000555(Dec) Input n a f (data)>3 0 16 0 N=3 A=0 F=16 Q=1 X=1 Data:000000(Hex) 00000000(Dec) Input n a f (data)>3 0 0 N=3 A=0 F=0 Q=1 X=1 Data:000000(Hex) 00000000(Dec) Input n a f (data)>3 1 0 N=3 A=1 F=0 Q=1 X=1 Data:654321(Hex) 06636321(Dec) onl5v4[85]% ok. cam1 テストは正しく実行できた。 (b). cam2 を 16ビット転送モードで実行する。 onl5v4[56]% cam2new Input transfer mode (1:word 2:long word) >1 Input loop >6 Input mode (0:QSTOP 1:QIGNORE 2:QREPEAT 3:QSCAN) >1 Input data counts >5 Input n a f >3 0 0 MODE=1 N= 3 A= 0 F= 0 len= 5 lenr= 5 error= 0(Hex) Data( 1)= 0 0x 0(Hex) Data( 2)= 0 0x 0(Hex) Data( 3)= 0 0x 0(Hex) Data( 4)= 0 0x 0(Hex) Data( 5)= 0 0x 0(Hex) Data( 6)= 0 0x 0(Hex) Data( 7)= 0 0x 0(Hex) Data( 8)= 0 0x 0(Hex) Data( 9)= 0 0x 0(Hex) Data(10)= 0 0x 0(Hex) Input n a f >3 0 16 Input data >17185 MODE=1 N= 3 A= 0 F=16 len= 5 lenr= 5 error= 0(Hex) Data( 1)= 17185 0x 4321(Hex) Data( 2)= 17185 0x 4321(Hex) Data( 3)= 17185 0x 4321(Hex) Data( 4)= 17185 0x 4321(Hex) Data( 5)= 17185 0x 4321(Hex) Data( 6)= 0 0x 0(Hex) Data( 7)= 0 0x 0(Hex) Data( 8)= 0 0x 0(Hex) Data( 9)= 0 0x 0(Hex) Data(10)= 0 0x 0(Hex) Input n a f >3 0 0 MODE=1 N= 3 A= 0 F= 0 len= 5 lenr= 5 error= 0(Hex) Data( 1)= 17185 0x 4321(Hex) Data( 2)= 17185 0x 4321(Hex) Data( 3)= 17185 0x 4321(Hex) Data( 4)= 17185 0x 4321(Hex) Data( 5)= 17185 0x 4321(Hex) Data( 6)= 0 0x 0(Hex) Data( 7)= 0 0x 0(Hex) Data( 8)= 0 0x 0(Hex) Data( 9)= 0 0x 0(Hex) Data(10)= 0 0x 0(Hex) Input n a f >3 0 16 Input data >0 MODE=1 N= 3 A= 0 F=16 len= 5 lenr= 5 error= 0(Hex) Data( 1)= 0 0x 0(Hex) Data( 2)= 0 0x 0(Hex) Data( 3)= 0 0x 0(Hex) Data( 4)= 0 0x 0(Hex) Data( 5)= 0 0x 0(Hex) Data( 6)= 0 0x 0(Hex) Data( 7)= 0 0x 0(Hex) Data( 8)= 0 0x 0(Hex) Data( 9)= 0 0x 0(Hex) Data(10)= 0 0x 0(Hex) Input n a f >3 0 0 MODE=1 N= 3 A= 0 F= 0 len= 5 lenr= 5 error= 0(Hex) Data( 1)= 0 0x 0(Hex) Data( 2)= 0 0x 0(Hex) Data( 3)= 0 0x 0(Hex) Data( 4)= 0 0x 0(Hex) Data( 5)= 0 0x 0(Hex) Data( 6)= 0 0x 0(Hex) Data( 7)= 0 0x 0(Hex) Data( 8)= 0 0x 0(Hex) Data( 9)= 0 0x 0(Hex) Data(10)= 0 0x 0(Hex) Input n a f >3 1 0 MODE=1 N= 3 A= 1 F= 0 len= 5 lenr= 5 error= 0(Hex) Data( 1)= 17185 0x 4321(Hex) Data( 2)= 17185 0x 4321(Hex) Data( 3)= 17185 0x 4321(Hex) Data( 4)= 17185 0x 4321(Hex) Data( 5)= 17185 0x 4321(Hex) Data( 6)= 0 0x 0(Hex) Data( 7)= 0 0x 0(Hex) Data( 8)= 0 0x 0(Hex) Data( 9)= 0 0x 0(Hex) Data(10)= 0 0x 0(Hex) Note: this program was linked with -fast or -fnonstd and so may have produced nonstandard floating-point results. Sun's implementation of IEEE arithmetic is discussed in the Numerical Computation Guide. onl5v4[57]% ok. 正しく実行できた。 (c). cam2 を 24ビット転送モードで実行する。 onl5v4[57]% cam2new Input transfer mode (1:word 2:long word) >2 Input loop >6 Input mode (0:QSTOP 1:QIGNORE 2:QREPEAT 3:QSCAN) >1 Input data counts >5 Input n a f >3 0 0 MODE=1 N= 3 A= 0 F= 0 len= 5 lenr= 5 error= 0(Hex) Data( 1)= -16777216 0x FF000000(Hex) Data( 2)= -16777216 0x FF000000(Hex) Data( 3)= -16777216 0x FF000000(Hex) Data( 4)= -16777216 0x FF000000(Hex) Data( 5)= -16777216 0x FF000000(Hex) Data( 6)= 0 0x 0(Hex) Data( 7)= 0 0x 0(Hex) Data( 8)= 0 0x 0(Hex) Data( 9)= 0 0x 0(Hex) Data(10)= 0 0x 0(Hex) Input n a f >3 0 16 Input data >6636321 MODE=1 N= 3 A= 0 F=16 len= 5 lenr= 5 error= 0(Hex) Data( 1)= 6636321 0x 654321(Hex) Data( 2)= 6636321 0x 654321(Hex) Data( 3)= 6636321 0x 654321(Hex) Data( 4)= 6636321 0x 654321(Hex) Data( 5)= 6636321 0x 654321(Hex) Data( 6)= 0 0x 0(Hex) Data( 7)= 0 0x 0(Hex) Data( 8)= 0 0x 0(Hex) Data( 9)= 0 0x 0(Hex) Data(10)= 0 0x 0(Hex) Input n a f >3 0 0 MODE=1 N= 3 A= 0 F= 0 len= 5 lenr= 5 error= 0(Hex) Data( 1)= -10140895 0x FF654321(Hex) Data( 2)= -10140895 0x FF654321(Hex) Data( 3)= -10140895 0x FF654321(Hex) Data( 4)= -10140895 0x FF654321(Hex) Data( 5)= -10140895 0x FF654321(Hex) Data( 6)= 0 0x 0(Hex) Data( 7)= 0 0x 0(Hex) Data( 8)= 0 0x 0(Hex) Data( 9)= 0 0x 0(Hex) Data(10)= 0 0x 0(Hex) Input n a f >3 0 16 Input data >0 MODE=1 N= 3 A= 0 F=16 len= 5 lenr= 5 error= 0(Hex) Data( 1)= 0 0x 0(Hex) Data( 2)= 0 0x 0(Hex) Data( 3)= 0 0x 0(Hex) Data( 4)= 0 0x 0(Hex) Data( 5)= 0 0x 0(Hex) Data( 6)= 0 0x 0(Hex) Data( 7)= 0 0x 0(Hex) Data( 8)= 0 0x 0(Hex) Data( 9)= 0 0x 0(Hex) Data(10)= 0 0x 0(Hex) Input n a f >3 0 0 MODE=1 N= 3 A= 0 F= 0 len= 5 lenr= 5 error= 0(Hex) Data( 1)= -16777216 0x FF000000(Hex) Data( 2)= -16777216 0x FF000000(Hex) Data( 3)= -16777216 0x FF000000(Hex) Data( 4)= -16777216 0x FF000000(Hex) Data( 5)= -16777216 0x FF000000(Hex) Data( 6)= 0 0x 0(Hex) Data( 7)= 0 0x 0(Hex) Data( 8)= 0 0x 0(Hex) Data( 9)= 0 0x 0(Hex) Data(10)= 0 0x 0(Hex) Input n a f >3 1 0 MODE=1 N= 3 A= 1 F= 0 len= 5 lenr= 5 error= 0(Hex) Data( 1)= -10140895 0x FF654321(Hex) Data( 2)= -10140895 0x FF654321(Hex) Data( 3)= -10140895 0x FF654321(Hex) Data( 4)= -10140895 0x FF654321(Hex) Data( 5)= -10140895 0x FF654321(Hex) Data( 6)= 0 0x 0(Hex) Data( 7)= 0 0x 0(Hex) Data( 8)= 0 0x 0(Hex) Data( 9)= 0 0x 0(Hex) Data(10)= 0 0x 0(Hex) Note: this program was linked with -fast or -fnonstd and so may have produced nonstandard floating-point results. Sun's implementation of IEEE arithmetic is discussed in the Numerical Computation Guide. onl5v4[58]% ok. 正しく実行できた。 (d). cam3 を実行する。 onl5v4[75]% cam3 *** Now waiting LAM ... N=3 Loop=10 Timeout=0 sec Interrupted !! count=1 Interrupted !! count=2 Interrupted !! count=3 Interrupted !! count=4 Interrupted !! count=5 Interrupted !! count=6 Interrupted !! count=7 Interrupted !! count=8 Interrupted !! count=9 Interrupted !! count=10 *** cam3 nomal end. onl5v4[76]% cam3 *** Now waiting LAM ... N=3 Loop=10 Timeout=0 sec Interrupted !! count=1 Interrupted !! count=2 Timeout !! count=3 Interrupted !! count=4 Interrupted !! count=5 Timeout !! count=6 Interrupted !! count=7 Interrupted !! count=8 Interrupted !! count=9 Interrupted !! count=10 *** cam3 nomal end. onl5v4[77]% ok. 3回目と6回目の割り込み処理で、わざとタイムアウトを起こさせてみた。 正常に実行できている。 以上で ccドライバのデバッグは終ることにする。 (7). ccドライバのリリースにあたってやるべきこと。 (a). ccドライバの製作者への連絡。 (b). キットの用意。 (c). ユーザへのアナウンス。