设备使用的linux 2.6.32内核,因业务需要与标准时间高度同步,误差不能大于10ms。 时分秒都是通过GPS校时装置直接获取,然后在应用程序中设置,这个没问题。 同时GPS校时装置会在每秒的整点发一个脉冲,硬件上这个脉冲是连在设备的一个GPIO口上,用来精确对时。 现在问题来了,由于linux本身的任务调度的精度都不止10ms,所以如果我在应用程序中处理秒脉冲的话,精度误差肯定是保证不了10ms了。 我的问题是:1、那么可不可以在GPIO...
#include #include #include int main() { struct timeb tp; struct tm * tm; ftime (&tp); tm = localtime (&( tp.time )); printf("%02d:%02d:%02d:%03d\n", (tm->tm_hour), (tm->tm_min), (tm->tm_sec),(tp.millitm )); //? } 这个是纳秒级的. CODE: #include #include #include #include inline unsigned long long GetNTime() { __asm ("RDTSC"); } int main() { l...
我想使用个定时器,定时调用某个函数,到网上搜搜,linux定时器有alarm和setitimer,决定用setitimer,因为它可循环定时并且理论上可以精确到微秒,可是在使用是发现while(1);的死循环很耗内存,请问各位高手有其它的方式可以实现目的吗?
你门好,希望大家能够在百忙之中帮我一下,谢谢 现在我要用linux定时器,现在我的系统是redhat9(2.4内核的), 在网上看的他的时钟中断频率是100Hz,现在我要用定时器。 我的主要用处就是进行数据采集->数据处理->数据发送。就是用一个数字量板卡, 现在我想用它进行精确的定时,本来老师的要求是精确定时1ms,但是 好像在2.4内核的linux下面实现不了,因为我可以通过示波器看它的波形, 我试了一下,虽然在程序中可以定时...
linux内核中定义了一个timer_list结构,我们在驱动程序中可以利用之: struct timer_list { struct list_head list; unsigned long expires; //期望定时器执行的jiffies值 unsigned long data; //作为参数被传入定时器处理函数 void (*function)(unsigned long); }; 下面是关于timer的API函数: 增加定时器 void add_timer(struct timer_list * timer); 删除定时器 int del_timer(struct timer_list * timer)...
核主要需要两种类型的时间: 1. 在内核运行期间持续记录当前的时间与日期,以便内核对某些对象和事件作时间标记(timestamp,也称为“时间戳”),或供用 户通过时间syscall进行检索。 2. 维持一个固定周期的定时器,以提醒内核或用户一段时间已经过去了。 PC机中的时间是有三种时钟硬件提供的,而这些时钟硬件又都基于固定频率的晶体振荡器来提供时钟方波信号输入。这三种时钟硬件 是:(1)实时时钟(Real Time Clock,RTC...
时钟中断由系统的定时硬件以周期性的时间间隔产生,这个间隔(即频率)由内核根...
最近小弟用 int timer_create(); int timer_settime(); 这两个函数实现了个定时器,先分享一下吧, 程序运行良好。 但是小弟最近在做android的ndk ,大家都知道android底层也是linux吗,我就用类,把这个定时器封装了一下,类的成员函数负责定时器 的创建、开始、删除等 但是有个问题,经过跟踪,创建的时候成功了,但是timer_settime就出现了问题,并且报了错误 Program received signal ?, Unknown signal. Cannot remove br...