定时器是一个很长用的一个功能,需要周期性处理的工作都要用到定时器。在使用内核定时器的时候需要注意一点,内核定时器并不是周期性运行的,超时以后就会关闭,因此想要周期性定时,就需要重启定时器。

jiffes

Linux内核使用全局变量jiffies记录系统从启动以来的系统节拍数,系统启动时,Jiffies会初始化为0。 jiffies_64用于64位系统,jiffies用于32位系统,jiffies就是jiffies_64的低32位,不管在32位还是64位系统都可以使用jiffies。

要使用内核定时器首先需要定义一个timer_list结构体。

        struct   timer_list   timer;                /* 定义一个定时器*/

1,当定义完结构体变量之后需要对结构体进行初始化

init_timer(&timerdev.timer);

2,启动定时器,需要向内核注册,注册完成之后就会定时器,但是只会启动一次

//加载之前需要将timer结构体里面的数据进行设置//定义定时去处理函数,需要处理的数据放在处理函数里面,例如点灯
timer.function = timer_func   //传递给函数的数据,通常是设备的结构体,比如设置引脚高低电平
timer.data = (unsigned long)&timerdev //定时器的超时时间,2000ms也就是2s
timer.expires = jffies + msecs_to_jiffies(2000);//这个定时器启动函数只能启动定时一次,启动之后就会关闭
add_timer(&timerdev.timer);//删除定时器有两种方法
del_timer(&timer);           多处理器的时候也会删除其他处理的的定时器
del_timer_sync(&timer);      会等待其他定时器处理完再删除

3,当想要重复使用定时器的时候,需要重启定时器

//加载之前需要将timer结构体里面的数据进行设置//定义定时去处理函数,需要处理的数据放在处理函数里面,例如点灯
timer.function = timer_func   //传递给函数的数据,通常是设备的结构体,比如设置引脚高低电平
timer.data = (unsigned long)&timerdev 。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。//与上面的代码段区别就在这里了使用的函数不一样,且expries直接放在了函数体内,不用放在外部定义了
//第二个参数数就是expries,他会按照超时时间一直重启定时器,也就是会每次定时都会处理定时器函数
mod_timer(&dev->timer, jiffies + msecs_to_jiffies(dev->timeperiod)); 

有时候我们需要在内核中实现短延时,尤其在linux内核驱动中,内核提供了毫秒,微妙,和纳秒延时函数。

函数timer_unlocked_ioctl,对应应用程序ioctl,应用程序调用ioctl函数向驱动发送控制信息,此函数响应并执行。此函数有三个参数:filp,cmd 和 arg,其中 filp是对应的设备文件,cmd 是应用程序发送过来的命令信息,arg 是应用程序发送过来的参数,,一共有三种命令 CLOSE_CMD,OPEN_CMD 和 SETPERIOD_CMD,这三个命令分别为关 闭定时器、打开定时器、设置定时周期。

***只有在定时器函数里面定义mod_timer()才会一直刷新定时器,不然add_timer()和mod_timer()都只会开启一次定时器函数

嵌入式linux 定时器相关推荐

  1. 嵌入式Linux设备驱动程序:用户空间中的设备驱动程序

    嵌入式Linux设备驱动程序:用户空间中的设备驱动程序 Embedded Linux device drivers: Device drivers in user space Interfacing ...

  2. linux pwm 调屏_基于嵌入式Linux的LCD背光调节及驱动的实现

    0 引言 在手持式设备中,液晶显示屏的使用越来越广泛.由于LCD自身是不能发光的,它需要一个强劲的光源来给它提供背光,以便清晰地显示信息.这样的光源是非常耗电的,通常液晶显示屏的功耗常常占到系统总功耗 ...

  3. 嵌入式linux硬件成本,嵌入式Linux驱动和固件有何区别?供应商是如何用固件压缩成本的?...

    原标题:嵌入式Linux驱动和固件有何区别?供应商是如何用固件压缩成本的? 作为一个驱动开发者, 你可能发现你面对一个设备必须在它能支持工作前下载固件到它里面. 硬件市场的许多地方的竞争是如此得强烈, ...

  4. 嵌入式linux内核oops,Linux编程时遇到Oops提示该如何排查?

    各位工程师在Linux下开发程序时,有没有遇到由于系统中存在某些小故障而跳出了"Oops"提示的情况,此时你是如何排查故障?一行行的查看代码吗?其实不用那么复杂,本文将为你介绍一种 ...

  5. ARM的嵌入式Linux移植体验之操作系统

    转自:[url]http://dev.yesky.com/153/2527653.shtml[/url] 06-08-13 08:00 作者: 宋宝华 出处: 天极开发 责任编辑:方舟 在笔者撰写的& ...

  6. 嵌入式linux实时化技术,嵌入式Linux实时化技术

    引言 Linux支持PowerPC.MIPS.ARM.DSP等多种嵌入式处理器,逐渐被用于多种关键性场合.其中实时多媒体处理.工业控制.汽车电子等特定应用对Linux提出了强实时性需求.Linux提供 ...

  7. 对四方继保实施嵌入式Linux开发培训

    四方公司系我国电力行业和北京市中关村科技园区的知名企业,10月23-25日对该企业进行了18课时的企业培训,感谢四方公司工作同志的支持. 培训大纲: 第一天 1. Linux 系统开发的总述 1.1 ...

  8. 嵌入式Linux内核移植相关代码分析(转)

    本文通过整理之前研发的一个项目(ARM7TDMI +uCLinux),分析内核启动过程及需要修改的文件,以供内核移植者参考.整理过程中也同时参考了众多网友的帖子,在此谢过.由于整理过程匆忙,难免 错误 ...

  9. 嵌入式基于linux电机控制器,基于嵌入式Linux的移动机器人控制系统

    使用select机制监控是否语音识别结果,在超出等待时间后,会退出等待并重新初始化语音模块LD3320,释放公共资源,这样也使得系统能够及时响应LD3320的MP3播放功能,避免了在长时间没有语音识别 ...

  10. 从单片机转到嵌入式Linux的跨度大吗?

    这是我今天一个同学问我的 我再零散的说一些观点,如果大家有这方面的经验,也帮忙在文章下留言,谢谢大家. 先说共同点 单片机和嵌入式他们最终都是要跑硬件的,所以你也会遇到像GPIO口.I2C.串口.SP ...

最新文章

  1. 2020 蚂蚁面试指南!
  2. 【noip模拟赛4】Matrix67的派对 暴力dfs
  3. 小程序支付成功后跳转页面失败
  4. mongo系统(1)
  5. Android Studio增加assets目录、raw目录
  6. 关于javascript dom扩展:Selector API
  7. Java String常用的两个方法
  8. HDU-2502 月之数 组合数
  9. Server SAN:弄潮儿云计算时代
  10. Atlas 调用web service
  11. 动态规划实战4-leetcode 5.Longest Palindromic Substring
  12. word2007导出pdf带书签
  13. 各类常用软件汇总【转载冰封工作室】
  14. 微信小程序之地图功能
  15. 第四代测序技术(纳米孔测序技术)
  16. Java中Calendar基本使用--Comparator.comparing比较排序
  17. 苹果软件更新在哪里_苹果iOS 14.1/iPadOS 14.1正式版发布:新增更新机型[多图]-软件资讯...
  18. C#--使用Process类kill进程
  19. java定义负数_java定义一个负数
  20. Android 9格锁屏

热门文章

  1. 展望未来城市,万物皆可运营
  2. 【人工智能】想要入坑机器学习?这是MIT在读博士的AI心得
  3. 中国省份、市区、地区县信息表
  4. RTL8153B RTL8153 千兆以太网 有~现 ~货
  5. 软件系统测试工作指南
  6. Qt软件的发展历史及优势特点
  7. 数学分析教程(科大)——6.1笔记+习题
  8. 刘士颉老师——德鲁克“卓有成效”管理理论的践行者,曾任宜信公司培训负责人
  9. oracle数据库技术_创建 pdb数据库
  10. Java Access Bridge