我想了解如何在C中使用jiffies实现经过的时间。 让我们假设我有一系列指令
#include <linux/jiffies.h>
unsigned long js,je,diff;
/***Start Time***/
/*Series of instructions*/
/***End Time***/
使用jiffies,我必须在代码上写什么? 这样写是对的吗?
#include <linux/jiffies.h>
unsigned long js,je,diff;
unsigned int diffusec;
js = jiffies; /***Start Time***/
/*Series of instructions*/
je = jiffies; /***End Time***/
diff = je - js;
diffusec = jiffies_to_usecs(diff);
是不是?使用jiffies比使用getnstimeofday函数更好吗?
答案 0 :(得分:2)
您可以这样做:
struct timeval start, finish;
long delta_usecs;
do_gettimeofday(&start);
..
// execute your processing here
..
do_gettimeofday(&finish);
delta_usecs = (finish.tv_sec - start.tv_sec) * 1000000 +
(finish.tv_usec - start.tv_usec);
由于您正在使用ARM arch,因此可以通过修改在dmesg上打印分辨率的内核模块来检查系统计时器的可用分辨率:
#include <linux/version.h>
#include <linux/module.h>
#include <linux/hrtimer.h>
#include <linux/time.h>
static struct hrtimer timer;
static int __init hrtimer_test_init(void)
{
struct timespec time;
hrtimer_init(&timer, CLOCK_MONOTONIC, HRTIMER_MODE_ABS);
hrtimer_get_res(CLOCK_MONOTONIC, &time);
printk(KERN_ERR "resolution : %u secs and %u nsecs.\n",
time.tv_sec, time.tv_nsec);
return 0;
}
static void __exit hrtimer_test_exit(void)
{
return ;
}
module_init(hrtimer_test_init);
module_exit(hrtimer_test_exit);
MODULE_AUTHOR("hrtimer test for demo only");
MODULE_DESCRIPTION("hrtimer resolution");
MODULE_LICENSE("GPL");
如果分辨率是jiffies期间的ns数,那么您的平台上的数量有限,否则,您可以考虑使用hrtimers来监控处理时间。
要编译前面的代码:您可以重用以下Makefile:
KERNELDIR := /lib/modules/$(shell uname -r)/build
.PHONY: all clean
clean:
$(MAKE) -C $(KERNELDIR) M=$(shell pwd) clean
rm -rf *~
all:
$(MAKE) -C $(KERNELDIR) M=$(shell pwd) modules
obj-m := hrtimer-test.o
希望有所帮助。 Aymen。