Perhaps my hypothesis about callbackRequestDelay behavior change is wrong.
I looked for where callbackRequestDelay is used in base, and it seems to be used in the HIGH delay for bo records. I thus thought that HIGH delays of 1/60. second or less would result in effectively 0 delay. However, I tested this with camonitor in a vxWorks IOC running 7.0.3.1. This is what I see with HIGH=0.01, which is less than 1 tick time=0.016666666. This is as I repeatedly write 1 to the record with caput.
So the transition from 1 (Enable) to 0 (Disable) seems to take a random amount of time between 0 and 0.01666 seconds. This is exactly what I expect if the delay does wait for the next clock tick, just like epicsThreadSleep. The tick rate in my IOC is 60.
However, if I change HIGH from .01 to .005 the behavior changes, and it is only high for 20-40 microseconds (measuring time on a Linux client).
Perhaps my hypothesis about callbackRequest Delay behavior change is wrong.
I looked for where callbackRequest Delay is used in base, and it seems to be used in the HIGH delay for bo records. I thus thought that HIGH delays of 1/60. second or less would result in effectively 0 delay. However, I tested this with camonitor in a vxWorks IOC running 7.0.3.1. This is what I see with HIGH=0.01, which is less than 1 tick time=0.016666666. This is as I repeatedly write 1 to the record with caput.
corvette: ~/devel/ PY_NTNDA_ Viewer> camonitor -tic 13LAB:userTranE nable nable (2020-02-02 10:41:57.387524) Disable nable ( +4.306785) Enable nable ( +0.007119) Disable nable ( +0.346203) Enable nable ( +0.003968) Disable nable ( +0.313715) Enable nable ( +0.002799) Disable nable ( +0.236848) Enable nable ( +0.013807) Disable nable ( +0.290088) Enable nable ( +0.009729) Disable nable ( +0.249017) Enable nable ( +0.017225) Disable nable ( +0.290018) Enable nable ( +0.010037) Disable nable ( +0.192072) Enable nable ( +0.008027) Disable nable ( +0.200641) Enable nable ( +0.015982) Disable nable ( +0.208282) Enable nable ( +0.008714) Disable nable ( +0.230697) Enable nable ( +0.002203) Disable nable ( +0.206095) Enable nable ( +0.010524) Disable nable ( +0.197474) Enable nable ( +0.002590) Disable nable ( +0.174295) Enable nable ( +0.009070) Disable
13LAB:userTranE
13LAB:userTranE
13LAB:userTranE
13LAB:userTranE
13LAB:userTranE
13LAB:userTranE
13LAB:userTranE
13LAB:userTranE
13LAB:userTranE
13LAB:userTranE
13LAB:userTranE
13LAB:userTranE
13LAB:userTranE
13LAB:userTranE
13LAB:userTranE
13LAB:userTranE
13LAB:userTranE
13LAB:userTranE
13LAB:userTranE
13LAB:userTranE
13LAB:userTranE
13LAB:userTranE
13LAB:userTranE
13LAB:userTranE
13LAB:userTranE
13LAB:userTranE
13LAB:userTranE
13LAB:userTranE
13LAB:userTranE
So the transition from 1 (Enable) to 0 (Disable) seems to take a random amount of time between 0 and 0.01666 seconds. This is exactly what I expect if the delay does wait for the next clock tick, just like epicsThreadSleep. The tick rate in my IOC is 60.
However, if I change HIGH from .01 to .005 the behavior changes, and it is only high for 20-40 microseconds (measuring time on a Linux client).
corvette: ~/devel/ PY_NTNDA_ Viewer> camonitor -tic 13LAB:userTranE nable nable (2020-02-02 10:52:10.095757) Disable
13LAB:userTranE
13LAB:userTranE nable ( +11.698305) Enable nable ( +0.000056) Disable nable ( +0.752278) Enable nable ( +0.000034) Disable nable ( +0.239082) Enable nable ( +0.000037) Disable nable ( +0.223219) Enable nable ( +0.000038) Disable nable ( +0.178778) Enable nable ( +0.000028) Disable nable ( +0.314707) Enable nable ( +0.000036) Disable nable ( +0.096827) Enable nable ( +0.000030) Disable nable ( +0.176998) Enable nable ( +0.000030) Disable nable ( +0.193591) Enable nable ( +0.000022) Disable nable ( +0.191531) Enable nable ( +0.000031) Disable nable ( +0.207274) Enable nable ( +0.000024) Disable
13LAB:userTranE
13LAB:userTranE
13LAB:userTranE
13LAB:userTranE
13LAB:userTranE
13LAB:userTranE
13LAB:userTranE
13LAB:userTranE
13LAB:userTranE
13LAB:userTranE
13LAB:userTranE
13LAB:userTranE
13LAB:userTranE
13LAB:userTranE
13LAB:userTranE
13LAB:userTranE
13LAB:userTranE
13LAB:userTranE
13LAB:userTranE
13LAB:userTranE
13LAB:userTranE
Why is there a change in behavior between HIGH = 0.01 and 0.005?
I have not done the same experiment on 7.0.3.