![]() |
![]() HP OpenVMS Systemsask the wizard |
![]() |
The Question is: A floating point exception is generated from the code below at location noted from what I gather from exceptions summary, bit 1 is set which means Invalid operation is done. I could not see what is wrong. I had encountered a similar problem in the past, in which case a CRTL pathch was required, because there was a problem in the implicit type castings. Is this the case here? as far as I know the system has the latest patches applied. Their OVMS versio n is 7.1-1H2 HELP!... %SYSTEM-F-HPARITH, high performance arithmetic trap, Imask=00000000, Fmask=00000400, summary=02, PC=FFFFFFFF8046A004, PS=0000001B -SYSTEM-F-FLTINV, floating invalid operation, PC=FFFFFFFF8046A004, PS=0000001B %TRACE-F-TRACEBACK, symbolic stack dump follows image module routine line rel PC abs PC 0 FFFFFFFF8046A004 FFFFFFFF8046A004 CIMIO_D3_DIOP CIOPERFSYNC perform_timesync 19609 00000000000000EC 00000000000452FC CIMIO_D3_DIOP CIOGETDATA getdatapcm 21781 0000000000000E58 000000000003DBA8 CIMIO_D3_DIOP DEVICE Devupdate_device_list 21749 00000000000004CC 000000000003C2BC CIMIO_D3_DIOP DEVICE device_get 21932 0000000000000D84 000000000003CB74 CIMIO_D3_DIOP CIMIO_DEVICE cimio_device_get 21019 00000000000027CC 000000000003B56C CIMIO_D3_DIOP CIMIO_SERVER cimio_server_get 19984 0000000000001C68 0000000000035E08 CIMIO_D3_DIOP CIMIO_D3_DIOP main 19469 000000000000121C 000000000003121C CIMIO_D3_DIOP CIMIO_D3_DIOP __main 0 00000000000000AC 00000000000300AC 0 FFFFFFFF83D9D0F8 FFFFFFFF83D9D0F8 ****************Source****************** #define D3_WAIT_RESOLUTION 0.1 /* seconds */ void perform_timesync( char net, char unit ) int dtime; int ccount; float waittime=0; dtime = (int) d3config->delaytime[net][unit]; ccount = (int) d3config->callcount[net][unit]; if ( dtime ) { ccount--; if ( ccount <= 0 ) { /* * Delay for delaytime 10th of a second */ waittime = (float) dtime * D3_WAIT_RESOLUTION; <<<problem here lib$wait( &waittime ); ccount = d3config->groupsize[net][unit]; } d3config->callcount[net][unit] = ccount; } } /* perform_timesync */ ***************************** all the values received by the function, ie, net, unit are valid values, d3config is a pointer to a valid structure, and it gets the delaytime as a valid interger value which we tried values from 10 to 1000. If delaytime is set to 0 it does not go into the location where wait is happeing and everything work out fine. Whats the deal... Thanks a bunch, Ertugrul Akmese The Answer is : By default, lib$wait requires a VAX F_floating point number, while the native floating point format of most OpenVMS Alpha compilers is IEEE. The OpenVMS Wizard would recommend looking at the use of the (optional) float-type argument that is available on the lib$wait call, or (somewhat less desirably) switching the module to build using f_floating numbers.
|