blob: b45ca8d24f97fc3f59cb18ce938b03cea697c67f (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
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);
}
/*@}*/
|