NAME | SYNOPSIS | API RESTRICTIONS | FEATURES | DESCRIPTION | ATTRIBUTES | SEE ALSO
#include <perf/chBench.h>KnError sysTimerStartPeriodic(KnTimeVal * period, TimerTickHandler handler, void * cookie);
The function or functions documented here may not be used safely in all application contexts with all APIs provided in the ChorusOS 5.0 product.
See API(5FEA) for details.
PERF
The system timer management services are provided by the microkernel to share the system timer with the application. They are intended mainly for benchmarking and profiling.
Typically, bench programs require free-running timers and profiling handlers need to be invoked periodically.
The sysTimerStartPeriodic() call must be issued to share the system timer between the system and the application. This starts the timer in periodic mode.
The sysTimerStartPeriodic() call is restricted to SUPERVISOR actors.
In case of failure, an error code is returned as described below:
The system timer is already in use by another application.
The given period specified an illegal nanosecond value, which is less than 0, greater than 1,000,000,000, or a non zero seconds value.
The period points to an illegal address.
The timer cannot be initialized with period .
The handler is called as an interrupt handler and therefore the handler implementation must be restricted to the API allowed at interrupt level. The handler is invoked passing cookie as the only argument.
The sysTimerStartFreerun() call disconnects the system periodic timer. This starts the timer in freerun mode. In freerun mode, no blocking calls (for example, threadDelay() ) will return, since the periodic timer is disabled. The minperiod specifies the minimum period required for the free-run timer. The implementation is free to program the timer with any period higher than the one required.
In case of failure, an error code is returned as described below:
The system timer is already shared by another application.
The timer cannot be initialized with the required interval.
The sysTimerReadCounter() routine returns the current value of the timer counter. The value can be used to measure the elapsed time between two calls to the read_counter routine. Invocation of this call without a previous call to share the system timer returns an undocumented value.
sysTimerGetCounterPeriod() returns the difference between the maximum and minimum values of the timer counter. The routine may be called when the timer operates in any mode. sysTimerGetCounterPeriod() may be called from interrupt level. Invocation of this call without a previous call to share the system timer returns an undocumented value.
sysTimerGetCounterFrequency() returns the frequency of the timer counter in Hz. The routine may be called when the timer is operating in any mode. sysTimerGetCounterFrequency() may be called from the interrupt level.
Invocation of the above three calls without a previous call to sysTimerStartPeriodic() or sysTimerStartFreerun() returns an undocumented value.
sysTimerStop() returns the timer to the system. The timer is reprogrammed to the system frequency.
The following calls are not multithread-safe:
sysTimer()
sysTimerStartPeriodic()
sysTimerStartFreerun()
sysTimerReadCounter()
sysTimerGetCounterPeriod()
sysTimerGetCounterFrequency()
sysTimerStop()
In particular, you must not call sysTimerStop() while another call is running in another thread.
See attributes(5) for descriptions of the following attributes:
ATTRIBUTE TYPE | ATTRIBUTE VALUE |
---|---|
Interface Stability | Evolving |
NAME | SYNOPSIS | API RESTRICTIONS | FEATURES | DESCRIPTION | ATTRIBUTES | SEE ALSO