函数
void ndelay(unsigned long nsecs)纳秒时函数
void udelay(unsigned long usecs)微秒延时函数
void mdelay(unsigned long mseces)毫秒延时函数
1.Linux 内核提供的定时器 API 函数,通过这些定时器 API 函数我们可以完成很多要求定时的应用。 Linux内核也提供了短延时函数,比如微秒、纳秒、毫秒延时函数。
2.高节拍率和低节拍率的优缺点:
①、高节拍率会提高系统时间精度,如果采用 100Hz 的节拍率,时间精度就是 10ms,采用1000Hz 的话时间精度就是 1ms,精度提高了 10 倍。高精度时钟的好处有很多,对于那些对时
间要求严格的函数来说,能够以更高的精度运行,时间测量也更加准确。
②、高节拍率会导致中断的产生更加频繁,频繁的中断会加剧系统的负担, 1000Hz 和 100Hz
的系统节拍率相比,系统要花费 10 倍的“精力”去处理中断。中断服务函数占用处理器的时间
增加,但是现在的处理器性能都很强大,所以采用 1000Hz 的系统节拍率并不会增加太大的负
载压力。根据自己的实际情况,选择合适的系统节拍率。
3.Linux 内核使用全局变量 jiffies 来记录系统从启动以来的系统节拍数,系统启动的时候会将 jiffies 初始化为 0, jiffies 定义在文件 include/linux/jiffies.h 中。
4.Linux 内核提供了毫秒、微秒和纳秒延时函数
void ndelay(unsigned long nsecs); //纳秒时函数
void udelay(unsigned long usecs); //微秒延时函数
void mdelay(unsigned long mseces); //毫秒延时函数
5.定时器的使用:
1)添加头文件:
#include <linux/timer.h>
#include <linux/jiffies.h>
2)定义一个定时器设备:
struct timer_dev timerdev;
3)在入口函数中初始化定时器
init_timer(&timerdev.timer);
timerdev.timeperiod = 500; //500ms
timerdev.timer.function = timer_func; //定时器回调函数
timerdev.timer.expires = jiffies + msecs_to_jiffies(timerdev.timeperiod);/* 超时时间 500毫秒 */
timerdev.timer.data = (unsigned long)&timerdev;
add_timer(&timerdev.timer); /* 启动定时器 */
4)定时器回调函数 timer_func函数 实现
//定时器处理函数
static void timer_func(unsigned long arg)
{
struct timer_dev *dev = (struct timer_dev*)arg;
static int sta = 1;
sta = !sta; /* 每次都取反,实现 LED 灯反转 */
gpio_set_value(dev->led_gpio, sta);
/* 如果需要定时器周期性运行的话就使用 mod_timer函数重新设置超时值并且启动定时器。*/
mod_timer(&dev->timer, jiffies + msecs_to_jiffies(dev->timeperiod));
}