Linux C/C++定时器的实现原理和使用方法

我记得有一次我在一个开源项目中调试一个定时器函数。
这是一个用C语言编写的基于Linux的系统。
我坐在电脑前,光标在屏幕上跳跃,映出我忧心忡忡的脸。
该计时器需要正确执行用户空间任务,但它总是不正确、提前或延迟。

我查看了代码,发现它使用了setitimer函数来设置计时器。
我记得那是一个下午。
我坐在实验室的椅子上,不断修改代码,调整定时器参数。
我尝试了许多不同的事情,例如更改计时器分辨率,甚至尝试不同的时钟源。

最后,我发现问题出在时钟功率上。
原来系统默认使用的是系统时钟,而我的任务需要更高精度的计时,所以我改用了高精度的硬件时钟源。
那一刻,我松了口气,时钟终于准时启动了。

不过,我还是觉得,如果我能更深入地了解一点,比如时间之轮是如何运作的,我就可以避免这个麻烦。
时间之轮,听起来很复杂,它是如何运作的呢?怎样才能让计时器如此准确呢?

有没有办法可以获取linux开发板的硬件定时器频率

2 02 3 年,朋友说默认系统心率是1 00Hz。
当我看到这个的时候,Linux内核源码根目录下的配置文件居然写着1 00Hz。
该脉搏率类似于心跳。
Linux 内核将使用 CONFIGHZ 变量来设置自己的时钟。
该文件还提到了 Includeasmgenericparamh。
还有一个全局变量jiffies记录从启动到现在的tick数。
jiffies 在启动时初始化。
不过我只是想了一下,系统启动时jiffies的初始值是多少,这部分我不太清楚,算了。