diff options
Diffstat (limited to 'src/clock.c')
| -rw-r--r-- | src/clock.c | 99 |
1 files changed, 99 insertions, 0 deletions
diff --git a/src/clock.c b/src/clock.c new file mode 100644 index 0000000000..b45ca8d24f --- /dev/null +++ b/src/clock.c @@ -0,0 +1,99 @@ +/* + * File : clock.c + * This file is part of RT-Thread RTOS + * COPYRIGHT (C) 2006, RT-Thread Development Team + * + * The license and distribution terms for this file may be + * found in the file LICENSE in this distribution or at + * http://openlab.rt-thread.com/license/LICENSE + * + * Change Logs: + * Date Author Notes + * 2006-03-12 Bernard first version + * 2006-05-27 Bernard add support for same priority thread schedule + * 2006-08-10 Bernard remove the last rt_schedule in rt_tick_increase + */ + +#include <rtthread.h> + +static rt_tick_t rt_tick; +static rt_time_t rt_passed_second; + +extern void rt_timer_check(void); + +/** + * This function will init system tick and set it to zero. + * @ingroup SystemInit + * + */ +void rt_system_tick_init() +{ + rt_tick = 0; + rt_passed_second = 0; +} + +/** + * @addtogroup Clock + */ + +/*@{*/ + +/** + * This function will return current tick from operating system startup + * + * @return current tick + */ +rt_tick_t rt_tick_get() +{ + /* return the global tick */ + return rt_tick; +} + +/** + * This function will notify kernel there is one tick passed. Normally, + * this function is invoked by clock ISR. + */ +void rt_tick_increase() +{ + struct rt_thread* thread; + + /* increase the global tick */ + ++ rt_tick; + + if (rt_tick % RT_TICK_PER_SECOND == 0) + { + ++rt_passed_second; + } + + /* check timer */ + rt_timer_check(); + + /* check time slice */ + thread = rt_thread_self(); + + -- thread->remaining_tick; + if (thread->remaining_tick == 0) + { + /* change to initialized tick */ + thread->remaining_tick = thread->init_tick; + + /* yield */ + rt_thread_yield(); + } +} + +/** + * This function will calculate the tick from millisecond. + * + * @param ms the specified millisecond + * + * @return the calculated tick + */ +rt_tick_t rt_tick_from_millisecond(rt_uint32_t ms) +{ + /* return the calculated tick */ + return RT_TICK_PER_SECOND * (ms / 1000); +} + +/*@}*/ + |
