1. 程式人生 > >Linux定時器在驅動程式中的應用

Linux定時器在驅動程式中的應用

        核心提供了一組與定時器相關的介面用來簡化管理定時器的操作。所有這些介面都宣告在<linux/Timer.h>中,大多數介面在<kernel/timer.c>中的到實現。
  建立定時器首先要先定義它,然後通過一個輔助函式初始化定時器資料結構的內部值,初始化必須在使用其他定時器管理函式之前完成:
  
        #including <linux/Timer.h>


  struct timer_list my_timer;              //建立定時器
  init_timer(&my_timer);                    // 初始化定時器
  my_timer.expires = jiffies + HZ/10; //100ms
  my_timer.data = 0;                        //
  my_timer.function = my_function; //my_function自定義的定時器處理函式
  add_timer(&my_timer);                //最後,啟用定時器

  【補充】
  也可以這樣呼叫:
  1、setup_timer(struct timer_list, function,data); //初始化timer並賦值func和data
  2、mod_timer();修改並啟動之。另外,定時值可以這樣設定:msecs_to_jiffies(50);
  呼叫方式:
  mod_timer(&mytimer, jiffies + msecs_to_jiffies(50) );

注意: 定時器只執行一次,若想週期性的啟動定時器,在my_function()函式中新增mod_timer()函式。

static void my_function(struct work_struct *work)
 {
     mod_timer(&button_time,jiffies + HZ/10);
  }

 

timer_list結構體如下:

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
  };

linux定時器在按鍵中斷驅動中的實際應用可參考:

https://www.cnblogs.com/ape-ming/p/5110996.html

 

參考:https://blog.csdn.net/yihui8/article/details/45900871