BeRTOS
|
Hardware independent timer driver. More...
Data Structures | |
struct | Timer |
The timer driver supports multiple synchronous timers that can trigger an event when they expire. More... | |
Defines | |
#define | synctimer_abort(t) timer_abort(t) |
Functions | |
ticks_t | timer_clock (void) |
Return the system tick counter (expressed in ticks) | |
ticks_t | timer_clock_unlocked (void) |
Faster version of timer_clock(), to be called only when the timer interrupt is disabled (DISABLE_INTS) or overridden by a higher-priority or non-nesting interrupt. | |
ticks_t | ms_to_ticks (mtime_t ms) |
Convert ms [ms] to ticks. | |
ticks_t | us_to_ticks (utime_t us) |
Convert us [us] to ticks. | |
mtime_t | ticks_to_ms (ticks_t ticks) |
Convert ticks [ticks] to ms. | |
utime_t | ticks_to_us (ticks_t ticks) |
Convert ticks [ticks] to us. | |
hptime_t | us_to_hptime (utime_t us) |
Convert us [us] to hpticks. | |
utime_t | hptime_to_us (hptime_t hpticks) |
Convert hpticks [hptime] to usec. | |
void | timer_delayTicks (ticks_t delay) |
Wait for the specified amount of timer ticks. | |
void | timer_delay (mtime_t delay) |
Wait some time [ms]. | |
void | timer_busyWait (hptime_t delay) |
Busy wait until the specified amount of high-precision ticks have elapsed. | |
void | timer_delayHp (hptime_t delay) |
Wait for the specified amount of time (expressed in microseconds). | |
void | timer_add (Timer *timer) |
Add the specified timer to the software timer service queue. | |
Timer * | timer_abort (Timer *timer) |
Remove a timer from the timers queue before it has expired. | |
void | timer_setSoftint (Timer *timer, Hook func, iptr_t user_data) |
Set the timer so that it calls an user hook when it expires. | |
void | timer_setDelay (Timer *timer, ticks_t delay) |
Set the timer delay (the time before the event will be triggered) | |
void | synctimer_add (Timer *timer, List *q) |
Add timer to queue. | |
void | synctimer_poll (List *q) |
Simple synchronous timer based scheduler polling routine. | |
void | timer_setEvent (Timer *timer) |
Set the timer so that it sends a event notification when it expires. | |
void | timer_waitEvent (Timer *timer) |
Wait until the timer expires. | |
void | timer_setSignal (Timer *timer, struct Process *proc, sigmask_t sigs) |
Set the timer so that it sends a signal when it expires. | |
Variables | |
volatile ticks_t | _clock |
Master system clock (1 tick accuracy) |
Hardware independent timer driver.
All timer related functions are implemented in this module. You have several options to use timers:
Whenever a timer expires you need to explicitly arm it again with timer_add(). If you want to abort a timer, use timer_abort(). You can use conversion macros when using msecs to specify the delay.
#define synctimer_abort | ( | t | ) | timer_abort(t) |
void synctimer_poll | ( | List * | queue | ) |
Simple synchronous timer based scheduler polling routine.
Sometimes you would like to have a proper scheduler, but you can't afford it due to memory constraints.
This is a simple replacement: you can create events and call them periodically at specific time intervals. All you have to do is to set up normal timers, and call synctimer_add() instead of timer_add() to add the events to your specific queue. Then, in the main loop or wherever you want, you can call synctimer_poll() to process expired events. The associated callbacks will be executed. As this is done synchronously you don't have to worry about race conditions. You can kill an event by simply calling synctimer_abort().
void timer_add | ( | Timer * | timer | ) |
void timer_busyWait | ( | hptime_t | delay | ) |
ticks_t timer_clock | ( | void | ) | [inline] |
Return the system tick counter (expressed in ticks)
The result is guaranteed to increment monotonically, but client code must be tolerant with respect to overflows.
The following code is safe:
drop_teabag(); ticks_t tea_start_time = timer_clock(); for (;;) { if (timer_clock() - tea_start_time > TEAPOT_DELAY) { printf("Your tea, Sir.\n"); break; } patience(); }
ticks_t timer_clock_unlocked | ( | void | ) | [inline] |
Faster version of timer_clock(), to be called only when the timer interrupt is disabled (DISABLE_INTS) or overridden by a higher-priority or non-nesting interrupt.
void timer_delay | ( | mtime_t | delay | ) | [inline] |
Wait some time [ms].
delay | Time to wait [ms]. |
void timer_delayHp | ( | hptime_t | delay | ) |
void timer_delayTicks | ( | ticks_t | delay | ) |
Set the timer so that it calls an user hook when it expires.
Sometimes you may want to use the same callback for different events, so you must have different data to operate on. The user_data parameter is such data.
timer | Timer struct to set the callback to |
func | Function that will be called when the timer expires |
user_data | Additional data you may want to pass to the callback |