Linux 定时器编程小解

基础知识:全局变量 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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值