4412开发板android入门篇_Linux内核时间管理.docVIP

4412开发板android入门篇_Linux内核时间管理.doc

  1. 1、本文档共7页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
4412开发板android入门篇_Linux内核时间管理

Linux内核定时器的使用 linux内核中定时器的使用,定时器是很重要的内容,在调试TP或者其他许多程序时都涉及到定时器的使用,因此掌握定时器的运用是必备的。 下面将介绍定时器驱动的常用函数。对于具体的驱动后面的文档会以蜂鸣器驱动为例,并介绍框架层及应用怎样去控制蜂鸣器。 1.linux系统时间频率定义 系统定时器的时钟频率HZ?定义在?arch/arm/include/asm/param.h #define ?Hz ?100 ?//ARM构架基本都是100 2.节拍总数(jiffies) ?全局变量jiffies用来记录自系统启动以来产生的节拍总数,根据这个节拍总数可以获得系统自启动以来的时间,linux系统启动时,会将jiffies初始化为0, 3.访问jiffies变量 ?jiffies总是无符号长整数,该变量定义在linux/jiffies.h文件中 内核定时器 使用内核定时器的步骤 1. 定义内核定时器结构体变量 ?内核定时器需要一个timer_list结构体(#includelinux/timer.h),该结构体指定的内核定时器处理函数等 struct timer_list { ?struct list_head entry; ? ? ?//定时器链表入口 ?unsigned long expires; ? //以jifffies为单位的定时值(过期时间) ?struct tvec_base *base; ? // 定时器内部值,用户不要使用 ?void (*function)(unsigned long); ? ? // 定时器处理函数 ?unsigned long data; ? ? ? ? ? ? ? ? ? ? ? ? ?//传给处理函数的长整形参数值 ?int slack; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //与expires组合成新的expires,在第二部会初始化这个变量 #ifdef CONFIG_TIMER_STATS ?int start_pid; ?void *start_site; ?char start_comm[16]; #endif #ifdef CONFIG_LOCKDEP ?struct lockdep_map lockdep_map; #endif }; 2.初始化内核定时器(实际初始化timer_list?结构体) 初始化内核定时器需要使用init_timer宏(#includelinux/timer.h),该宏原型如下: #define init_timer(timer) ? ? ??init_timer_key((timer), NULL, NULL)? ?其中timer就是timer_list的指针,init_timer主要调用了init_timer_key函数 void init_timer_key(struct timer_list *timer,??const char *name,?struct lock_class_key *key)? { ?debug_init(timer); ?__init_timer(timer, name, key); } static void __init_timer(struct timer_list *timer, ? ? const char *name, ? ? struct lock_class_key *key) { ?timer-entry.next = NULL; ?timer-base = __raw_get_cpu_var(tvec_bases); ?timer-slack = -1; #ifdef CONFIG_TIMER_STATS ?timer-start_site = NULL; ?timer-start_pid = -1; ?memset(timer-start_comm, 0, TASK_COMM_LEN); #endif ?lockdep_init_map(timer-lockdep_map, name, key, 0); } 3.实现定时器处理函数 定时器处理函数原型如下: ? void ?timer_handle(unsigned long arg) ??//arg就是 ?timer_list?.data的值 4.对timer_list?成员变量的进一步初始化 初始化function函数和expires的值,到达过期时间expires时执行function函数。 5.激活定时器 ? 定时器激活才能使用。使用add_timer函数才能激活定时器,add_timer函数原型如下: void add_timer(struct timer_lis

文档评论(0)

sb9185sb + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档