Linux驱动:内核延时测试


环境:

主机:Fedora 12

目标板:MINI6410

目标板LINUX内核版本:2.6.38

实现功能:

延迟2S

 

方法1:利用系统全局变量jiffies

jiffies记录系统节拍,每一次节拍,内核时钟中断函数会将jiffies加1.

HZ在ARM中为100,表示1S被分为100份,系统每个节拍为10ms.

修改上篇《Linux驱动编写:LED驱动测试》(见 )中的ioctl函数,测试延时

[cpp]
  1. <span style="font-family:'Arial Black';font-size:18px;">//功能:ioctl操作函数   
  2. //返回值:成功返回0   
  3. static long led_driver_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)  
  4. {  
  5.     unsigned int temp = 0;  
  6.     unsigned long t = 0;  
  7.       
  8.     temp = readl(S3C64XX_GPKDAT);  
  9.     if (cmd == 0)  
  10.     {  
  11.         temp &= ~(1 << (arg + 3));  
  12.     }  
  13.     else  
  14.     {  
  15.         temp |= 1 << (arg + 3);  
  16.     }  
  17.   
  18.     //等待2S   
  19.     t = jiffies;  
  20.     while (time_after(jiffies,t + 2 * HZ) != 1);  
  21.     writel(temp,S3C64XX_GPKDAT);  
  22.   
  23.     printk (DEVICE_NAME"\tjdh:led_driver cmd=%d arg=%d jiffies = %d\n",cmd,arg,jiffies);  
  24.       
  25.     return 0;  
  26. }</span>  
这个方法会使内核忙等待,会影响系统效率.

2.利用宏ndelay(n),延时ns

udelay(n),延时us

mdelay(n),延时ms

这个简单,不做介绍

  • 1
  • 2
  • 下一页

相关内容