系统定时器HZjiffies

Posted Li-Yongjun

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了系统定时器HZjiffies相关的知识,希望对你有一定的参考价值。

系统定时器

系统定时器是一种可编程硬件芯片,它能以固定频率产生中断,该频率可以通过编程预定,称作节拍率(tick rate),该中断就是定时器中断
节拍率是通过静态预处理定义的,也就是 HZ,在系统启动时按照 HZ 值对硬件进行设置。
i386 体系结构中系统定时器频率为 1000Hz,但其它体系结构的节拍率大多数都等于 100。

宏定义

以树莓派为例

/linux/include/uapi/asm-generic/param.h

#ifndef HZ
#define HZ 100
#endif

linux/include/linux/jiffies.h

extern u64 __cacheline_aligned_in_smp jiffies_64;
extern unsigned long volatile __cacheline_aligned_in_smp __jiffy_arch_data jiffies;

打印 HZ、jiffies

编个小程序打印一下 HZ 和 jiffies 的值
hello.c

#include <linux/init.h>
#include <linux/module.h>
#include <linux/kernel.h>

MODULE_LICENSE("Dual BSD/GPL");

static int hello_init(void)

    printk("HZ = %d\\n", HZ);
    printk("hello_init, jiffies = %ld\\n", jiffies);

    return 0;


static void hello_exit(void)

    printk("hello_exit, jiffies = %ld\\n", jiffies);


module_init(hello_init);
module_exit(hello_exit);

Makefile

obj-m = hello.o

KDIR=/home/liyongjun/project/board/buildroot-2021.05/RPi3/build/linux-custom
CROSS_COMPILE=/home/liyongjun/project/board/buildroot-2021.05/RPi3/host/bin/arm-buildroot-linux-uclibcgnueabihf-

all:
	make -C $(KDIR) M=$(PWD) ARCH=arm CROSS_COMPILE=$(CROSS_COMPILE) modules
clean:
	make -C $(KDIR) M=$(PWD) ARCH=arm CROSS_COMPILE=$(CROSS_COMPILE) clean

运行

上传到树莓派中运行

# insmod hello.ko && sleep 1s && rmmod hello
[60740.476063] HZ = 100
[60740.479956] hello_init, jiffies = 6044048
[60741.495989] hello_exit, jiffies = 6044150

验证了 HZ 等于 100;jiffies 一秒种增加 100

以上是关于系统定时器HZjiffies的主要内容,如果未能解决你的问题,请参考以下文章

Linux驱动开发定时器

Linux驱动开发定时器

嵌入式实时操作系统10——系统时钟节拍

RT-Thread快速入门-时钟管理

rtthread学习笔记系列第一篇:定时器

ucosii的系统时钟来源