kernel time

 linux内核是通过定时器中断来跟踪时间流;使用"HZ"宏表示1秒的时钟中断次数;
并使用"jiffies"及"jiffies_64"变量来记录时钟中断次数,在系统引导时计数器初始化为0。
  示例4_1
  1. #include <linux/jiffies.h>
  2. unsigned long stamp;
  3. stamp = jiffies + HZ; /* 之后1秒 */
  4. while( jiffies < stamp) /* 在这里忙等待1秒 */
  5. { cpu_relax();}
   1 比较jiffies计数器
   内核提供的辅助函数
  1. #include <linux/jiffies.h>
  2. int time_after(unsigned long a, unsigned b);     /* a时间比b靠后时,返回真 */
  3. int time_before(unsigned long a, unsigned b);    /* a比b靠前时,返回真 */
  4. int time_after_eq(unsigned long a, unsigned b);  /* a比b靠后或相等,返回真 */
  5. int time_before_eq(unsigned long a, unsigned b); /* a比b靠前或相等,返回真 */
实际上这些函数都是宏,这里写成函数形式看起来比较直观。
 因此示例4_1的"while"语句可改成
  1. while(time_before(jiffies, stamp))
 建议使用内核提供的函数或宏来操作jiffies,而不建议直接操作jiffies。

  2 内核表述方法(jiffies)与时间表述方法的转换
  时间表述方法可用的数据结构有"struct timeval"和"struct timespec"。其中"struct timeval"为老式的数但较为流行,它使用秒和毫秒值;而"struct timespec"为新式的,它使用的是秒与纳秒值。
 内核提供四个辅助函数用于jiffies的此类转换
  1. #include <linux/time.h>
  2. unsigned long timespec_to_jiffies(struct timespec *value);
  3. void jiffies_to_timespec(unsigned jiffies, struct timespec *value);
  4. unsigned long timeval_to_jiffies(struct timeval *val);
  5. void jiffies_to_timeval(unsigned long jiffies, struct timeval *value);
 这些函数看起来是那么明了,以至于无需示例加以说明。

   3 获取jiffies_64值
  内核提供辅助函数
  1. #include <linux/jiffies.h>
  2. u64 get_jiffies_64(void);
   4 获取CPU时钟周期数值
  使用jiffies值测量时间差间隔在大部分情况下已经足够,但如果测量更短的时间差,则可以使用处理器特定寄存器。内核为访问该寄存器提供以下接口:
  1. #include <asm/msr.h>
  2. rdtsc(low32, high32);
  3. rdtscl(low32);
  4. rdtscsll(var64);

  5. #include <linux/timex.h>
  6. cycles_t get_cycles(void);  /* cycles_t是能装入读取值的合适的无符号类型 */
 rdtsc宏是与体系结构相关,而get_cycles则与体系结构无关。

   5 获取当前时间
   内核辅助函数
  1. #include <linux/time.h>
  2. unsigned long mktime(unsigned int year, unsigned int mon, 
  3.                      unsigned int day,  unsigned int hour,
  4.                       unsigned int min, unsigned int sec);  /* 将墙钟时间转换为jiffies值 */
  5. void do_gettimeofday(struct timeval *tv);
  6. struct timespec current_kernel_time(void)


注:转载时请注明出自: add358.blog.chinaunix.net
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
《掌握FreeRTOS实时内核》是一本关于FreeRTOS实时内核的技术书籍。FreeRTOS是一款开源、免费的实时操作系统内核,广泛应用于嵌入式系统中。该书详细介绍了FreeRTOS内核的各个方面,帮助读者全面掌握这一实时操作系统。 书中首先介绍了FreeRTOS的基本概念和特点。FreeRTOS以其低开销、高可伸缩性和易用性而备受欢迎。读者将了解到FreeRTOS如何实现多任务管理、任务调度和资源管理,以及如何充分利用处理器的性能。 其次,书中深入探讨了FreeRTOS的任务管理和调度机制。读者将学习如何创建任务、控制任务的优先级和时间片分配,以及任务的挂起和终止。同时,书中还介绍了如何利用FreeRTOS的定时器和调度策略来实现实时性需求。 此外,书中还涉及了FreeRTOS的中断处理和任务通信机制。读者将了解如何处理中断,并通过信号量、消息队列和事件标志等机制实现多任务之间的通信与同步。这些内容对于读者理解嵌入式系统的并发编程非常重要。 最后,书中还包含了一些实际案例和示例代码,帮助读者更好地理解和应用FreeRTOS。通过实践,读者可以掌握FreeRTOS内核的使用技巧和调试方法,加深对实时操作系统的理解。 综上所述,《掌握FreeRTOS实时内核》是一本全面介绍FreeRTOS的技术书籍,适合那些希望深入了解和应用FreeRTOS内核的嵌入式开发人员。通过学习这本书,读者可以掌握FreeRTOS的工作原理和使用技巧,提高嵌入式系统开发的能力。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值