当前位置:  技术问答>linux和unix

驱动里用于获取时间差的函数有哪些?

    来源: 互联网  发布时间:2016-12-11

    本文导语:  RT,小弟最近在搞个红外遥控的驱动,采用PPM(时间差)调制,想获取两个下降沿之间的时间差,在毫秒级别,但是我用如下代码获取时间差时竟然会得到负的时间差....以下是中断触发函数的主要内容:               ...

RT,小弟最近在搞个红外遥控的驱动,采用PPM(时间差)调制,想获取两个下降沿之间的时间差,在毫秒级别,但是我用如下代码获取时间差时竟然会得到负的时间差....以下是中断触发函数的主要内容:

       
         …………
         count++;
do_gettimeofday(&tv_now);
time_interval  = tv_now.tv_usec - tv_last.tv_usec;
          printk("ir_interrupt:count=%d,time_interval=%ldn",count,time_interval);
         …………

打印结果:
ir_interrupt:count=841,time_interval=924
ir_interrupt:count=842,time_interval=93                        
ir_interrupt:count=843,time_interval=835
ir_interrupt:count=844,time_interval=-925                      //负的时间差???!!
ir_interrupt:count=845,time_interval=356
ir_interrupt:count=846,time_interval=90
ir_interrupt:count=847,time_interval=31843
ir_interrupt:count=848,time_interval=1633
ir_interrupt:count=849,time_interval=87540                     //时间差太大,
ir_interrupt:count=850,time_interval=624


是do_gettimeofday这个函数的精度不够吗?  那有什么更精确点的函数吗?  谢谢 GM8180的平台。

|
do_gettimeofday 是给用户空间调用的,估计可能导致睡眠使得时间差巨大,且中断中不允许睡眠。

驱动中
ms级别 mdelay()
us级别 udelay()
ns界别 ndelay() (2.6内核),
注意不要混用数量级,如udelay(1000)不适合干mdelay(1)的工作
这些延时函数都有些微误差

就算你用jiffies,也要注意jiffies也会发生回绕
要使用内核提供的宏操作jiffies
例如如果内核HZ=1000
延时10ms代码

unsigned long delay=jiffies+10;
while(time_before(jiffies,delay));


|
那我想你就只能直接读jiffies或者找找是不是有记录tick的全局变量了。


帮顶

|
jiffies

|
tv_now.tv_usec - tv_last.tv_usec;

你这里只计算了微妙部分啊。肯定会出现负的。
比如从1.00009到2.00008.。。

long long int consted=(tv_now.tv_sec - tv_last.tv_sec)*1e6+(tv_now.tv_usec - tv_last.tv_usec);

|
会不会有ntpd在同步机器时间?

    
 
 

您可能感兴趣的文章:

  • 救急!!linux驱动函数问题!!
  • 【求助】:如何用ioctl()函数调用一个驱动程序
  • 驱动开发有没有函数手册
  • CAT命令读取设备文件,驱动read函数被反复调用,为什么?
  • 驱动函数中的return
  • usb驱动关于probe函数
  • linux驱动中probe函数中参数传递问题?
  • linux和unix iis7站长之家
  • 请教:Linux驱动程序中的llseek函数
  • 底层硬件驱动如何调用应用层的回调函数,求指点!
  • Linux内核驱动中有没有像waitforsingleobject这样的函数
  • 请教:修改Linux内核时,需要调用驱动程序的函数,头文件也包含了,但是编译时候说头文件找不到!
  • linux驱动程序中怎么做api函数供应用程序调用
  • linux 下 usb 鼠标驱动 关于 open 函数里面 mouse->irq->dev = mouse->usbdev 疑问
  • linux驱动open函数问题,大家来看看(我没有分,所以给的少点)
  • 诡异的问题,关于应用程序调用驱动内函数时的执行顺序
  • C# 调用API函数弹出映射网络驱动器对话框问题
  • linux驱动中的接口函数的不理解
  • 请教一下网卡驱动里面的几个函数
  • RTC驱动测试函数read_time怎么写?
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 如何获取驱动程序的基本信息(版本、作者、描述等等)
  • 如何获取java连接oracle的驱动?
  • MTD驱动获取flash布局的疑问
  • c#不使用windows api函数打开我的电脑和获取电脑驱动器信息
  • php中内置的mysql数据库连接驱动mysqlnd简介及mysqlnd的配置安装方式
  • 字符设备驱动,混杂设备驱动,总线、设备、驱动模型、平台驱动
  • UIO(linux Userspace I/O子系统)用户空间设备驱动I/O技术介绍
  • 好不容易下到sis900网卡for unix的驱动,但装上驱动后系统驱动时: SiS900 adapter initialization failure!
  • 我的网卡在redhat7.3下不能自动驱动,但我有for linux的驱动程序,请问如何才能驱动我的网卡,我是菜菜,请详细说明,谢谢!
  • Linux环境下,“PC机的驱动”与“嵌入式驱动”有什么区别?
  • linux:怎么在驱动中调用IIC驱动?
  • linux驱动 单片机驱动
  • linux下一个驱动怎么调用另一个驱动
  • u boot中怎样写flash驱动以及串口驱动
  • Linux环境下,如何一个驱动中调用另外一个驱动
  • 一个驱动文件,生成多个驱动模块??
  • -------------- 请问大家,做好一个PCI设备驱动了,如何做个应用程序来使用这个驱动呢??
  • pcie驱动和pci驱动
  • usb驱动中 hcd,pcd,device,gadget驱动有什么区别啊?
  • 移植pci驱动和RTL8139网卡驱动,只发生一次中断?
  • 想试着编写简单驱动玩,但是手头上没有什么好驱动的设备,大家支招
  • 请教有关linux驱动开发,按关机键关机时,驱动应作哪些结束工作?
  • Linux源代码中ata驱动为什么要调用pci驱动的代码
  • Linux设备驱动(第三版)- 字符设备驱动 - 例子
  • Linux 9.0+865G,只能上到640×480,Intel官方站点的最新驱动安装失败,那位有驱动?


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3