The current time is held as a 32 bit value in the ctl_current_time variable. This variable is incremented by a periodic interrupt that is started using the ctl_start_timer function. When you start the timer you must pass it a function to call when the periodic interrupt occurs. The interrupt function can be a user defined function that calls ctl_increment_tick_from_isr.

    void myfn{void)
      {
        ...
        ctl_increment_tick_from_isr();
        ...
      }
    void main(...)
      ..
      ctl_start_timer(myfn);
      ..

Alternatively you can pass the ctl_increment_tick_from_isr function as the parameter

    void main(...)
    {
      ..
      ctl_start_timer(ctl_increment_tick_from_isr);
      ..

You can atomically read ctl_current_time using the ctl_get_current_time function on systems whose word size is not 32 bit.

You can find out the resolution of the timer using the ctl_get_ticks_per_second function.

You can suspend execution of a task for a fixed period using the ctl_timeout_wait function.

Note that this function takes the timeout not the duration as a parameter, so you should always call this function with ctl_get_current_time()+duration.

    ctl_timeout_wait(ctl_get_current_time()+100);

This example suspends execution of the calling task for 100 increments of the ctl_current_time variable.