基础知识:全局变量 jiffies 记录时钟中断的次数,也就是system clk的节拍数
全局变量 HZ 记录1秒钟系统来几个节拍,系统节拍频率
很容易得到公式 系统运行的秒数 second = jiffies / HZ
static struct timer_list my_timer;//定义一个软件定时器
struct timer_list {
struct list_head entry; //定时器链表的入口
unsigned long expires; //定时器到点时间
void (*function)(unsigned long); //【重要】定时器处理函数
unsigned long data; //传给定时器处理函数的长整型参数
struct tvec_t_base_s *base; //定时器内部值,用户不要使用
#ifdef CONFIG_TIMER_STATS
void *start_site;
char start_comm[16];
int start_pid;
#endif
};
void my_timer_function(...);//定义自己的软件定时器函数
init_timer(&my_timer);
my_timer.function=my_timer_function;
add_timer(my_timer);
mod_timer(my_timer , new_expires);//修改为新的到点时间
/*************使用定时器的步骤*********************/
struct timer_list my_timer;//定义一个定时器,可以把它放在你的设备结构中
init_timer(&my_timer); //初始化一个定时器
my_timer.expire=jiffies+x*HZ; //定时器【x】秒后运行服务程序
my_timer.function=my_timer_function;//定时器服务函数
add_timer(&my_timer); //添加定时器
void my_timer_function(unsigned long)//写定时器服务函数
del_timer(&my_timer); //当定时器不再需要时删除定时器
del_timer_sync(&my_timer); //基本和del_timer一样,比较适合在多核处理器使用,
//一般推荐使用del_timer_sync
其他定时方法:
sleep() nanosleep() msleep() usleep()
static void msleep(int ms)
{
udelay(ms * 1000);
}
SIGALRM + alarm()//精度达到1秒
使用RTC机制 //需要由RTC设备
使用select() //能精确到 1us
全局变量 HZ 记录1秒钟系统来几个节拍,系统节拍频率
很容易得到公式 系统运行的秒数 second = jiffies / HZ
static struct timer_list my_timer;//定义一个软件定时器
struct timer_list {
struct list_head entry; //定时器链表的入口
unsigned long expires; //定时器到点时间
void (*function)(unsigned long); //【重要】定时器处理函数
unsigned long data; //传给定时器处理函数的长整型参数
struct tvec_t_base_s *base; //定时器内部值,用户不要使用
#ifdef CONFIG_TIMER_STATS
void *start_site;
char start_comm[16];
int start_pid;
#endif
};
void my_timer_function(...);//定义自己的软件定时器函数
init_timer(&my_timer);
my_timer.function=my_timer_function;
add_timer(my_timer);
mod_timer(my_timer , new_expires);//修改为新的到点时间
/*************使用定时器的步骤*********************/
struct timer_list my_timer;//定义一个定时器,可以把它放在你的设备结构中
init_timer(&my_timer); //初始化一个定时器
my_timer.expire=jiffies+x*HZ; //定时器【x】秒后运行服务程序
my_timer.function=my_timer_function;//定时器服务函数
add_timer(&my_timer); //添加定时器
void my_timer_function(unsigned long)//写定时器服务函数
del_timer(&my_timer); //当定时器不再需要时删除定时器
del_timer_sync(&my_timer); //基本和del_timer一样,比较适合在多核处理器使用,
//一般推荐使用del_timer_sync
其他定时方法:
sleep() nanosleep() msleep() usleep()
static void msleep(int ms)
{
udelay(ms * 1000);
}
SIGALRM + alarm()//精度达到1秒
使用RTC机制 //需要由RTC设备
使用select() //能精确到 1us