Skip to content

Commit 22b5e5f

Browse files
authored
[components][ktime]support period ktime timeout and multiple ktimer_hrtimer (#8972)
* support period time * enable multiple ktimer * mv set delay_cnt to hrtimer_start * add ktime debug info * change current_irq_begin to local var * fix bug: setting current timer and setting timeout in driver aren't atomicly * create->init * refactoring ktime
1 parent 5c1e5d2 commit 22b5e5f

File tree

5 files changed

+132
-139
lines changed

5 files changed

+132
-139
lines changed

components/drivers/include/drivers/pic.h

-1
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,6 @@ struct rt_pic_isr
104104
#ifdef RT_USING_PIC_STATISTICS
105105
struct rt_pic_irq_statistics
106106
{
107-
rt_ubase_t current_irq_begin[RT_CPUS_NR];
108107
rt_ubase_t max_irq_time_ns;
109108
rt_ubase_t min_irq_time_ns;
110109
rt_ubase_t sum_irq_time_ns;

components/drivers/ktime/inc/ktime.h

+13-9
Original file line numberDiff line numberDiff line change
@@ -22,10 +22,11 @@
2222

2323
struct rt_ktime_hrtimer
2424
{
25-
struct rt_object parent; /**< inherit from rt_object */
26-
rt_list_t row;
25+
rt_uint8_t flag; /**< compatible to tick timer's flag */
26+
char name[RT_NAME_MAX];
27+
rt_list_t node;
2728
void *parameter;
28-
unsigned long init_cnt;
29+
unsigned long delay_cnt;
2930
unsigned long timeout_cnt;
3031
rt_err_t error;
3132
struct rt_completion completion;
@@ -113,22 +114,24 @@ unsigned long rt_ktime_hrtimer_getfrq(void);
113114
unsigned long rt_ktime_hrtimer_getcnt(void);
114115

115116
/**
116-
* @brief set hrtimer timeout, when timeout, the timer callback will call timeout
117+
* @brief set hrtimer interrupt timeout count (cnt), you should re-implemented it in hrtimer device driver
117118
*
118119
* @param cnt: hrtimer requires a timing cnt value
119-
* @param timeout: timeout callback
120-
* @param param: parameter
121120
* @return rt_err_t
122121
*/
123-
rt_err_t rt_ktime_hrtimer_settimeout(unsigned long cnt, void (*timeout)(void *param), void *param);
122+
rt_err_t rt_ktime_hrtimer_settimeout(unsigned long cnt);
123+
124+
/**
125+
* @brief called in hrtimer device driver isr routinue, it will process the timeouts
126+
*/
127+
void rt_ktime_hrtimer_process(void);
124128

125129
void rt_ktime_hrtimer_init(rt_ktime_hrtimer_t timer,
126130
const char *name,
127-
unsigned long cnt,
128131
rt_uint8_t flag,
129132
void (*timeout)(void *parameter),
130133
void *parameter);
131-
rt_err_t rt_ktime_hrtimer_start(rt_ktime_hrtimer_t timer);
134+
rt_err_t rt_ktime_hrtimer_start(rt_ktime_hrtimer_t timer, unsigned long cnt);
132135
rt_err_t rt_ktime_hrtimer_stop(rt_ktime_hrtimer_t timer);
133136
rt_err_t rt_ktime_hrtimer_control(rt_ktime_hrtimer_t timer, int cmd, void *arg);
134137
rt_err_t rt_ktime_hrtimer_detach(rt_ktime_hrtimer_t timer);
@@ -143,6 +146,7 @@ rt_inline void rt_ktime_hrtimer_keep_errno(rt_ktime_hrtimer_t timer, rt_err_t er
143146

144147
void rt_ktime_hrtimer_delay_init(struct rt_ktime_hrtimer *timer);
145148
void rt_ktime_hrtimer_delay_detach(struct rt_ktime_hrtimer *timer);
149+
void rt_ktime_hrtimer_process(void);
146150

147151
/**
148152
* @brief sleep by the cputimer cnt value

0 commit comments

Comments
 (0)