From brewer@fcrao1.astro.umass.edu Wed Jul 26 18:00:01 2000 Date: Wed, 26 Jul 2000 17:58:29 -0400 From: "Michael K. Brewer" Subject: Test Results To: rmillan@cfa.harvard.edu Cc: smorel@cfa.harvard.edu, wtraub@cfa.harvard.edu, schloerb@astro.umass.edu MIME-version: 1.0 X-MIMEOLE: Produced By Microsoft MimeOLE V5.00.2919.6600 Content-transfer-encoding: 7BIT X-Priority: 3 X-MSMail-priority: Normal Rafael et. al., I finished reworking the DIOCard class and added a function to the system to read the AuxClk. It turns out that the PCI bus runs at 33 Mhz, not 66 Mhz as I presumed, so the resolution of the AuxClk is 240 ns not 120 ns as I wrote previously. This is still plenty good for these tests. I/O Timing: Output byte to DIO card: 0.428 us. Output word to DIO card: 0.423 us. Input byte/word from DIO card: 1.002 us. Camera simulation: The following are histograms of sample times for 20000 sample runs under various conditions. For tests with the tracking programs running, I made no attempt at synchronization. Tracking programs stopped Test priority 4 Task Lock sample time (us): 95 samples: 47 sample time (us): 96 samples: 18771 sample time (us): 97 samples: 1131 sample time (us): 98 samples: 17 sample time (us): 99 samples: 5 sample time (us): 101 samples: 2 sample time (us): 102 samples: 24 sample time (us): 103 samples: 1 sample time (us): 104 samples: 1 Tracking programs stopped Test priority 4 sample time (us): 95 samples: 50 sample time (us): 96 samples: 18752 sample time (us): 97 samples: 1145 sample time (us): 98 samples: 16 sample time (us): 99 samples: 7 sample time (us): 100 samples: 2 sample time (us): 101 samples: 2 sample time (us): 102 samples: 23 sample time (us): 103 samples: 2 Tracking programs stopped Test priority 160 sample time (us): 95 samples: 63 sample time (us): 96 samples: 18763 sample time (us): 97 samples: 1056 sample time (us): 98 samples: 55 sample time (us): 99 samples: 7 sample time (us): 100 samples: 1 sample time (us): 101 samples: 4 sample time (us): 102 samples: 23 sample time (us): 104 samples: 5 sample time (us): 105 samples: 1 sample time (us): 106 samples: 3 sample time (us): 107 samples: 2 sample time (us): 108 samples: 1 sample time (us): 109 samples: 2 sample time (us): 110 samples: 5 sample time (us): 111 samples: 1 sample time (us): 112 samples: 1 sample time (us): 115 samples: 2 sample time (us): 117 samples: 3 sample time (us): 205 samples: 1 Tracking programs running Test priority 160 sample time (us): 95 samples: 50 sample time (us): 96 samples: 18709 sample time (us): 97 samples: 1134 sample time (us): 98 samples: 18 sample time (us): 99 samples: 5 sample time (us): 100 samples: 1 sample time (us): 101 samples: 3 sample time (us): 102 samples: 24 sample time (us): 103 samples: 1 sample time (us): 104 samples: 3 sample time (us): 105 samples: 2 sample time (us): 106 samples: 6 sample time (us): 107 samples: 3 sample time (us): 108 samples: 1 sample time (us): 109 samples: 2 sample time (us): 110 samples: 4 sample time (us): 111 samples: 3 sample time (us): 112 samples: 2 sample time (us): 113 samples: 6 sample time (us): 114 samples: 3 sample time (us): 115 samples: 2 sample time (us): 116 samples: 1 sample time (us): 120 samples: 2 sample time (us): 128 samples: 1 sample time (us): 129 samples: 1 sample time (us): 134 samples: 1 sample time (us): 194 samples: 1 sample time (us): 358 samples: 1 sample time (us): 359 samples: 1 sample time (us): 360 samples: 3 sample time (us): 366 samples: 1 sample time (us): 368 samples: 1 sample time (us): 371 samples: 1 sample time (us): 566 samples: 1 sample time (us): 618 samples: 1 Axis_Proc only running Test priority 160 sample time (us): 95 samples: 19 sample time (us): 96 samples: 18765 sample time (us): 97 samples: 1115 sample time (us): 98 samples: 28 sample time (us): 99 samples: 7 sample time (us): 100 samples: 3 sample time (us): 101 samples: 2 sample time (us): 102 samples: 22 sample time (us): 103 samples: 5 sample time (us): 104 samples: 4 sample time (us): 105 samples: 1 sample time (us): 106 samples: 2 sample time (us): 107 samples: 2 sample time (us): 108 samples: 2 sample time (us): 109 samples: 2 sample time (us): 110 samples: 1 sample time (us): 111 samples: 3 sample time (us): 113 samples: 2 sample time (us): 115 samples: 1 sample time (us): 118 samples: 1 sample time (us): 119 samples: 1 sample time (us): 120 samples: 1 sample time (us): 127 samples: 1 sample time (us): 193 samples: 1 sample time (us): 281 samples: 1 sample time (us): 282 samples: 1 sample time (us): 285 samples: 1 sample time (us): 286 samples: 1 sample time (us): 287 samples: 3 sample time (us): 299 samples: 1 Clearly the best approach would be to synchronize with the tracking programs to avoid collisions and run at high priority. There seems to be no advantage to running with the task switcher locked out. The spike at 102 us seems to be unavoidable. It is probably a collision with the clock interrupt. I ran no tests with interrupts locked out as this would, of course, stop the AuxClk from ticking. The source for the test program follows. Do the various functions look OK? The sample function just does 25 1 us indig calls to simulate the 25 us sampling time. Please let me know if you need any more info. Mike #include "vxWorks.h" #include "taskLib.h" #include "stdioLib.h" #include "sysLib.h" #include "dio.h" #include "iostream.h" DIOCard Card1(0); setup() { short i; for (i=0; i<7; i++)Card1.outdig(0,1,1); } rowaddr() { short i; for (i=0; i<64; i++)Card1.outdig(0,1,1); } coladdr() { short i; for (i=0; i<34; i++)Card1.outdig(0,1,1); } sample() { short i; char idat; for (i=0; i<25; i++)idat = Card1.indig(0); } diotest() { unsigned long sec[2]; double frac[2],elapse; short hist[1001],index; short i,j,jdat; char idat; printf(" diotest start \n"); for (i=0; i<1001; i++)hist[i] = 0; if(Card1.Init() == OK) { printf(" Init OK \n "); i = 0; if(Card1.setport(i,BYTE,OUTPUT) == OK) { printf(" setport %x OK \n",i); // taskLock(); for (i=1; i<20000; i++) { sysAuxClkCountGet(&sec[0],&frac[0]); setup(); rowaddr(); coladdr(); sample(); sample(); sysAuxClkCountGet(&sec[1],&frac[1]); elapse = sec[1] - sec[0]; elapse = elapse + frac[1] - frac[0]; elapse = elapse * 1000000.0 + 0.5; index = (short) elapse; if(index > 1000) index = 1000; hist[index] += 1; } // taskUnlock(); for (i=1;i<1001;i++) { if(hist[i] != 0) printf( "sample time (us): %d samples: %d \n",i,hist[i]); } } else { cerr << "setport failed " << endl; } } else { cerr << "Init failed " << endl; } } diomain() { taskSpawn("diotest", 4, VX_FP_TASK, 7000, diotest, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); }