1 #pragma once 2 3 #include <common/glib.h> 4 #include <driver/timers/HPET/HPET.h> 5 #include <driver/timers/rtc/rtc.h> 6 7 // 定义LONG_MAX为最大超时时间 - 允许负数 8 #define MAX_TIMEOUT (int64_t)((1ul << 63) - 1) 9 10 uint64_t volatile timer_jiffies = 0; // 系统时钟计数 11 12 // 计算接下来n毫秒对应的系统时间片 13 #define cal_next_n_ms_jiffies(expire_ms) (timer_jiffies + 1000 * (expire_ms)) 14 // 计算接下来n微秒对应的系统时间片 15 #define cal_next_n_us_jiffies(expire_us) (timer_jiffies + (expire_us)) 16 17 void timer_init(); 18 19 void do_timer_softirq(void *data); 20 21 /** 22 * @brief 定时功能队列 23 * 24 */ 25 struct timer_func_list_t 26 { 27 struct List list; 28 uint64_t expire_jiffies; 29 void (*func)(void *data); 30 void *data; 31 }; 32 33 extern struct timer_func_list_t timer_func_head; 34 /** 35 * @brief 初始化定时功能 36 * 37 * @param timer_func 队列结构体 38 * @param func 定时功能处理函数 39 * @param data 传输的数据 40 * @param expire_ms 定时时长(单位:ms) 41 */ 42 void timer_func_init(struct timer_func_list_t *timer_func, void (*func)(void *data), void *data, uint64_t expire_ms); 43 44 /** 45 * @brief 初始化定时功能 46 * 47 * @param timer_func 队列结构体 48 * @param func 定时功能处理函数 49 * @param data 传输的数据 50 * @param expire_us 定时时长(单位:us) 51 */ 52 void timer_func_init_us(struct timer_func_list_t *timer_func, void (*func)(void *data), void *data, uint64_t expire_us); 53 54 /** 55 * @brief 将定时功能添加到列表中 56 * 57 * @param timer_func 待添加的定时功能 58 */ 59 void timer_func_add(struct timer_func_list_t *timer_func); 60 61 /** 62 * @brief 将定时功能从列表中删除 63 * 64 * @param timer_func 65 */ 66 void timer_func_del(struct timer_func_list_t *timer_func); 67 68 uint64_t clock(); 69 70 /** 71 * @brief 睡眠timeout的时间之后唤醒进程/线程 72 * 73 * @param timeout 74 * @return long 75 */ 76 long schedule_timeout_ms(long timeout);