一、jiffies定时器,HZ=100,精度只能达到10ms。

注:采用jiffies+msecs_to_jiffies(xx ms);可做到ms级,不过精度不够

#include //DO-->jiffies调用头文件

#include   //DO-->timer_list结构体

static struct timer_list ms_timer;//DO-->定义timer_list结构体

static void ms_timer_handler(void)//DO-->定义定时器处理函数

{

printk("DO_DEBUG----------->%s\n",__func__);

// ms_timer.expires=jiffies+HZ;

ms_timer.expires=jiffies+msecs_to_jiffies(10);

ms_timer.function=&ms_timer_handler;

add_timer(&ms_timer);

}

static int32_t xxx_init(void)

{

// hrtimer_init_module();

init_timer(&ms_timer);                          //DO-->初始化定时器

ms_timer.expires=jiffies+msecs_to_jiffies(10);  //DO-->定义中断时间:10ms进入中断

//ms_timer.expires=jiffies+HZ;

//ms_timer.data=(unsigned long)ms_timer;//区分不同定时器,未验证

ms_timer.function=&ms_timer_handler;            //DO-->定义定时器中断处理函数

add_timer(&ms_timer);                           //DO-->增加注册定时器,使定时器生效

二、hrtimer高精度定时器,可做到ns级,此处做到毫秒如下例:

注:实际是为纳秒级,由此处ktime_set(const long secs, const unsigned long nsecs)决定的,参数下此处参数即可实现纳秒级。

#include  //DO-->hrtimer包含以下三个头文件 /* DMA APIs             */

#include

#include            /* struct timespec    */

#define KER_PRINT(fmt, ...) printk(""fmt, ##__VA_ARGS__);

static struct hrtimer vibe_timer;

static struct work_struct vibe_work;

static int value = 2000;   /*注:以毫秒ms为单位 Time out setting,2 seconds */

static enum hrtimer_restart vibrator_timer_func(struct hrtimer *timer)  //DO-->回调函数,中断时调用

{

struct timespec uptime;

do_posix_clock_monotonic_gettime(&uptime);

KER_PRINT("Time:%lu.%02lu\n",

(unsigned long) uptime.tv_sec,

(uptime.tv_nsec / (NSEC_PER_SEC / 1000)));

KER_PRINT("vibrator_timer_func\n");

schedule_work(&vibe_work);

return HRTIMER_NORESTART;

}

static void vibe_work_func(struct work_struct *work)  //DO-->工作队列函数

{

KER_PRINT("‘vibe_work_func‘-->work\n");

// msleep(50); /* CPU sleep */

vibe_timer.function = vibrator_timer_func;

hrtimer_start(&vibe_timer,

ktime_set(value / 1000, (value % 1000) * 1000000),HRTIMER_MODE_REL);

}

static void ker_driver_init(void)                        //DO-->hrtimer高精度定时器初始化函数

{

struct timespec uptime;

KER_PRINT("ker_driver_init\n");

hrtimer_init(&vibe_timer, CLOCK_MONOTONIC, HRTIMER_MODE_REL);  //DO-->hrtimer定时器初始化

vibe_timer.function = vibrator_timer_func;                     //DO-->hrtimer定时器回调函数

hrtimer_start(&vibe_timer,

ktime_set(value / 1000, (value % 1000) * 1000000),HRTIMER_MODE_REL);  //DO-->hrtimer定时器时间初始化,其中ktime_set(秒,纳秒)

do_posix_clock_monotonic_gettime(&uptime);    //线程建立时间,用于比较看(定时器)此时时间

KER_PRINT("Time:%lu.%02lu\n",

(unsigned long) uptime.tv_sec,

(uptime.tv_nsec / (NSEC_PER_SEC / 1000)));

INIT_WORK(&vibe_work, vibe_work_func);  /* Intialize the work queue */  //初始化工作队列

}

static int32_t xxxx_init(void)

{

ker_driver_init();

....

}

linux 定时器 jiffies,linux下jiffies定时器和hrtimer高精度定时器(示例代码)相关推荐

  1. python代码示例下载-Python下载网易云歌单歌曲的示例代码

    今天写了个下载脚本,记录一下 效果: 直接上代码: # 网易云 根据歌单链接下载MP3歌曲 import requests from bs4 import BeautifulSoup def main ...

  2. linux下网站服务器,Linux下使用Apache搭建Web网站服务器(示例代码)

    [[email protected] ~]# yum install elinks –y 主配置文件 [[email protected] ~]# ls/etc/httpd/conf/httpd.co ...

  3. 怎么判断linux22端口是否通,在Linux环境下使用SSH判断端口是否通(示例代码)

    在Linux环境下使用SSH判断端口是否通 在windows/linux环境下,可以使用telnet判断端口状态,但有时候在Linux环境下没有telnet,所以可以使用ssh判断端口状态. 一.ss ...

  4. linux杀死tomcat进程6,Linux下启动停止查看杀死Tomcat进程(示例代码)

    文章来自:http://www.linuxidc.com/Linux/2011-06/37180.htm 启动 一般是执行tomcat/bin/startup.sh,sh tomcat/bin/sta ...

  5. linux hexo使用教程,Linux下使用Hexo搭建github博客(示例代码)

    找到一篇靠谱的博客,备份一下: ---------以下原文------------------ Nodejs安装 因为hexo是基于nodejs的应用,所以要先安装nodejs才可以.我这里以Ubun ...

  6. linux代码环境配置,linux下配置环境变量【原创】(示例代码)

    # ~/.bashrc: executed by bash(1) for non-login shells. # see/usr/share/doc/bash/examples/startup-fil ...

  7. linux下mtr命令,linux-常用命令-mtr(示例代码)

    Mtr(My traceroute)是一个把ping和traceroute并入一个程序的网络诊断工具.Mtr提供了两个界面:一个ncurses界面,对从一个telnet会话中使用MTR有用:还有一个G ...

  8. linux用命令导出mysql数据库,linux下导入、导出mysql数据库命令(示例代码)

    一.导出数据库用mysqldump命令(注意mysql的安装路径,即此命令的路径): 1.导出数据和表结构: mysqldump -u用户名 -p密码 数据库名 > 数据库名.sql #/usr ...

  9. linux重定向进程输出到文件删除,Linux文件编辑器vim输出输入重定向、管道以及进程(示例代码)...

    合抱之木,生于毫末:九层之台,起于累土:千里之行,始于足下.正因基础的重要性,才又撸起了linux. linux编辑工具: VI VIM EMACS vim 是vi的升级版本,它不仅兼容vi的所有指令 ...

最新文章

  1. weblogic线程阻塞性能调优(图解)转
  2. gezabo变黑闪退,报错[gazebo_gui-2] process has died
  3. 信息学奥赛C++语言:求各位数和2
  4. 学习了下简单的光照模型
  5. VOC标签转化为YOLO标签
  6. 纺织品外观疵点及其成因分析大全
  7. 十步完成windows服务的安装
  8. textedit实时显示位置_奉化“实时公交”来了!再也不用在多变的天气里等公交啦!...
  9. 算法:两个数之和为目标数Two Sum II - Input array is sorted
  10. 零基础入门Matlab(一篇两个小时就能学完的入门博客)
  11. php上传禁止php_文件上传限制绕过技巧
  12. 2021-10-11 今日总结
  13. 类似于QQ的网络聊天室
  14. 【阿里云物联网平台-1】使用MQTTfx模拟客户端,往阿里云物联网平台发布数据
  15. 陶哲轩实分析 命题7.2.9 绝对收敛判别法
  16. 通往Android的神奇之旅-刘桂林-专题视频课程
  17. 全自动软化水设备:25t/h全自动流量型软化水设备特点
  18. 华为手机WIFI无线ADB教程
  19. Beta阶段测试报告
  20. Linux系统软件安装 Jdk MySQL Tomcat

热门文章

  1. python降低图片分辨率_Python之修改图片像素值的方法
  2. 正则表达式:包含邮箱和电话号码的案例格式
  3. 20172266遥感一班李安娜第五次笔记
  4. java mkfifo_如何在Android中创建命名管道(mkfifo)?
  5. 阻塞IO、非阻塞IO、以及多路复用原理
  6. 【黑客技巧】插上U盘自动按需复制文件
  7. 关于程序员这14条经典定律,我全中~
  8. JIRA-使用教程_项目设置
  9. 网课之家(wangkezhijia.net)绝无二心为您服务。为了你的突破我们竭尽所能
  10. 一台服务器配置多台ssl虚拟主机,同ip多域名虚拟主机SSL如何配置-SNI