9.2时间管理之shortdelay、currenttime

短延时mdelay、udelay、ndelay
睡眠延时msleep、ssleep

shortdelay目录:

 1 obj-m    := demo.o
 2 
 3 #KERNEL    := /lib/modules/$(shell uname -r)/build/
 4 KERNEL    := /lib/modules/$(shell uname -r)/build/
 5 
 6 all:
 7     make -C $(KERNEL) M=`pwd`
 8 clean:
 9     make -C $(KERNEL) M=`pwd` clean
10     
 1 /* head file */
 2 #include <linux/init.h>
 3 #include <linux/module.h>
 4 #include <linux/sched.h>
 5 
 6 #include <linux/delay.h>
 7 
 8 /*    
 9  *    非睡眠延时:    
10  *    ndelay/udelay/mdelay
11  *
12  *    睡眠延时:
13  *    nsleep/ssleep      msleep
14  * */
15 
16 /*
17  *    time_before/time_before_eq
18  *    time_after/time_after_eq
19  * */
20 void mydelay(u32 s)
21 {
22     u32 end = jiffies + s*HZ;
23 
24     while (time_before((unsigned long)jiffies, (unsigned long)end)) {
25         schedule();    
26     }
27 }
28 
29 void mysleep(u32 s)
30 {
31     set_current_state(TASK_INTERRUPTIBLE);
32     schedule_timeout(s*HZ);
33 }
34 
35 #if 0
36 void mysleep(u32 s)
37 {
38     wait_queue_head_t wait;
39     init_waitqueue_head(&wait);
40     wait_event_interruptible_timeout(wait, 0, HZ*s);
41 }
42 #endif
43 
44 void bootok_total_time(void)
45 {
46     u32 h, m, s;
47     s = jiffies/HZ;
48 
49     h = s/3600;
50     m = s%3600/60;
51     s = s%60;
52 
53     printk("bootok totoal time: %02dh-%02dm-%02ds\n", h, m, s);
54 }
55 
56 /* driver module entry */
57 static int __init demo_init(void)
58 {
59     printk("HZ = %d, jiffies = %lu\n", HZ, jiffies);
60 
61     bootok_total_time();
62     mysleep(1);//睡眠等待
63     bootok_total_time();
64 
65     return 0;
66 }
67 
68 module_init(demo_init);
69 
70 
71 /* driver module exit */
72 static void __exit demo_exit(void)
73 {
74     printk("goodbye, world!\n");
75 }
76 module_exit(demo_exit);
77 
78 /* driver module description */
79 MODULE_LICENSE("GPL");
80 
81 MODULE_AUTHOR("crmn");
82 MODULE_VERSION("crmn1.0");
83 MODULE_DESCRIPTION("example for driver module arch");

 

currenttime目录:

1 obj-m    := demo.o
2 
3 KERNEL    := /linux-3.5/
4 
5 all:
6     make -C $(KERNEL) M=`pwd`
7 clean:
8     make -C $(KERNEL) M=`pwd` clean
9     
  1 /* head file */
  2 #include <linux/init.h>
  3 #include <linux/module.h>
  4 #include <linux/sched.h>
  5 
  6 #include <linux/delay.h>
  7 
  8 /*do_gettimeofday*/
  9 /*
 10  * @do_gettimeofday(struct timeval *tv);
 11  *
 12  * struct timeval time;
 13  *
 14  * do_gettimeofday(&time);
 15  *
 16  *
 17  * @struct timespec current_kernel_time(void)
 18  *
 19  * struct timespec time;
 20  *
 21  * time = current_kernel_time();
 22  * */
 23 
 24 /*    
 25  *    非睡眠延时:    
 26  *    ndelay/udelay/mdelay
 27  *
 28  *    睡眠延时:
 29  *    nsleep/ssleep
 30  * */
 31 
 32 /*
 33  *    time_before/time_before_eq
 34  *    time_after/time_after_eq
 35  * */
 36 void mydelay(u32 s)
 37 {
 38     u32 end = jiffies + s*HZ;
 39 
 40     while (time_before((unsigned long)jiffies, (unsigned long)end)) {
 41         schedule();    
 42     }
 43 }
 44 
 45 void mysleep(u32 s)
 46 {
 47     set_current_state(TASK_INTERRUPTIBLE);
 48     schedule_timeout(s*HZ);
 49 }
 50 
 51 #if 0
 52 void mysleep(u32 s)
 53 {
 54     wait_queue_head_t wait;
 55     init_waitqueue_head(&wait);
 56     wait_event_interruptible_timeout(wait, 0, HZ*s);
 57 }
 58 #endif
 59 
 60 void bootok_total_time(void)
 61 {
 62     u32 h, m, s;
 63     s = jiffies/HZ;
 64 
 65     h = s/3600;
 66     m = s%3600/60;
 67     s = s%60;
 68 
 69     printk("bootok totoal time: %02dh-%02dm-%02ds\n", h, m, s);
 70 }
 71 
 72 /* driver module entry */
 73 static int __init demo_init(void)
 74 {
 75     struct timespec tmspec0, tmspec1;
 76     long tv;
 77 
 78     tmspec0 = current_kernel_time();
 79     mdelay(10);
 80     tmspec1 = current_kernel_time();
 81     
 82     tv = tmspec1.tv_nsec - tmspec0.tv_nsec;
 83 
 84     printk("tv = %ld\n", tv);    
 85  
 86     return 0;
 87 }
 88 
 89 module_init(demo_init);
 90 
 91 
 92 /* driver module exit */
 93 static void __exit demo_exit(void)
 94 {
 95     printk("goodbye, world!\n");
 96 }
 97 module_exit(demo_exit);
 98 
 99 /* driver module description */
100 MODULE_LICENSE("GPL");
101 
102 MODULE_AUTHOR("crmn");
103 MODULE_VERSION("crmn1.0");
104 MODULE_DESCRIPTION("example for driver module arch");

 

posted @ 2017-04-06 11:34  bkycrmn  阅读(374)  评论(0)    收藏  举报